我有两个库存,分期和生产。
分段内容:
[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