在 Ansible 中跨主机分区数据(访问任务中主机的 "index"?)
Partitioning data across hosts in Ansible (access "index" of host in task?)
我正在尝试使用 Ansible 进行一些并行计算。我的数据可以简单地并行化,我只需要在我的主机(EC2 实例)之间拆分文件。有规范的方法可以做到这一点吗?
下一个最好的办法是拥有一个针对每个主机递增的计数器。假设我已经将我的数据拆分为我的工人数量,我希望能够在每个工人任务中说:
- file: src=data/users-{{host_index}}.csv dest=/mnt/users.csv`.
然后,每个工作人员都可以使用单独的脚本处理他们的 users.csv
副本,该脚本与他们拥有的用户组无关。有没有办法得到这个计数器索引?
我是 Ansible 的初学者,所以我想知道我是否忽略了 Ansible 或 Jinja 中的一个简单模块或习惯用法。提前致谢。
事实证明,我可以访问 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 顺序迭代)
我正在尝试使用 Ansible 进行一些并行计算。我的数据可以简单地并行化,我只需要在我的主机(EC2 实例)之间拆分文件。有规范的方法可以做到这一点吗?
下一个最好的办法是拥有一个针对每个主机递增的计数器。假设我已经将我的数据拆分为我的工人数量,我希望能够在每个工人任务中说:
- file: src=data/users-{{host_index}}.csv dest=/mnt/users.csv`.
然后,每个工作人员都可以使用单独的脚本处理他们的 users.csv
副本,该脚本与他们拥有的用户组无关。有没有办法得到这个计数器索引?
我是 Ansible 的初学者,所以我想知道我是否忽略了 Ansible 或 Jinja 中的一个简单模块或习惯用法。提前致谢。
事实证明,我可以访问 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 顺序迭代)