【问题标题】:Ansible blockinfile replace if there is another block instead of inserting the new如果有另一个块而不是插入新块,则 Ansible blockinfile 替换
【发布时间】:2018-01-12 10:03:33
【问题描述】:

我尝试在同一个文件中插入 2 个 ansible 块,但 Ansible 将第一个块替换为第二个。

如果我插入接下来的 2 个块:

- name: Setup java environment
  blockinfile:
    dest: /home/{{ user }}/.bashrc
    block: |
      #Java path# 
      JAVA_HOME={{ java_home }}/

- name: Setup hadoop environment
  blockinfile:
    dest: /home/{{ user }}/.bashrc
    block: |
      #Hadooppath# 
      HADOOP_HOME={{ hadoop_home }}/

只有第二个块会在文件中,因为它替换了第一个。

【问题讨论】:

    标签: ansible


    【解决方案1】:

    在同一个文件中插入 2 个带有 Ansible 的块,并且不要用第二个替换第一个:

    更改 Ansible blockinfile 标记:

    blockinfile_task_1:
    marker: "# {mark} ANSIBLE MANAGED BLOCK insertion 1"
    blockinfile_task_2:
    marker: "# {mark} ANSIBLE MANAGED BLOCK insertion 2"
    

    对于前面的示例,剧本将是:

    - name: Setup java environment
      blockinfile:
        dest: /home/{{ user }}/.bashrc
        marker: "# {mark} ANSIBLE MANAGED BLOCK Java"
        block: |
          #Java path# 
          JAVA_HOME={{ java_home }}/
    
    - name: Setup hadoop environment
      blockinfile:
        dest: /home/{{ user }}/.bashrc
        marker: "# {mark} ANSIBLE MANAGED BLOCK Hadoop"
        block: |
          #Hadooppath# 
          HADOOP_HOME={{ hadoop_home }}/
    

    【讨论】:

    • ..或者,最好使用template
    • @tedder42 是的,谢谢,但是如果我使用template 它会删除服务器以前的 bashrc,可能还有其他配置。
    • 当然——但是任何时候你选择只在你的 CM 中包含一个文件,你都会冒很大的风险。你可以考虑把它放在 /etc/bashrc 中。
    • @tedder42 是错误的,您不能在这种情况下使用模板。通常,您必须管理由您无法控制的事物编辑的配置文件。所以 Ansible 在这种情况下应该表现得合理。
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多