如何将ansible变量保存到在playbook执行结束时自动删除的临时文件中?

时间:2016-04-15 12:05:32

标签: ansible ansible-playbook

为了在本地执行某些操作(不在远程机器上),我需要将ansible变量的内容放在临时文件中。

请注意,我正在寻找一个解决方案,负责将临时文件生成到可以写入的位置(没有硬编码名称),并且还负责删除文件,因为我们不希望把事情抛在后面。

3 个答案:

答案 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模块,然后使用copytemplate模块。像这样:

- 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传递到将文件传递到的任何模块。

这不是一个很好的解决方案,但替代方法是编写一个自定义模块以一步完成。