2017-09-15 77 views
0

我可以毫無問題地訪問遠程服務器,並且我想發送bwcli命令,它是Broadworks服務器的CLI。我正在使用shell代碼發送命令。用ansible執行Expect命令不會輸出任何內容

通常情況下,如果我想進入我型bwcli的CLI但這樣做時,它無法識別遠程所以我sendig這個sudo -u bworks /usr/local/broadworks/bw_base/bin/bwcli

,而不是像這樣:

#! /usr/bin/expect 

expect ":" 

send "sudo -u bworks /usr/local/broadworks/bw_base/bin/bwcli\r" 

expect ">" 

send "?\r" 

expect "AS_CLI>" 

我的劇本就像做這個:

-script: /home/ansible/playbooks/David/get_command.sh >> bwcli_login.log 

當劇本運行時,它顯示OK=1 changed=1 unreachable=0 failed=0。 所以我假設它可以工作,但是當我打開「bwcli_login.log」時,我發現它是空的。 這只是我在進入CLI時想要的代碼中的第一步,我發送了一些其他命令來檢索服務器的某些信息。這是令人討厭的,我卡在第一步:( 我欣賞,如果有人可以告訴我爲什麼文件輸出文件是空的?我做錯了什麼?

回答

0

它是否工作時,您手動運行腳本?沒有ansible遠程服務器

可以執行不同用戶的腳本,而無需在腳本中使用sudo su <username>,還要檢查/與stdout_lines分享ansible輸出,它會更容易調試

腳本:

#! /usr/bin/expect 
expect ":" 
send "/usr/local/broadworks/bw_base/bin/bwcli\r" 
expect ">" 
send "?\r" 
expect "AS_CLI>" 

ansible:

- name: run script 
    script: /home/ansible/playbooks/David/get_command.sh 
    become: yes 
    become_user: bworks 
    register: out 

- debug: var=out.stdout_lines 

你試圖使用ansible expect_module

我根本不是famishler,而是BroadWorks,但也許你可以嘗試做下面的例子。

你將需要:

指揮艙需要命令來運行,

響應 - 期望的字符串/正則表達式和字符串與迴應的映射。如果響應是一個列表,則連續的匹配將返回連續的響應。

http://docs.ansible.com/ansible/latest/expect_module.html

我不知道,如果下面的例子是你需要什麼,或者它是否會工作,只是要一起工作。

- name: expect test 
    expect: 
    command: /usr/local/broadworks/bw_base/bin/bwcli 
    response: 
     '>': "?\r" 
+0

嗨柏林,感謝您的反饋。我已遵循您的建議,並得到:[ok:[AS_2] => { 「changed」:false, 「out.stdout_lines」:[ 「」, 「您的密碼將在762天后過期。 「, 」/ usr/local/broadworks/bw_base/bin/bwcli「 ] } – ChakEL

+0

我不確定您應該看到什麼,但現在您可以看到腳本的輸出。 – Berlin

+0

好的,所以我不知道你的問題:) – Berlin

0

確定:[AS_2] => { 「變爲」:假, 「out.stdout_lines」:[ 「」, 「您的密碼將在762天(多個)到期。」, 「的/ usr /本地/ BroadWorks的/ bw_base/bin中/ bwcli」 ] }

0

她是我的劇本的輸出

確定:[AS_2] => { 「變爲」:假, 「out.stdout_lines」:[ 「」, 「您的密碼將在762天后過期」, 「/ usr/local/broadworks/bw_base/bin/bwcli」, 「cd/Monitoring/Report「, 」current「 ] }

0

您必須考慮到,在BroadWorks CLI中,'cd'命令與等效的shell命令行爲相似,可以從一個CLI上下文導航到另一個CLI上下文。但是,我不確定是否存在「發送」cd/Monitoring/Report「\ r」中的根目錄。 爲了回到CLI的根目錄,您可以使用:'send'qa; cd Monitoring/Report;'\ r'。 此外,爲了驗證您是否轉移到了正確的CLI上下文,您可能希望「期望」監控/報告>「''>'的原因。 請注意,expect可以用來定義函數。

+0

嗨Francozen,感謝您的反饋,我試圖直接測試(沒有ansible)在服務器上沒有登錄到bwcli,我沒有得到任何輸出。基本命令「ll ls」但是沒有這個輸出。所以我決定去看一下期待教程,因爲我相信這個問題主要是因爲我對期望的工作缺乏瞭解。如果我已經解決了這個問題,我會更新它。 – ChakEL

+0

你好,我現在的工作是比我預想的:) #簡單!在/ usr/bin中/預計 #這將設置爲發送到遠程服務器 設定的超時5 產卵的bash每次發送命令超時 發送 「bwcli \ R」 期望 「AS_CLI>」 發送 「L管理\ R」 期望 「密碼:」 發送 「MYPASSWORD \ R」 期望 「AS_CLI>」 #這些是5個命令在oneline 發送「qbw; 3; 0; 7; 2 \ r」 期望eof – ChakEL

+0

首先這個shell腳本運行良好locall沒有ansible,我得到我期望的輸出。但是當我使用Ansible運行它時,我可以看到我登錄並且輸出中充滿了這個「」: ========================= ====「, 」「, 」BroadWorks命令行界面「, 」「, 」鍵入HELP以獲取更多信息「, 」「,」============== ================================================== ==」, 「」, 「讀初始CLI命令文件...」, 「」, 「\ u001b [?1H」, 「」, 「」, 「」 – ChakEL