我正在尝试使用Ansible进行一些并行计算。我的数据很容易并行化,我只需要在我的主机(EC2实例)之间拆分文件。是否有规范的方法来做到这一点?
下一个最好的事情是拥有一个为每个主机增加的计数器。假设我已将数据拆分为我的工作人员数量,我希望能够在每个工作人员任务中说:
- file: src=data/users-{{host_index}}.csv dest=/mnt/users.csv`.
然后,每个工作人员都可以使用单独的脚本处理他们的users.csv
副本,这对于他们拥有的用户集是不可知的。有没有办法获得这个反指数?
我是Ansible的初学者,所以我想知道我是否在Ansible或Jinja中忽略了一个简单的模块或习语。提前谢谢。
答案 0 :(得分:2)
事实证明,我可以访问ec2_facts
模块中名为ami_launch_index的变量,该变量为每个EC2实例提供零索引唯一ID。以下是将带有数字后缀的文件复制到相应EC2实例的代码:
tasks:
- name: Gather ec2 facts
action: ec2_facts
register: facts
- name: Share data to nodes
copy: src=data/websites-{{facts.ansible_facts.ansible_ec2_ami_launch_index}}.txt dest=/mnt/websites.txt
副本行为src值生成以下内容:
data/websites-1.txt
data/websites-0.txt
data/websites-2.txt
(无法保证主机将以ami_launch_index顺序迭代)