ansible - 如何使用 ansible 根据 vars 标志将文件复制到机器?
问题描述
我正在尝试获取一个剧本来将一组不同的文件复制到服务器,这取决于它在 ansible 库存中所属的组上设置的标志。
代码如下
- name: check if they exist already
stat:
path: /home/me/set1files
register: st
- name: copy pre-prod if they don't
copy:
src: /home/me/set1files
dest: /home/me
owner: me
group: me
mode: "0644"
when: (st.stat.exists==false) and (is_emms_pp==true)
- name: check if prod files exist
stat:
path: /home/me/set2files
register: stprod
- name: copy prod files
copy:
src: /home/me/set2files
dest: /home/me
owner: me
group: me
mode: "0644"
when: (stprod.stat.exists==false) and (is_emms_pp==false)
并在库存文件中
[PPEMMS]
emmspp1
emmspp2
emmspp3
[PPEMMS:vars]
is_emms_pp = true
[PRODEMMS]
emms1
emms2
emms3
[PRODEMMS:vars]
is_emms_pp = false
[EMMS:children]
PPEMMS
PRODEMMS
当我在新的 PP 机器上运行脚本时,一切似乎都运行良好,但是当我在新的 Prod 机器上运行它时,它仍然会复制 PP 文件并跳过 Prod 机器的步骤。
这是一个有效的测试还是我有什么问题?
我的一个想法是,因为我将脚本限制为一台机器,而不是组,所以它没有选择 group_var?
我正在使用脚本作为
ansible-playbook -i inventory/hosts -l emms1 install_emms.yml --ask-vault-pass --extra-vars '@passwd.yml'
对于每台机器。
解决方案
变量is_emms_pp = true
是一个字符串。引用在运行时定义变量
"使用 key=value 语法传入的值被解释为字符串。如果您需要传递非字符串值,例如布尔值、整数、浮点数、列表等,请使用 JSON 格式。 "
给定库存以简化测试
test_01 is_emms_pp=true
test_02 is_emms_pp=false
剧本
- hosts: test_01,test_02
tasks:
- debug:
var: is_emms_pp|type_debug
给
ok: [test_01] =>
is_emms_pp|type_debug: str
ok: [test_02] =>
is_emms_pp|type_debug: str
字符串和布尔值之间的比较将失败
- debug:
msg: Copy file
when: is_emms_pp == true
给
skipping: [test_01]
skipping: [test_02]
一种选择是比较字符串。下面的任务按预期工作
- debug:
msg: Copy file
when: is_emms_pp == 'true'
给
ok: [test_01] =>
msg: Copy file
skipping: [test_02]
更简洁的选项是将变量转换为布尔值。下面的任务给出了相同的结果
- debug:
msg: Copy file
when: is_emms_pp|bool
如何修复条件的示例
- name: check if they exist already
stat:
path: /home/me/set1files
register: st
- name: copy pre-prod if they don't
debug:
msg: Copy set1files
when:
- not st.stat.exists
- is_emms_pp|bool
- name: check if prod files exist
stat:
path: /home/me/set2files
register: st
- name: copy prod files
debug:
msg: Copy set2files
when:
- not st.stat.exists
- not is_emms_pp|bool
推荐阅读
- ssl - 如何为两个子域使用一个 GCP 负载均衡器?
- r - 聚类分析 - 更改信息时查找唯一用户
- javascript - 移动设备上的 HTML 画布(react-native-canvas)闪烁
- python - Python 无法在同一个兄弟文件夹中导入某些模块
- node.js - Node.js 项目的 Azure Web 服务部署失败
- python - 如何在 python 中使用 Sparql Query 获取个人(实例)和值(文字)
- properties - 从 Cumulocity 的运营中移除财产不起作用?
- ios - 找不到框架 GoogleAppMeasurement for Firebase/AnalyticsWithoutAdIdSupport
- c# - 畅路销示例
- google-analytics - Google Analytics 4 广告系列 URL 构建器