ansible - 如何在执行期间注册的 ansible 变量中转义单引号。我不能使用“\”,因为变量在注册之前是未知的
问题描述
当一个注册的变量中有一个单引号时,例如如果值var.stdout
是IxMy5NPG'dCbrHD
(注意字符串中的单引号)
当我在即将到来的任务中使用这个变量时,
lineinfile:
path: /path/to/file.j2
regexp: "X1234"
line: {{ var.stdout }}
mode: 0755
state: present
我收到以下错误
ERROR! failed at splitting arguments, either an unbalanced
jinja2 block or quotes
仅当字符串中有单引号时才会发生这种情况,可能有也可能没有单引号。因此,我不能期待并处理它。我在变量上尝试了一个 regex_replace 过滤器,就像{{ var.stdout | regex_replace("'", "\'") }}
我得到“模块执行期间意外失败”一样。
解决方案
表达式{{ var.stdout }}
必须被引用
lineinfile:
path: file.j2
regexp: X1234
line: {{ var.stdout }} # <-- WRONG
例如,给定文件
shell> cat file.j2
X1234
下面的任务
lineinfile:
path: file.j2
regexp: X1234
line: "{{ var.stdout }}" # <-- CORRECT
按预期工作
shell> cat file.j2
IxMy5NPG'dCbrHD
例如,如果您想用下划线“_”替换引号
- set_fact:
var_stdout: "{{ var.stdout|regex_replace(_regex, _replace) }}"
vars:
_regex: "'"
_replace: "_"
给
var_stdout: IxMy5NPG_dCbrHD
为避免转义,请将 _regex/_replace 放入任务的变量中。
如果你想逃避报价
_replace: "\\'"
给
var_stdout: IxMy5NPG\'dCbrHD
推荐阅读
- spring-boot - Spring Boot Kotlin 实体属性 val vs var
- facebook - Facebook 照片上传日期时间戳
- blazor - 如何在剃须刀类库的子布局中指定“MainLayout”
- javascript - 角度选择删除空白抛出 id 未定义错误
- ansible - Ansible 保险库密码文件格式是什么?
- java - 无效的数组显示
- javascript - 根据 span 标签中数字的大小设置显示属性
- linux - io_uring_setup 需要多少锁定内存?
- reverse-proxy - 反向代理背后的 Jibri 录制问题
- r - 在 Rselenium 中处理弹出的身份验证窗口