itsource

업그레이드가 필요한 경우에만 서비스를 중지하는 적절한 방법

mycopycode 2022. 9. 21. 00:02
반응형

업그레이드가 필요한 경우에만 서비스를 중지하는 적절한 방법

Ansible Playbook에서는 업그레이드가 필요한 경우 MariaDB를 중지하고 싶습니다(RPM 패키지에서 재시작하는 것은 항상 내 상황에서는 작동하지 않습니다).나는 꽤 낯설다.

내가 생각해낸 건 이거야

- name: "Check if MariaDB needs to be upgraded"
  shell: "yum check-update MariaDB-server|grep MariaDB|wc -l"
  register: needs_update

- name: "Stop mysql service"
  service:
  name: mysql
  state: stopped
when: needs_update.stdout == "1"

shell 명령어를 실행하여 이 작업을 수행하는 더 좋은 방법이 있습니까?실행할 때 경고가 표시됩니다.

TASK [mariadb_galera : Check if MariaDB needs to be upgraded]    ******************
changed: [139.162.220.42] => {"changed": true, "cmd": "yum check-update MariaDB-server|grep MariaDB|wc -l", "delta": "0:00:00.540862", "end": "2017-03-01 13:03:34.415272", "rc": 0, "start": "2017-03-01 13:03:33.874410", "stderr": "", "stdout": "0", "stdout_lines": ["0"], "warnings": ["Consider using yum module rather than running yum"]}
 [WARNING]: Consider using yum module rather than running yum

감사해요!

다음 방법으로 경고를 숨길 수 있습니다.

- name: "Check if MariaDB needs to be upgraded"
  shell: "yum check-update MariaDB-server|grep MariaDB|wc -l"
  args:
    warn: false
  register: needs_update

아니면 앤서블을 속여서yum과업check_mode:

- name: "Check if MariaDB needs to be upgraded (CHECK MODE!)"
  yum:
    name: MariaDB-server
    state: latest
  check_mode: yes
  register: needs_update_check

- name: "Stop mysql service"
  service:
    name: mysql
    state: stopped
  when: needs_update_check | changed

사용하기 전에 이 코드를 테스트하십시오.

이것을 다루는 가장 좋은 방법은 "핸들러"를 사용하는 것입니다. 예를 들어,

tasks:
  - name: Update db
    yum: name=MariaDB-server state=latest
    notify:
      - stop db

handlers:
  -  name: stop db  
     service: name=MariaDB-server state=stopped

여러 작업을 수행해야 하는 경우 여러 핸들러를 지정할 수 있지만 DB를 재시작하는 경우 stopped 대신 restarted를 사용합니다.

http://docs.ansible.com/ansible/playbooks_best_practices.html

언급URL : https://stackoverflow.com/questions/42532659/ansible-way-to-stop-a-service-only-if-it-needs-to-be-upgraded

반응형