所以我知道我可以做这样的事情:
copy:
dest: /etc/issue
content: |
Hello
World
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
vars:
login_banner_text: !!str |-
"Hello\nWorld"
tasks:
- name: Set TTY login banner
copy:
dest: /etc/issue
content: "{{ login_banner_text }}"
Run Code Online (Sandbox Code Playgroud)
换行符直接打印到文件中,无需解析,即它是填充有\n字符串的单行。我想在不将文件复制到位的情况下执行此操作,因为我需要将此文本复制到两个文件中。
对于一个文件,\n字符串需要保持未解析状态,因此将其作为一行写入文件。对于另一个,我希望\n被解释,以便将文本扩展为多行。
正在使用ini_file模块修改第一个文件。此任务使用\n变量声明中的显式按预期工作。
- name: "Set message"
ini_file:
dest: /etc/dconf/db/gdm.d/00-security-settings
section: org/gnome/login-screen
option: banner-message-text
value: string '{{ login_banner_text }}'
create: yes
tags:
- always
Run Code Online (Sandbox Code Playgroud)
但是,其他模块也有这种行为。
如果我将文件复制到位,则必须在两个地方维护相当长的文本(不是“Hello World”)。
根据这篇文章,我发现,我认为这是一种更好的方法。它将横幅存储在一个单独的文件中,然后使用它来修改两个配置文件。所以这个值只存储在一个地方。但是,@larsks 给出的答案确实回答了最初提出的问题。
- hosts: 127.0.0.1
connection: local
vars:
login_banner_text: "{{ lookup('file', 'login_banner.txt') }}"
tasks:
- name: "Set the GNOME3 Login Warning Banner Text"
ini_file:
dest: /etc/dconf/db/gdm.d/00-security-settings
section: org/gnome/login-screen
option: banner-message-text
value: '{{ login_banner_text | to_json }}'
create: yes
tags:
- always
- name: "Set the TTY Login Warning Banner Text"
copy:
dest: '/etc/issue'
content: "{{ '\n' + login_banner_text + '\n' }}"
tags:
- always
Run Code Online (Sandbox Code Playgroud)
您已经知道如何使用文字换行符指定值;您content在第一个示例中设置密钥时正在这样做。您可以以相同的方式设置变量的值:
---
- hosts: localhost
gather_facts: false
vars:
mytext: |
Hello
World
tasks:
- copy:
dest: ./output.txt
content: "{{ mytext }}"
Run Code Online (Sandbox Code Playgroud)
这将创建output.txt内容:
Hello
World
Run Code Online (Sandbox Code Playgroud)
相反,如果您的目标是拥有这样的内容......
[org/gnome/login-screen]
banner-message-text = "Hello\nWorld"
Run Code Online (Sandbox Code Playgroud)
...那么你不想要文字换行符,你想要一个文字\n,在这种情况下,这将起作用:
---
- hosts: localhost
gather_facts: false
vars:
mytext: "Hello\\nWorld"
tasks:
- ini_file:
dest: ./example.ini
section: org/gnome/login-screen
option: banner-message-text
value: "{{ mytext }}"
create: true
Run Code Online (Sandbox Code Playgroud)
这将导致:
[org/gnome/login-screen]
banner-message-text = Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
如果您想要引用配置文件中的值,则:
- ini_file:
dest: ./example.ini
section: org/gnome/login-screen
option: banner-message-text
value: '"{{ mytext }}"'
create: true
Run Code Online (Sandbox Code Playgroud)
这让你:
[org/gnome/login-screen]
banner-message-text = "Hello\nWorld"
Run Code Online (Sandbox Code Playgroud)
你也可以这样做:
---
- hosts: localhost
gather_facts: false
vars:
mytext: |-
Hello
World
tasks:
- ini_file:
dest: ./example.ini
section: org/gnome/login-screen
option: banner-message-text
value: '{{ mytext|to_json }}'
create: true
Run Code Online (Sandbox Code Playgroud)
这将为您提供与前一个示例相同的输出。
| 归档时间: |
|
| 查看次数: |
13251 次 |
| 最近记录: |