在Ansible的主机上对数据进行分区(访问"索引"主机在任务中?)

时间:2015-10-04 03:44:47

标签: jinja2 ansible ansible-playbook

我正在尝试使用Ansible进行一些并行计算。我的数据很容易并行化,我只需要在我的主机(EC2实例)之间拆分文件。是否有规范的方法来做到这一点?

下一个最好的事情是拥有一个为每个主机增加的计数器。假设我已将数据拆分为我的工作人员数量,我希望能够在每个工作人员任务中说:

- file: src=data/users-{{host_index}}.csv dest=/mnt/users.csv`.

然后,每个工作人员都可以使用单独的脚本处理他们的users.csv副本,这对于他们拥有的用户集是不可知的。有没有办法获得这个反指数?

我是Ansible的初学者,所以我想知道我是否在Ansible或Jinja中忽略了一个简单的模块或习语。提前谢谢。

1 个答案:

答案 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顺序迭代)