Ansible:如何更新多行或追加(如果尚不存在)

时间:2019-06-02 05:45:47

标签: ansible

我需要使用Ansible管理.ssh / config。

基于是否存在唯一“主机foo-host”(忽略主机名,用户和端口的),我需要:

- name: (Matches on hostname only)
  lineinfile:
    dest: /home/ubuntu/.ssh/config
    state: present
    regexp: "^Host foo-host\n$"
    line: "Host foo-host\n  Hostname localhost\n  User fooUser\n  Port 1234"

OR

- name: (Matches on multiple lines)
  lineinfile:
    dest: /home/ubuntu/.ssh/config
    state: present
    regexp: "^Host foo-host\n  Hostname localhost\n  User .*\n  Port"
    line: "Host foo-host\n  Hostname localhost\n  User fooUser\n  Port 1234"

如何通过Ansible实现这一目标?

我已经尝试过LINEINFILE,但是不能管理多行。如果主机已经存在,它将保留此主机的第2-4行,并不断增长。

- name: Update ssh config
  blockinfile:
    path: /home/ubuntu/.ssh/config
    regexp: "^Host {{ HOSTNAME }}$"
    block: |
      Host {{ HOSTNAME }}
        Hostname localhost
        User {{ USER }}
        Port {{ PORT }}  

我已经尝试了BLOCKINFILE,但这与LINEINFILE的行为不同。它只会包含来自最新运行的BLOCKINFILE任务的块,但是如上所述,如果不存在,我需要添加它,如果已经存在,则需要更新。

__init__

0 个答案:

没有答案