- 我正在尝试编写一个正确的命令行,以便 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。