Ansible
如何使用清單和 group_vars 文件對主機進行 win_ping 操作?
- 我正在嘗試編寫一個正確的命令行,它將 ping 到我的清單文件中詳細說明的所有主機
- 我的碼標頭檔:
FROM centos:7 RUN yum check-update; \ yum install -y gcc libffi-devel python3 epel-release; \ yum install -y python3-pip; \ yum install -y wget; \ yum clean all RUN pip3 install --upgrade pip; \ pip3 install "ansible"; \ wget -q https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt; \ pip3 install -r requirements-azure.txt; \ rm requirements-azure.txt; \ ansible-galaxy collection install azure.azcollection \ WORKDIR /github CMD ["/usr/sbin/init"]
- 所有主機都是 Windows 作業系統主機
- 在我的 Ansible 庫結構下方
C:. └───bla_product └───core ├───ansible │ ├───inventories │ │ ├───production │ │ ├───staging │ │ └───test │ │ ├───cloud │ │ └───onpremis │ │ └───domain.com │ │ │ lab_x.yml │ │ │ │ │ └───group_vars │ │ windows.yml │ │ │ ├───playbooks │ └───roles
- 我的庫存文件 lab_x.yml 如下所示:
--- all: children: root: children: center: children: appservers: hosts: centeriis.domain.com: ansible_host: 200.10.0.100 qservers: hosts: centerq.domain.com: ansible_host: 200.10.0.101 dbservers: hosts: centerdb.domain.com: ansible_host: 200.10.0.102 serverfarms: hosts: children: gateways: hosts: south: children: brooklyn: hosts: srv1.domain.com: ansible_host: 200.10.0.103 children: endpoints: hosts: client1.domain.com: ansible_host: 200.10.0.105 client2.domain.com: ansible_host: 200.10.0.106 north: children: newyork: hosts: srv2.domain.com: ansible_host: 200.10.0.104 children: endpoints: hosts: client3.domain.com: ansible_host: 200.10.0.107
- 該
windows.yml
文件包含引用所有主機的連接詳細資訊,因為它們都是 Windows 作業系統主機:--- ansible_connection: winrm ansible_user: domain\user ansible_password: password
- 執行以下命令
ansible all -i lab_r.yml -m win_ping
結果:[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]. This feature will be removed from ansible-core in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. centeriis.domain.com | UNREACHABLE! => { "changed": false, "msg": "[Errno None] Unable to connect to port 22 on 200.10.0.100", "unreachable": true }
- 嘗試這個
ansible windows.yml -i lab_r.yml -m win_ping
給出:[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]. This feature will be removed from ansible-core in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg. [WARNING]: Could not match supplied host pattern, ignoring: windows.yml [WARNING]: No hosts matched, nothing to do
- 我在這個“故事”中缺少什麼?
- 文件或命令有問題嗎?
- Ansible 使用 22 埠而不是 WinRM 協議的原因是什麼?
- win_ping 命令可以在這個階段工作還是我必須持有劇本和角色(任務)文件才能工作?
- 如何使整個業務正常執行(使用 Inventories 和 group_vars 文件夾中的文件的命令)?
您的清單中的所有主機都不在名為“windows”的組中,因此您的 windows.yml 永遠不會被使用,並且 Ansible 會回退到預設協議,即 ssh。
如果您只有 Windows 伺服器,最簡單的解決方案是將連接資訊放入 all.yml。