使用 with_items 连接字符串并分配给 Ansible 中的变量
Concatenate strings using with_items and assign to a variable in Ansible
我需要在启动 ec2_instances 时将两个 2 IP 保存到 vars_file 中的一个变量,稍后在部署过程中使用。
这是我保存单个服务器 ip 的方式:
- name: Save server public IP to vars file
lineinfile: line="server_public_ip{{':'}} {{ item.public_ip }}"
dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}"
with_items: server.instances #server is registered in previous task
我在 dynamic_ips 文件中的输出是 server_public_ip: xxx.xxx.xx.x
现在我有 2 个服务器启动并注册为服务器。
我需要将其保存为 server_public_ips: xxx.xx.x.xx , xxx.x.xx.x
我尝试声明一个空字符串并向其附加 ips,类似这样,但出现错误。
set_fact:
ips: ""
set_fact:
ips: " {{ ips }} + {{ item.public_ip}} "
with_items: servers.instances #servers is registered in previous task
lineinfile: line="server_public_ips{{':'}} {{ ips }}"
dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}"
我认为可以使用 lineinfile insertafter 和 regex 来完成。
最后,我需要在不同的服务器上执行此操作,
- name: Restrict access to outside world
command: iptables INPUT {{ item }} ACCEPT
with_items: {{ server_public_ips }}.split(,) #grant access for each ip
command: iptables INPUT DROP
set_fact:
ips: " {{servers.instances | join(',') }} "
当 servers.instances 是一个列表时应该可以正常工作。
我需要在启动 ec2_instances 时将两个 2 IP 保存到 vars_file 中的一个变量,稍后在部署过程中使用。
这是我保存单个服务器 ip 的方式:
- name: Save server public IP to vars file
lineinfile: line="server_public_ip{{':'}} {{ item.public_ip }}"
dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}"
with_items: server.instances #server is registered in previous task
我在 dynamic_ips 文件中的输出是 server_public_ip: xxx.xxx.xx.x
现在我有 2 个服务器启动并注册为服务器。
我需要将其保存为 server_public_ips: xxx.xx.x.xx , xxx.x.xx.x
我尝试声明一个空字符串并向其附加 ips,类似这样,但出现错误。
set_fact:
ips: ""
set_fact:
ips: " {{ ips }} + {{ item.public_ip}} "
with_items: servers.instances #servers is registered in previous task
lineinfile: line="server_public_ips{{':'}} {{ ips }}"
dest="{{ansible_env.HOME}}/dynamic_ips_{{ec2_environment}}"
我认为可以使用 lineinfile insertafter 和 regex 来完成。
最后,我需要在不同的服务器上执行此操作,
- name: Restrict access to outside world
command: iptables INPUT {{ item }} ACCEPT
with_items: {{ server_public_ips }}.split(,) #grant access for each ip
command: iptables INPUT DROP
set_fact:
ips: " {{servers.instances | join(',') }} "
当 servers.instances 是一个列表时应该可以正常工作。