ansible - ansible when 条件语句 - 关于 jinja2 模板分隔符的警告
问题描述
所以我正在使用这个ansible剧本:
# Check if /backup folder is mounted
- name: "Check if /backup folder is mounted"
command: /bin/mountpoint {{ do_backup_folder }}
register: mount_status
failed_when: false
changed_when: false
tags: ['digitalocean', 'spaces', 'mount']
# Mount digitalocean spaces to /backup
- name: "Mount digitalocean spaces to /backup as {{ litecoin_user }} user"
shell: |
s3fs {{ do_spaces_name }} {{ do_backup_folder }} -o url={{ do_spaces_url }} -o use_cache=/tmp -o allow_other -o use_path_request_style -o nonempty -o uid={{ getent_passwd.litecoin[1] }} -o gid={{ getent_passwd.litecoin[1] }}
when: mount_status.stdout == "{{ do_backup_folder }} is not a mountpoint"
tags: ['digitalocean', 'spaces', 'mount']
其中do_backup_folder在 group_vars中定义为 /backup。
剧本运行得很好,但是在运行时我得到了这个:
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: mount_status.stdout == "{{ do_backup_folder }} is not a mountpoint"
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: mount_status.stdout == "{{ do_backup_folder }} is not a mountpoint"
当条件消除此警告时,我应该如何重写它?我已经尝试了几种方法,但它不起作用。我想{{ do_backup_folder }}
在 when 条件下使用变量。
解决方案
在一个when:
上下文中,整个事情都隐含在{{ ... }}
这就是为什么他们抱怨后续使用的原因{{
——嵌套 jinja2 胡子是一种严重的反模式。
出于同样的原因,一个人不需要把mount_status.stdout
胡须包起来,也不需要把它们包do_backup_folder
起来。唯一的后续决定是是否使用+
or ~
(前者是 pythonic 运算符,后者是jinja2 字符串 concat 运算符,当希望将参数强制转换为字符串时会使用)
- name: "Mount digitalocean spaces to /backup as {{ litecoin_user }} user"
shell: |
s3fs {{ do_spaces_name }} {{ do_backup_folder }} -o url={{ do_spaces_url }} -o use_cache=/tmp -o allow_other -o use_path_request_style -o nonempty -o uid={{ getent_passwd.litecoin[1] }} -o gid={{ getent_passwd.litecoin[1] }}
when: mount_status.stdout == do_backup_folder + " is not a mountpoint"
tags: ['digitalocean', 'spaces', 'mount']
推荐阅读
- c# - 如何解决 API 中的“底层连接已关闭”
- python - Python 获取 Instagram 帖子的所有图片
- azure - 如何在具有基本身份验证的应用程序前设置 Azure SSO/MFA?
- python - 列表中的列表更改但列表中的 var 没有?
- sql - 如何将不同日期的重复条目计为单个条目?
- javascript - Javascript。如何创建一个创建对象的循环,然后将这些对象推入数组?
- javascript - 使用 JavaScript 将数据插入数据库时,控制台中会创建错误“超出最大调用堆栈大小”
- javascript - 如何在反应中将句柄更改添加到待办事项应用程序?
- javascript - 无法在模板文字中调用函数
- bash - 如何将 sed 命令应用于匹配的模式文本并在文件中替换?