Ansible:只从git-reo中克隆一个文件



是否有可能使用git ansible模块仅从git克隆文件?正如我所读到的,ansible中的git存档似乎只在本地克隆的repo中工作。

目前我使用这个:

- name: Bring file from git
shell:  git archive --remote=git://git.example.com/project.git HEAD:{{ test }} filename | tar -x -C folder1 -s /filename/filename_{{ test }}/
delegate_to: localhost

test变量在每个组下的inventory文件中定义,其他值为:

[group1:vars]
test=abc
[group1]
host1
host2
[group2:vars]
test=xyz
[group2]
host5
host6

是否有可能使shell模块是幂等的,以便如果文件已经下载并存在,就不会在来自同一主机组的主机上再次运行测试变量的相同值的相同任务。

例如:

如果我从上面为group1运行任务,该任务将在group1下的第一台主机上运行,并从git中获取文件,然后在group1的第二台主机上再次从git获取相同的文件。

我想做的是,如果该任务将第一台主机的git文件放在group1下,则不会再次从group1中取出相同的文件。

感谢

Q:"如果任务从git为组1下的第一个主机带来文件,则不会从git再次为组1中的主机2带来相同的文件。">

A:可以运行该任务(_O(。例如

- name: Bring file from git
shell:  git ...
run_once: true

Q:"行动手册以:-主机:所有开始。我希望每个组下的每个第一台主机都运行shell:git……">

A:可以将任务分为不同的剧本。从第一次播放的所有组中创建一组第一个主机。在第二次播放中,使用创建的组从git下载文件。准备好数据后,为所有主机运行第三次播放。例如

- name: Create group of hosts my_git_group
hosts: localhost
gather_facts: false
tasks:
- add_host:
name: "{{ groups[item]|first }}"
groups: 'my_git_group'
loop: "{{ groups.keys()|difference(['ungrouped', 'all']) }}"
- name: Download files from git
hosts: my_git_group
gather_facts: false
tasks:
- debug:
msg: "{{ inventory_hostname }} shell git"
- name: Proceed
hosts: all
gather_facts: false
tasks:
- debug:
msg: Proceed
run_once: true

相关内容

最新更新