为了在本地执行某些操作(不在远程机器上),我需要将ansible变量的内容放在临时文件中。
请注意,我正在寻找一个解决方案,负责将临时文件生成到可以写入的位置(没有硬编码名称),并且还负责删除文件,因为我们不希望把事情抛在后面。
答案 0 :(得分:1)
为什么不只是use the environment而不是用文件来做?这可以很容易地处理变量,它将通过ansible会话存活,您可以轻松地在任何步骤或其外部检索它。
答案 1 :(得分:1)
虽然可能使用shell /应用程序环境,但如果您特别想使用文件存储可变数据,则可以执行类似这样的操作
- hosts: server1
tasks:
- shell: cat /etc/file.txt
register: some_data
- local_action: copy dest=/tmp/foo.txt content="{{some_data.stdout}}"
- hosts: localhost
tasks:
- set_fact: some_data="{{ lookup('file', '/tmp/foo.txt') }}"
- debug: var=some_data
至于您要求为文件提供唯一名称并在游戏结束时进行清理的要求。我将该实施留给您
答案 2 :(得分:1)
您应该能够使用tempfile模块,然后使用copy或template模块。像这样:
- hosts: localhost
tasks:
# Create a file named ansible.{random}.config
- tempfile:
state: file
suffix: config
register: temp_config
# Render template content to it
- template:
src: templates/configfile.j2
dest: "{{ temp_config.path }}"
vars:
username: admin
或者如果您以角色运行它:
- tempfile:
state: file
suffix: config
register: temp_config
- copy:
content: "{{ lookup('template', 'configfile.j2') }}"
dest: "{{ temp_config.path }}"
vars:
username: admin
然后只需将temp_config.path
传递到将文件传递到的任何模块。
这不是一个很好的解决方案,但替代方法是编写一个自定义模块以一步完成。