如何通过 win_ping 连接具有 inventory 和 group_vars 文件的主机?

如何通过 win_ping 连接具有 inventory 和 group_vars 文件的主机?
  • 我正在尝试编写一个正确的命令行,以便 ping 到我的清单文件中详细说明的所有主机
  • 我的docker文件:
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 文件夹中的文件的命令)?

答案1

您的库存中的任何主机都不属于名为“windows”的组,因此您的 windows.yml 从未被使用过,并且 Ansible 会恢复到默认协议,即 ssh。

如果您只有 Windows 服务器,最简单的解决方案就是将连接信息放入 all.yml。

相关内容