lineinfile
파일에 한 줄을 추가 하는 모듈이있는 것과 같은 방법으로 여러 줄을 추가하는 방법이 있습니까?
전체 파일을 제공해야하기 때문에 템플릿을 사용하고 싶지 않습니다. 템플릿이 옵션이 아니므로 파일에 이미 무엇이 포함되어 있는지 모른 채 기존 파일에 무언가를 추가하고 싶습니다.
답변
루프 를 사용 하여 수행 할 수 있습니다. 다음은 with_items
루프 를 사용하는 예입니다 .
- name: Set some kernel parameters
lineinfile:
dest: /etc/sysctl.conf
regexp: "{{ item.regexp }}"
line: "{{ item.line }}"
with_items:
- { regexp: '^kernel.shmall', line: 'kernel.shmall = 2097152' }
- { regexp: '^kernel.shmmax', line: 'kernel.shmmax = 134217728' }
- { regexp: '^fs.file-max', line: 'fs.file-max = 65536' }
답변
blockinfile
대신 사용할 수 있습니다 .
당신은 같은 것을 할 수 있습니다
- blockinfile: |
dest=/etc/network/interfaces backup=yes
content="iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0"
답변
고유 한 property = value 행 세트를 구성해야하는 경우보다 간결한 루프를 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다.
- name: Configure kernel parameters
lineinfile:
dest: /etc/sysctl.conf
regexp: "^{{ item.property | regex_escape() }}="
line: "{{ item.property }}={{ item.value }}"
with_items:
- { property: 'kernel.shmall', value: '2097152' }
- { property: 'kernel.shmmax', value: '134217728' }
- { property: 'fs.file-max', value: '65536' }
Alix Axel이 제안한 dict를 사용하고 주석 처리 된 항목을 자동으로 제거합니다.
- name: Configure IPV4 Forwarding
lineinfile:
path: /etc/sysctl.conf
regexp: "^#? *{{ item.key | regex_escape() }}="
line: "{{ item.key }}={{ item.value }}"
with_dict:
'net.ipv4.ip_forward': 1
답변
with_items를 사용하는 무소음 버전의 솔루션은 다음과 같습니다.
- name: add lines
lineinfile:
dest: fruits.txt
line: '{{ item }}'
with_items:
- 'Orange'
- 'Apple'
- 'Banana'
fruits.txt에 항목이 있으면 각 항목에 대해 조치가 수행되지 않습니다.
해당 항목이 없으면 파일 끝에 추가됩니다.
쉬워요.
답변
이상적이지는 않지만에 여러 번 전화를 걸 수 lineinfile
있습니다. 와 함께 사용 insert_after
하면 원하는 결과를 얻을 수 있습니다.
- name: Set first line at EOF (1/3)
lineinfile: dest=/path/to/file regexp="^string 1" line="string 1"
- name: Set second line after first (2/3)
lineinfile: dest=/path/to/file regexp="^string 2" line="string 2" insertafter="^string 1"
- name: Set third line after second (3/3)
lineinfile: dest=/path/to/file regexp="^string 3" line="string 3" insertafter="^string 2"
답변
\n
line 매개 변수를 사용하여 그렇게 할 수있었습니다 .
파일의 유효성을 검사 할 수 있고 한 줄을 추가하면 유효하지 않은 파일이 생성되는 경우 특히 유용합니다.
내 경우, 나는 추가했다 AuthorizedKeysCommand
및 AuthorizedKeysCommandUser
에 sshd_config에서 다음 명령을 :
- lineinfile: dest=/etc/ssh/sshd_config line='AuthorizedKeysCommand /etc/ssh/ldap-keys\nAuthorizedKeysCommandUser nobody' validate='/usr/sbin/sshd -T -f %s'
옵션 중 하나만 추가하면 유효성 검사에 실패한 파일이 생성됩니다.
답변
여러 줄을 추가하려면 블록 파일을 사용할 수 있습니다.
- name: Add mappings to /etc/hosts
blockinfile:
path: /etc/hosts
block: |
'10.10.10.10 server.example.com'
'10.10.10.11 server1.example.com'
한 줄을 추가하려면 lininfile을 사용할 수 있습니다.
- name: server.example.com in /etc/hosts
lineinfile:
path: /etc/hosts
line: '192.0.2.42 server.example.com server'
state: present