2017-09-20 61 views
0
My enviroment: RHEL 7.4 ansible host 
ansible-playbook 2.4.0.0-0.5.rc5.el7 
config file = /etc/ansible/ansible.cfg 

configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] 
ansible python module location = /usr/lib/python2.7/site-packages/ansible 
executable location = /usr/bin/ansible-playbook 
python version = 2.7.5 (default, May 3 2017, 07:55:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-14)] 

pysphere == 0.1.7Ansible:運行vsphere_guest

目標vCenter Server的WinRM的超時問題是Windows 2012R2,

我能成功使用這些ansible模塊(通過NTLM傳輸協議):

win_ping 
vmware_vm_facts 
vmware_guest_facts 

驗證了連接後,我試圖運行一個包含模塊vsphere_guest的劇本。

在啓動劇本30-40秒,我得到這個超時味精的發揮中止:

[警告]:致命錯誤期間傳送文件回溯(最近通話最後一個):文件「/usr/lib/python2.7/site- 包/ ansible /插件/連接/ winrm.py」,線路273,在_winrm_exec self._winrm_send_input(self.protocol,self.shell_id,command_id的,數據, EOF = is_last)文件 「/usr/lib/python2.7/site-packages/ansible/plugins/connection/winrm.py」,線253,在_winrm_send_input protocol.send_message(xmltodict.unparse(RQ))文件「的/ usr/lib/python2.7/site-packages/winrm/protocol.py「,第207行,在send_message中返回 self.transpor t.send_message(消息)文件 「/usr/lib/python2.7/site-packages/winrm/transport.py」,線202,在send_message提高 WinRMTransportError( 'HTTP',ERROR_MESSAGE)WinRMTransportError:(u'http」 ,u'Bad HTTP響應從服務器返回。代碼500' )

致命:[ndctc1-vcntr01.mso.mci.com]:失敗! => { 「失敗」:真實, 「味精」: 「WinRM的send_input失敗」 }

我迄今所做的:
修改:/usr/lib/python2.7/site-包/ WinRM的/ protocol.py

Changing these variables: 
DEFAULT_READ_TIMEOUT_SEC = 300 <-- was 30 (seconds) 
DEFAULT_OPERATION_TIMEOUT_SEC = 200 <-- was 20 (seconds) 
DEFAULT_MAX_ENV_SIZE = 353600 <-- 153600 

沒有修復的錯誤,它只做它顯示出來後...

Playbook: 
- hosts: all 
    gather_facts: false 
    connection: local 

    vars_prompt: 
    - name: "vcenter_hostname" 
     prompt: "Enter vcenter hostname" 
     private: no 
     default: "vcsa" 
    - name: "vcenter_user" 
     prompt: "Enter vcenter username" 
     private: no 
    - name: "new_hostname" 
     prompt: "Enter new hostname" 
     private: no 
    - name: "vcenter_pass" 
     prompt: "Enter vcenter password" 
     private: yes 

    vars: 
    datacenter: mydatacenter 
    cluster: mycluster 
    notes: 'Created by Ansible' 

    tasks: 
    - vsphere_guest: 
     vcenter_hostname: "{{ vcenter_hostname }}" 
     username: "{{ vcenter_user }}" 
     password: "{{ vcenter_pass }}" 
     validate_certs: no 
     power_on_after_clone: no 
     guest: "{{ new_hostname }}" 
     from_template: yes 
     template_src: mybuild-template 
     cluster: "{{ cluster }}" 
     vm_extra_config: 
      notes: "{{ notes }}" 

注:我不知道什麼值爲「template_src」輸入 我有一個名爲「mybuild-template」的虛擬機模板命名它是正確的嗎?

謝謝。

+1

我看不出在這個特定的劇本任何可以引發'winrm'連接。 –

+0

vsphere_guest稱之爲我假設。我在事件管理器中查看了遠程窗口。我看到一個成功的身份驗證,但代碼500可以意味着任何事情,除了「成功」。我正在調查以查看我的登錄帳戶是否已刪除priv來進行更改。因爲我可以執行win_ping,vmware_vm_facts和vmware_guest_facts等模塊。我認爲我也可以使用vsphere_guest。 – gantte

+0

我發現添加了一個缺少的參數,exsi:hostname:和datacenter :,但它在完成播放失敗時沒有任何區別。 – gantte

回答

0

感謝來自康斯坦丁極好的提示,我學到了兩件事情,固定我的問題:

庫存只需要在同一行上: 本地主機ansible_connection =本地 由於VMware都有它自己的API和通訊協議。 今天我明白了...

還有,我試圖使用的vCenter模板,而它通電。 一旦我關閉它,它就起作用了!