서버에서 더 이상 사용되지 않는 역할에서 물건을 정리하는 방법? 기 때문입니다. [webservers]인벤토리에서 서버를 제거하면

관련 Ansible 역할이 설치 nginx되고 일부 필수 구성을 수행 /etc/nginx하고 방화벽에서 포트 80 및 443을 여는 웹 서버 인 호스트가 있다고 가정합니다 .

어떤 시점에서 특정 호스트가 더 이상 웹 서버가 아니기를 원합니다. 어떤 이유로 든 다른 곳으로 서비스를 옮겼 기 때문입니다. [webservers]인벤토리에서 서버를 제거하면 서버에 쓰레기가 남습니다. 이상적으로는 설치 nginx제거, /etc/nginx디렉토리 (및 다른 디렉토리) 를 제거 하고 방화벽에서 포트 80 및 443을 닫고 싶습니다 .

꼭두각시에서 나는 이것을 할 수 있습니다. 웹 서버 인 호스트는 다음과 같이 구성됩니다.

class { 'nginx':
  ensure => present,
}

내가해야 할 일은 “present”를 “absent”로 바꾸는 것입니다. 경우 nginx클래스가 잘 작성된 것입니다, 그것이 만든 변경 사항을 취소합니다. 일반적으로 관리자는 “present”를 “absent”로 바꾸고 나중에 영향을받는 모든 호스트가 구성을 취소 한 것으로 확인되면 해당 항목을 매니페스트에서 제거합니다.

또한 Puppet 방화벽 모듈은 더 이상 매니페스트에서 찾을 수없는 방화벽 규칙을 자동으로 제거한다고 생각합니다. 따라서 방화벽의 경우 위의 “부재”를 수행하지 않아도 방화벽이 자동으로 닫힙니다.

Ansible로 이러한 것들을 어떻게 달성 할 수 있습니까?



답변

Ansible을 사용하면 꼭두각시로하는 것과 다른 방식으로이 작업을 수행 할 수 없습니다.

당신이 설정하려는 예에서

class { 'nginx':
  ensure => absent,
}

당신은 꼭두각시 모듈의 저자에게 모든 것을 제거하는 데 필요한 코드를 작성했습니다. 모든 퍼펫 모듈에이 기능이있는 것은 아닙니다.

마찬가지로 Ansible을 사용하면 설치 및 제거에 필요한 단계가 모두있는 역할이있을 수 있습니다. 차이점은 두 가지를 호출하는 방법에만 있습니다.

하나의 접근 방식은 문제의 역할이 변수를 노출하여 동작을 토글하는 방법 일 수 있습니다. 예를 들어, 그 nginx를 역할은 변수 걸릴 수 있습니다 nginx_state값 소요 installedabsent.

역할에서 tasks/main.yml역할 작성자는 다음과 같은 내용을 포함 할 수 있습니다.

- include: install.yml
  when: nginx_state|default('present') == "present"

- include: uninstall.yml
  when: nginx_state|default('present') == "absent"

.. 각각의 설치 / 제거 논리가 조건부로 포함 된 두 파일간에 분할됩니다.

가능한 역할도 중첩 될 수 있습니다. 동일한 역할을 수행하는 다른 방법으로 역할 작성자는 예를 들어 nginx역할 안에 다른 역할이 있는 역할 을 제공 할 수 있습니다 uninstalled. 그러면 다음을 수행 할 수 있습니다.

- name: Uninstall nginx
  hosts: some_group
  roles:
    - nginx/uninstalled

퍼펫과 비교할 때, 어쩌면 당연히 일을 어떻게 해야하는지에 대한 규칙과 지침이 적기 때문에 실제로는 연습이 약간 더 다양하지만 동일한 개념이 적용됩니다.


답변

Ansible에 구성 / 프로비저닝이 있으므로 전체 서버를 날려 버리고 새로운 서버를 다시 설치 / 프로비저닝하고 잘 알려진 상태로 작동 할 수 있습니다.

실제로 다른 목적으로 “재구성”하려는 경우 필요한 정리 작업을 수행하는 새 플레이 북을 만들어야합니다.

내가 아는 한, 모든 Ansible 패키징 모듈state=absent 은 주어진 패키지가 서버에 설치되지 않도록 지원 합니다. 또한 apt모듈에는 purge=yes나머지 사용자 정의 구성 파일을 정리하는 매개 변수가 있습니다.

포트 80이 방화벽으로 설정되어 있는지 확인하는 작업을 생성 할 수도 있습니다. 그러나 해당 포트에서 실행중인 프로세스가 없으므로 방화벽을 설정해도 서버의 보안에는 아무런 영향을 미치지 않습니다.


답변