소개

소개

소개

지금까지 우리는 /etc/sudoersN개의 항목이 있는 파일에 하나의 블록을 만들었습니다.

때때로 우리는 하나의 시스템만 업데이트하고 명시적인 기둥 데이터를 제공하기를 원하기 때문에 이것은 좋은 해결책이 아닙니다. 다음은 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 접근 방식을 직접 사용하고 싶을 수도 있지만 필요에 따라 다릅니다. 모든 곳에서 이전 스타일을 한 번에 제거하면 두 번째 접근 방식이 더 쉬울 수 있습니다. 몇 달 동안 상자를 하나씩 마이그레이션하면 상태 정의가 더 명확해집니다.

관련 정보