소개
지금까지 우리는 /etc/sudoers
N개의 항목이 있는 파일에 하나의 블록을 만들었습니다.
때때로 우리는 하나의 시스템만 업데이트하고 명시적인 기둥 데이터를 제공하기를 원하기 때문에 이것은 좋은 해결책이 아닙니다. 다음은 pillar.systems
항목이 하나만 있는 목록입니다.
이전 코드
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed zone etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: |
{% for system_name in pillar.systems %}
{{system_name}} ALL = NOPASSWD: /bin/systemctl restart apache2*
{% endfor %}
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
새로운 코드
{% for system_name in pillar.systems %}
etc_sudoers_{{system_name}}:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed zone etc_sudoers_{{system_name}} -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers_{{system_name}} --"
- content: |
{{system_name}} ALL = NOPASSWD: /bin/systemctl restart apache2*
- append_if_not_found: True
- backup: '.bak'
- show_changes: True
{% endfor %}
질문
아직 서버에 있는 오래된 블록을 삭제하는 방법은 무엇입니까?
답변1
다음과 같은 상태를 설정하여 이 문제를 해결하겠습니다.
etc_sudoers:
file.blockreplace:
- name: /etc/sudoers
- marker_start: "# START managed zone etc_sudoers -DO-NOT-EDIT-"
- marker_end: "# END managed zone etc_sudoers --"
- content: '#'
- append_if_not_found: False
- backup: '.bak'
- show_changes: True
그런 다음 모듈을 사용하여 세 개의 주석 줄을 제거합니다. cmd.run
예를 들면 다음과 같습니다.sed.
임시 상태를 불필요하게 만드는 sed 접근 방식을 직접 사용하고 싶을 수도 있지만 필요에 따라 다릅니다. 모든 곳에서 이전 스타일을 한 번에 제거하면 두 번째 접근 방식이 더 쉬울 수 있습니다. 몇 달 동안 상자를 하나씩 마이그레이션하면 상태 정의가 더 명확해집니다.