仅在文件不存在时创建文件并写入一些数据的模块

问题描述 投票:0回答:2

我需要使用 Ansible 模块来检查文件是否存在,如果不存在,则创建它并向其中写入一些数据。

如果文件存在,则检查我正在尝试写入的内容是否存在于该文件中。

如果内容不存在,请将内容写入其中。
如果内容存在,则不执行任何操作。

我的下面的剧本不起作用。
对此有什么建议吗?

- hosts: all
  tasks:
  - name: check for file
    stat:
      path: "{{item}}"
    register: File_status
    with_items:
      - /etc/x.conf
      - /etc/y.conf
  - name: Create file
    file:
      path: "{{item}}"
      state: touch
    with_items:
      - /etc/x.conf
      - /etc/y.conf
    when: not File_status.stat.exists
  - name: add content
    blockinfile:
      path: /etc/x.conf
      insertafter:EOF
      block: |
        mydata=something

你能帮我提供可以实现我想要的输出的模块和条件吗?

ansible
2个回答
8
投票

以下将:

  • 如果文件不存在则创建并报告
    changed
  • 如果该块不存在,则将其添加到文件末尾并报告
    changed
    ,即
    # BEGIN ANSIBLE MANAGED BLOCK
    mydata=something
    mydata2=somethingelse
    # END ANSIBLE MANAGED BLOCK
    
  • 如果内容发生更改,请更新文件中的任何位置的块并报告
    changed
    (如果您在同一个文件中需要管理多个块,请参阅
    marker
    选项
    ,并且如果您需要管理多个块,请不要忘记其中的
    {mark}
    )改变它)。
  • 如果该块在文件中的任何位置都是最新的,则不执行任何操作并报告
    ok

请阅读模块文档以获取更多信息

---
- name: blockinfile example
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Update/create block if needed. Create file if not exists
      blockinfile:
        path: /tmp/testfile.conf
        block: |
          mydata=something
          mydata2=somethingelse
        create: true

-1
投票

这是实现您的要求的可能方法。

- hosts: localhost
  tasks:
  - name: Create file
    copy:
      content: ""
      dest: "{{item}}"
      force: no
    with_items:
      - /etc/x.conf
      - /etc/y.conf

  - name: add content
    blockinfile:
      path: "{{ item.file_name }}"
      insertafter: EOF
      block: |
        "{{ item.content }}"
    loop:
      - { file_name: '/etc/x.conf', content: 'mydata=something' }
      - { file_name: '/etc/y.conf', content: 'mydata=hey something' }
© www.soinside.com 2019 - 2024. All rights reserved.