如何从文件中读取特定行并将其注册为变量并将其传递给ansible中的另一个角色
我正在使用ansible角色创建azure映像,以下是我的剧本示例:如何从文件中读取特定行并将其注册为变量并将其传递给ansible中的另一个角色,ansible,Ansible,我正在使用ansible角色创建azure映像,以下是我的剧本示例: - hosts: localhost gather_facts: yes roles: - azure_vmcreator - hosts: azure_vms gather_facts: no roles: - vm_software - download_Artifact - hosts: localhost gather_facts: yes roles:
- hosts: localhost
gather_facts: yes
roles:
- azure_vmcreator
- hosts: azure_vms
gather_facts: no
roles:
- vm_software
- download_Artifact
- hosts: localhost
gather_facts: yes
roles:
- azure_imagecreator
我们的想法是在download_Artifact角色中下载一个f.exe文件并将其安装到vm中,安装时f.exe将创建一个product.id文件。我想读取该文件的第二行并将其注册为变量,比如image_prefix,这样我就可以在azure_imagecreator角色中使用image_prefix变量并创建一个图像,将其添加到前缀中
我是ansible新手,有人能帮我解决这个问题吗?在剧本中访问另一台主机上设置的变量不是很简单。一般工作流如下所示: 在
download_Artifact
中,使用set_fact
模块将相关行保存为host_var
。(set_fact
始终将变量存储为主机变量)
您可以使用和_file
将文件内容放入变量,然后使用jinja获取文件的第二行:
- name: Print Second line of a File
debug:
msg: "{{ item.split("\n")[1] }}"
with_file:
- "/filepath"
jinja2代码段所做的是在换行符上拆分文件,将其转换为一个行数组,然后访问第二行(数组索引从0开始)
您需要使用set\u fact
模块将该字符串保存到变量中,而不是打印内容
然后,在第三个剧本中,将设置为参数的hostvar传递给角色。Use可以使用hostvars..
访问另一台主机的hostvars
如果事先不知道主机名,可以在playbook执行期间使用ansibles特殊变量groups
获取名称。然后,调用看起来有点像这样(虽然尚未对此进行测试,并且假设您的角色接受名为image\u prefix
)的变量):
谁应该从文件中读取一行并将其发送到变量?@VinayUpadhyay我已经更新了答案,告诉您如何获取文件的内容。
- hosts: localhost
gather_facts: yes
roles:
- name: azure_imagecreator
azure_imagecreator:
image_prefix: hostvars[groups.azure_vms[0]].image_prefix