gpt4 book ai didi

ansible - cat 位于 Ansible 文件目录中的文件

转载 作者:行者123 更新时间:2023-12-05 02:00:28 25 4
gpt4 key购买 nike

这是我的角色结构:

$ tree my_role
.
├── my_role
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   │   └── foo.conf
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── README.md
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   ├── tests
│   │   ├── inventory
│   │   └── test.yml
│   └── vars
│   └── main.yml
└── playbook.yml

我想 cat 位于 tasks/main.yml 文件夹中的文件 foo.conf。

我试图通过提供相关路径直接在 tasks.yml 中使用,但是它说找不到文件。

最佳答案

我几乎可以肯定your exact requirement可以改写为:

How can I get the content of a file situated in my role's files folder on the controller to use it in a task running on any host?

答案是使用 file lookup :

- name: file lookup demo
debug:
msg: "{{ lookup('file', 'foo.conf') }}"

shell 任务中,这比 cat 有很多优势:

  • 它直接提供您要查找的内容,而无需运行单独的任务、注册它的结果并获取特定的 .stdout 键。
  • 无论目标主机如何,它都会工作 lookup always run on the controller
  • 它可以处理位于 file search path 中的任何文件无需指定其确切路径,也无需指定该任务的定义位置(例如,在剧本中直接 tasks 如果您之前使用过角色...)
  • 它尊重 ansible 的良好实践:当已经有一个模块或过滤器为您完成工作时,它不会使用 shell,并且开箱即用是幂等的。

如果我上面的假设是错误的,而你仍然非常想运行 catanswer from @Marco Badelli (虽然是一种不好的做法)将起作用,但前提是您直接从您的角色和本地主机上运行 shell 任务,因为该路径不存在于任何其他远程目标上。

在这种情况下更好的选择是使用 pipe lookup

- name: pipe lookup demo
debug:
msg: "{{ lookup('pipe', `cat ' ~ role_path ~ '/files/foo.conf`) }}"

虽然这演示了如何轻松获得在 Controller 上运行的任何命令的结果,但在这种情况下,它确实没有比文件查找明显的优势。例如,只有当任务是在您的角色中定义的,而不是来自其他角色或剧本任务时,它才会起作用(因为使用了 role_path 魔术变量)。

关于ansible - cat 位于 Ansible 文件目录中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67305395/

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