Ansible Playbook生成文件时如何保留值中的双引号
Ansible Playbook生成文件时如何保留值中的双引号
我明白你的问题了——你想用Ansible生成YAML文件时,保留所有值的双引号,但当前使用to_nice_yaml过滤器输出的内容自动去掉了这些引号,这确实不符合你的预期。别担心,我们可以通过调整过滤器的参数轻松解决这个问题。
问题根源
to_nice_yaml过滤器底层依赖PyYAML库,默认情况下,PyYAML会自动移除不必要的引号(比如没有特殊字符的字符串)。但如果你需要强制保留双引号,我们可以通过传递额外参数来改变这个行为。
解决方案
修改to_nice_yaml过滤器,添加default_style='"'参数,这个参数会强制给所有标量值加上双引号。调整后的任务代码如下:
- name: Creating temporary file ansible.builtin.copy: content: | {{ test_var | to_nice_yaml(indent=2, default_style='"') }} dest: "./test_file" delegate_to: localhost
效果验证
运行修改后的Playbook后,生成的test_file内容就会和你期望的一致:
- hardware: - cpu: "4 Cores" disk: "HDD 50G" ram: "5G" hostname: "hostname" users: - email: "user@domain.com" groups: "group1, group2, group3" passwd: "sdf%^#(" user: "user"
小补充:其实YAML语法本身不需要给所有字符串加引号,只有包含空格、特殊符号的字符串才需要。但如果你的场景必须强制所有值都带双引号,上面的方法就完全适用。
备注:内容来源于stack exchange,提问作者Konstantin
相关产品推荐
相关产品推荐

