【发布时间】:2019-04-05 17:56:28
【问题描述】:
所以我知道我可以这样做:
copy:
dest: /etc/issue
content: |
Hello
World
但这不起作用:
vars:
login_banner_text: !!str |-
"Hello\nWorld"
tasks:
- name: Set TTY login banner
copy:
dest: /etc/issue
content: "{{ login_banner_text }}"
换行符直接打印到文件中,不进行解析,即它是用\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
但是,其他模块也以这种方式运行。
如果我将文件复制到位,则相当长的文本(不是“Hello World”)必须在两个地方维护。
更新
我发现,我认为是一种更好的方法,基于this post。它将横幅存储在一个单独的文件中,然后使用它来修改两个配置文件。所以值只存储在一个地方。但是,@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
【问题讨论】:
-
我不清楚这里的问题是什么:你的第一个例子做了你想要的。你为什么不能那样做呢?
-
因为它需要存储为带有文字换行符的变量。
-
您可以使用与第一个示例中
content:相同的语法来设置变量的值。