如何从任务库存中获取主机

我有两个库存,分期和生产。
分段内容:

[webserver] 192.168.56.101 #server 1 192.168.56.103 #server 2 

生产内容:

 [webserver] 192.168.56.108 #server test 

我从服务器1中提取存档文件,并将其发送到服务器testing,然后将其解压缩。
我的脚本如下:

 - name: fetch archived file to local machine fetch: src: /tmp/code_release_version_{{ release_version }}.tar.gz dest: /tmp/code_release_version_{{ release_version }}.tar.gz flat: yes tags: test - name: copy archived file to another remote server on /tmp directory copy: src: /tmp/code_release_version_{{ release_version }}.tar.gz dest: /tmp/code_release_version_{{ release_version }}.tar.gz delegate_to: 192.168.56.108 tags: test - name: extract files unarchive: src: /tmp/code_release_version_{{ release_version }}.tar.gz dest: /var/www copy: no delegate_to: 192.168.56.108 tags: test 

我玩:

 ansible-playbook -i staging --extra-vars "host=webserver[0] user=emma release_version=1" --ask-sudo-pass playbook.yml --tags "test" 

如何从库存获取主机,而不是手动写入主机,就像我做的那样delegate_to: 192.168.56.108

谢谢你。

我不认为你可以使用相同的组名称为不同的服务器组(不pipe在不同的环境中)。

当您运行剧本时,您正在为一个环境使用库存文件:

 ansible-playbook -i staging ... --extra-vars "host=webserver[0]" playbook.yml 

相反,您可能会尝试为包含所有服务器的这类任务提供第三个清单文件。

我猜你playbook.yml是这样的:

 hosts: "{{ host }}" tasks: - name: fetch archived file to local machine fetch: ... - name: copy archived file to another remote server on /tmp directory copy: .. delegate_to: 192.168.56.108 

所以一个解决方法,以避免委托使用所有包括的库存文件(让我们命名为:所有):

 [webserverdev] 192.168.56.101 #server 1 192.168.56.103 #server 2 [webserverprod] 192.168.56.108 #server test 

那么像下面的剧本:

 hosts: webserverdev[0] tasks: - name: fetch archived file to local machine fetch: ... hosts: webserverprod[0] - name: copy archived file to another remote server on /tmp directory copy: .. 

使用新的广告资源运行剧本:

 ansible-playbook -i all ... playbook.yml