Ansible

如何使用清單和 group_vars 文件對主機進行 win_ping 操作?

  • June 30, 2021
  • 我正在嘗試編寫一個正確的命令行,它將 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。

引用自:https://serverfault.com/questions/1068201