我需要使用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__