Итак, я знаю, что могу сделать что-то вроде этого:
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») должен храниться в двух местах.
Обновление
Я нашел лучший способ сделать это, основываясь на этом посте . Он сохраняет баннер в отдельном файле, а затем использует его для изменения обоих файлов конфигурации. Таким образом, значение хранится только в одном месте. Тем не менее, ответ, данный @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