在 Ansible 中包含一个文件,并让它根据 when 条件执行 2 个或更多操作
Include a file in Ansible and have it perform 2 or more actions based on when condition
正在尝试包含名为 Agent-install.yml 的文件
并基于主机名的前 2 个字符(例如:dserver 或 qserver 或 userver 或 pserver)
想使用 sed 将 agent.properties.j2 更新为适当的值...
即如果主机名以 ds/qs/us 开头,则 agent.setup.IP=DevMaster1
否则,如果主机名以 ps 开头,则 agent.setup.IP=ProdMaster1
在任何一种情况下,它们都应该包括 Agent-install.yml
(顺便说一句,我在 playbook 运行 中传递了主机名,它确实有效
(只是没有 2 个动作)sed 部分是我想在这里添加的
有人知道如何做到这一点吗?
我试过使用 when 条件执行 2 个操作(但认为这是不允许的)
还尝试了 -block 允许多个操作但不允许 include
有更好的方法吗?
- name: Include if Pre-PROD
include: Agent-install.yml
local_action: shell sed -i 's@.*agent.setup.IP=localhost.*@agent.setup.IP=DevMaster1@' ../templates/agent.properties.j2
when: hosts[0:2] == "ds" or "qs" or "us"
ignore_errors: yes
- name: Include if PROD
include: Agent-install.yml
local_action: shell sed -i 's@.*agent.setup.IP=localhost.*@agent.setup.IP=ProdMaster1@' ../templates/agent.properties.j2
when: hosts[0:2] == "ps"
ignore_errors: yes
看来你走错了路...
模板用于根据输入数据生成不同的结果文件。
您不应该在本地 sed
模板。
将您的 agent.properties.j2
模板修改为:
agent.setup.IP={{ agent_ip }}
然后在你的剧本中:
- set_fact:
agent_ip: "{{ 'ProdMaster1' if hosts[0:2] == 'ps' else 'DevMaster1' }}"
- template:
src: agent.properties.j2
dest: agent.properties.conf
这样 agent.properties.conf
在目标主机上会有适当的价值。
正在尝试包含名为 Agent-install.yml 的文件 并基于主机名的前 2 个字符(例如:dserver 或 qserver 或 userver 或 pserver) 想使用 sed 将 agent.properties.j2 更新为适当的值...
即如果主机名以 ds/qs/us 开头,则 agent.setup.IP=DevMaster1 否则,如果主机名以 ps 开头,则 agent.setup.IP=ProdMaster1
在任何一种情况下,它们都应该包括 Agent-install.yml (顺便说一句,我在 playbook 运行 中传递了主机名,它确实有效 (只是没有 2 个动作)sed 部分是我想在这里添加的
有人知道如何做到这一点吗? 我试过使用 when 条件执行 2 个操作(但认为这是不允许的) 还尝试了 -block 允许多个操作但不允许 include
有更好的方法吗?
- name: Include if Pre-PROD
include: Agent-install.yml
local_action: shell sed -i 's@.*agent.setup.IP=localhost.*@agent.setup.IP=DevMaster1@' ../templates/agent.properties.j2
when: hosts[0:2] == "ds" or "qs" or "us"
ignore_errors: yes
- name: Include if PROD
include: Agent-install.yml
local_action: shell sed -i 's@.*agent.setup.IP=localhost.*@agent.setup.IP=ProdMaster1@' ../templates/agent.properties.j2
when: hosts[0:2] == "ps"
ignore_errors: yes
看来你走错了路...
模板用于根据输入数据生成不同的结果文件。
您不应该在本地 sed
模板。
将您的 agent.properties.j2
模板修改为:
agent.setup.IP={{ agent_ip }}
然后在你的剧本中:
- set_fact:
agent_ip: "{{ 'ProdMaster1' if hosts[0:2] == 'ps' else 'DevMaster1' }}"
- template:
src: agent.properties.j2
dest: agent.properties.conf
这样 agent.properties.conf
在目标主机上会有适当的价值。