我有以下名为hosts-local的库存文件
host-1 ansible_host=minio-1.localdomain
host-2 ansible_host=minio-2.localdomain
host-3 ansible_host=minio-3.localdomain
host-4 ansible_host=minio-4.localdomain
[minio_cluster_members]
host-1
host-2
host-3
host-4
[nginx_reverse_proxies]
host-1
host-3
[all:vars]
ansible_connection=ssh还有一本引用小组的剧本:
- name: "Install and configure Minio"
hosts: minio_cluster_members
become: yes
remote_user: ansible
roles:
- minio
- name: "Install and configure nginx reverse proxy"
hosts: nginx_reverse_proxies
become: yes
remote_user: ansible
roles:
- nginx我调用ansible像这样的$ ansible-playbook -i hosts-local playbook.yml
我最初的想法是拥有hosts-local、hosts-test和hosts-prod文件,以便在部署环境的基础上定义host-1、host-2等(尽管与其他组重复)。
但后来有人建议我看一下argument,特别是--limit参数,引用不可信的医生。这似乎特别相关:
最后,您可以使用--限制从文件中读取主机列表,方法是以@作为文件名的前缀: site.yml -限制@retry_hosts.txt
我读到这篇文章的方式是,我会有一个这样的清单文件:
[minio_cluster_members]
host-1
host-2
host-3
host-4
[nginx_reverse_proxies]
host-1
host-3
[all:vars]
ansible_connection=ssh然后为每个环境定义host-1、host-2等一系列文件:
# local dev hosts
host-1 ansible_host=minio-1.localdomain
host-2 ansible_host=minio-2.localdomain
host-3 ansible_host=minio-3.localdomain
host-4 ansible_host=minio-4.localdomain# test hosts
host-1 ansible_host=test-minio-1.test.domain.com
host-2 ansible_host=test-minio-2.test.domain.com
host-3 ansible_host=test-minio-3.test.domain.com
host-4 ansible_host=test-minio-4.test.domain.com等。
然后我会像这样调用ansible:$ ansible-playbook -i inventory playbook.yml --limit 'all:@hosts-local'
但为了我的生命,我不能让这件事起作用。它抱怨限制文件中的每一行(包括注释):
[WARNING]: Could not match supplied host pattern, ignoring: # local dev hosts
[WARNING]: Could not match supplied host pattern, ignoring: host-1 ansible_host=minio-1.localdomain
[WARNING]: Could not match supplied host pattern, ignoring: host-2 ansible_host=minio-2.localdomain
[WARNING]: Could not match supplied host pattern, ignoring: host-3 ansible_host=minio-3.localdomain
[WARNING]: Could not match supplied host pattern, ignoring: host-4 ansible_host=minio-4.localdomain我做错什么了?我是否误解了模式,特别是文件中的--limit参数的工作原理?文件应该是什么格式/语法?我在任何地方的互联网上都找不到这样的例子。
发布于 2020-06-19 16:04:58
我认为--limit的论点是一种“青鱼”,而不是我为解决这个问题而想要的。
我发现你可以指定多个库存文件。所以我有主要的库存hosts
[minio_cluster_members]
host-1
host-2
host-3
host-4
[nginx_reverse_proxies]
host-1
host-3
[all:vars]
ansible_connection=ssh我有一个本地主机的清单,叫做hosts-local。
[local]
host-1 ansible_host=minio-1.localdomain
host-2 ansible_host=minio-2.localdomain
host-3 ansible_host=minio-3.localdomain
host-4 ansible_host=minio-4.localdomain还有一个用于测试的叫做hosts-test
[test]
host-1 ansible_host=test-minio-1.test.domain.com
host-2 ansible_host=test-minio-2.test.domain.com
host-3 ansible_host=test-minio-3.test.domain.com
host-4 ansible_host=test-minio-4.test.domain.com我可以将它们与:$ ansible-playbook playbook.yml -i hosts -i hosts-local结合起来
就这样!非那样做不行。
此外,我还获得了拥有组test、local等的额外好处,因此我可以根据组名设置变量。
https://stackoverflow.com/questions/62473343
复制相似问题