gpt4 book ai didi

ansible - 如何将多行字符串复制到带有文字换行符的文件中?

转载 作者:行者123 更新时间:2023-12-03 16:23:47 37 4
gpt4 key购买 nike

所以我知道我可以做这样的事情:

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 时正在这样做键入您的第一个示例。您可以使用相同的方式设置变量的值:

---
- hosts: localhost
gather_facts: false
vars:
mytext: |
Hello
World
tasks:
- copy:
dest: ./output.txt
content: "{{ mytext }}"

这将创建 output.txt内容:
Hello
World

相反,如果您的目标是拥有这样的内容...
[org/gnome/login-screen]

banner-message-text = "Hello\nWorld"

...那么您不需要文字换行符,您需要文字 \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

这将导致:
[org/gnome/login-screen]
banner-message-text = Hello\nWorld

如果您希望引用配置文件中的值,则:
    - ini_file:
dest: ./example.ini
section: org/gnome/login-screen
option: banner-message-text
value: '"{{ mytext }}"'
create: true

这让你:
[org/gnome/login-screen]
banner-message-text = "Hello\nWorld"

你也可以这样做:
---
- 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

这将为您提供与前一个示例相同的输出。

关于ansible - 如何将多行字符串复制到带有文字换行符的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55540994/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com