Dre4m Shell
Server IP : 85.214.239.14  /  Your IP : 3.137.171.71
Web Server : Apache/2.4.62 (Debian)
System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.18
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/ansible_collections/ovirt/ovirt/roles/shutdown_env/tasks/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /lib/python3/dist-packages/ansible_collections/ovirt/ovirt/roles/shutdown_env/tasks/main.yml
---
- name: shutdown_env role
  block:

    - name: Populate service facts
      ansible.builtin.service_facts:

    - name: Enforce ovirt-engine machine
      ansible.builtin.fail:
        msg: >
          This role has be designed to be run only against the machine
          where ovirt-engine is running.
      when: '"ovirt-engine.service" not in ansible_facts.services'

    - name: Enforce ovirt-engine status
      ansible.builtin.fail:
        msg: >
          ovirt-engine is required to be enabled and running in order
          to correctly run this role.
      when: ansible_facts.services["ovirt-engine.service"].state != 'running'

    - name: Login to oVirt
      ovirt_auth:
        url: "{{ engine_url | default(lookup('env','OVIRT_URL')) | default(omit) }}"
        username: "{{ engine_user | default(lookup('env','OVIRT_USERNAME')) | default(omit) }}"
        password: "{{ engine_password | default(lookup('env','OVIRT_PASSWORD')) | default(omit) }}"
        ca_file: "{{ engine_cafile | default(lookup('env','OVIRT_CAFILE')) | default(omit) }}"
        token: "{{ engine_token | default(lookup('env','OVIRT_TOKEN')) | default(omit) }}"
        insecure: "{{ engine_insecure | default(true) }}"
      when: ovirt_auth is undefined or not ovirt_auth
      register: loggedin
      tags:
        - always

    - name: Get hosts
      ovirt_host_info:
        auth: "{{ ovirt_auth }}"
        all_content: true
      register: hosts_result

    - name: Set a variable
      ansible.builtin.set_fact:
        startup: false

    - name: Set a variable
      ansible.builtin.set_fact:
        startup: true
      tags: ['never', 'startup']

    - name: Define a query for HE hosts
      ansible.builtin.set_fact:
        he_hosts: >-
          {{ hosts_result.ovirt_hosts | selectattr('hosted_engine', 'defined') | selectattr('hosted_engine.configured') | list }}

    - name: Define a query for non HE hosts
      ansible.builtin.set_fact:
        non_he_hosts: >-
          {{ hosts_result.ovirt_hosts | difference(he_hosts) }}

    - name: Define a query for non HE hosts with power management
      ansible.builtin.set_fact:
        non_he_hosts_ipmi: >-
          {{ non_he_hosts | selectattr('power_management', 'defined') |
          selectattr('power_management.enabled') | list }}

    - name: Define a query for non HE hosts without power management
      ansible.builtin.set_fact:
        non_he_hosts_noipmi: "{{ non_he_hosts | difference(non_he_hosts_ipmi) }}"

    - name: Define a query for hosts with power management
      ansible.builtin.set_fact:
        hosts_ipmi: >-
          {{ hosts_result.ovirt_hosts | selectattr('power_management', 'defined') | selectattr('power_management.enabled') | list }}

    - name: Define commands
      ansible.builtin.set_fact:
        he_shutdown_cmd: >-
          while hosted-engine --vm-status | grep "\"vm\": \"up\"" >/dev/null;
          do sleep 5;
          done;
          sanlock client shutdown -f 1;
          shutdown -h now
        non_he_noipmi_shutdown_cmd: >-
          while pgrep qemu-kvm >/dev/null; do sleep 5; done; shutdown -h now
        gmaintenance_mode_cmd: >-
          hosted-engine --set-maintenance --mode=global
        ugmaintenance_mode_cmd: >-
          hosted-engine --set-maintenance --mode=none

    - name: Get VM list
      ovirt_vm_info:
        auth: "{{ ovirt_auth }}"
        all_content: true
      register: vm_result

    - name: Shoutdown VMs and hosts
      block:
        - name: Shutdown all VMs, except HostedEngine
          ovirt_vm:
            state: stopped
            name: "{{ item.name }}"
            auth: "{{ ovirt_auth }}"
            wait: true
          when: "item.origin != 'managed_hosted_engine'"
          with_items:
            - "{{ vm_result.ovirt_vms }}"
          failed_when: false

        - name: Refresh VM list
          ovirt_vm_info:
            auth: "{{ ovirt_auth }}"
            all_content: true
          register: vm_result

        - name: Forcefully shutdown remaining VMs, except HostedEngine
          ovirt_vm:
            state: stopped
            name: "{{ item.name }}"
            auth: "{{ ovirt_auth }}"
            wait: true
            force: true
          when: "item.origin != 'managed_hosted_engine' and item.status != 'down'"
          with_items:
            - "{{ vm_result.ovirt_vms }}"

        - name: Shutdown hosts, except HE ones, via IPMI (if configured)
          ovirt_host:
            state: stopped
            name: "{{ item.name }}"
            auth: "{{ ovirt_auth }}"
          with_items:
            - "{{ non_he_hosts_ipmi }}"

        - name: Shutdown remaining non HE hosts
          ansible.builtin.command: >-
            ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
            -i /etc/pki/ovirt-engine/keys/engine_id_rsa
            -p {{ item.ssh.port }}
            -t root@{{ item.address }}
            '{{ non_he_noipmi_shutdown_cmd }}'
          async: 1000
          poll: 0
          with_items:
            - "{{ non_he_hosts_noipmi }}"
          failed_when: false
          changed_when: false

        - name: Set global maintenance mode
          ansible.builtin.command: >-
            ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
            -i /etc/pki/ovirt-engine/keys/engine_id_rsa
            -p {{ item.ssh.port }} -t root@{{ item.address }}
            '{{ gmaintenance_mode_cmd }}'
          with_items:
            - "{{ he_hosts }}"
          ignore_errors: true
          changed_when: false
          register: globalmm

        - name: Set globalmm_set variable
          ansible.builtin.set_fact:
            globalmm_set: "{{ globalmm.results | rejectattr('failed') | list | length }}"
          when: globalmm is defined and globalmm.results is defined

        - name: Enforce global maintenance mode
          ansible.builtin.fail:
            msg: >
              Failed setting global maintenance mode.
          when: he_hosts|length > 0 and globalmm_set|int == 0

        - name: Warn about HE global maintenace mode
          ansible.builtin.debug:
            msg: >
              HE global maintenance mode has been set; you have to exit it to get the engine VM started when needed
          when: globalmm_set|int > 0

        - name: Shutdown of HE hosts
          ansible.builtin.command: >-
            ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
            -i /etc/pki/ovirt-engine/keys/engine_id_rsa -p {{ item.ssh.port }}
            -t root@{{ item.address }} '{{ he_shutdown_cmd }}'
          async: 1000
          poll: 0
          with_items:
            - "{{ he_hosts }}"
          changed_when: false

        - name: Shutdown engine host/VM
          ansible.builtin.command: shutdown -h now
          async: 1000
          poll: 0
          changed_when: false

      when: not startup

    - name: Startup mode
      block:
        - name: Power-on IPMI configured hosts
          ovirt_host:
            state: started
            name: "{{ item.name }}"
            auth: "{{ ovirt_auth }}"
          with_items:
            - "{{ hosts_ipmi }}"

        - name: Unset global maintenance mode
          ansible.builtin.command: >-
            ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
            -i /etc/pki/ovirt-engine/keys/engine_id_rsa -p {{ item.ssh.port }}
            -t root@{{ item.address }} '{{ ugmaintenance_mode_cmd }}'
          with_items:
            - "{{ he_hosts }}"
          ignore_errors: true
          changed_when: false
          register: uglobalmm

        - name: Set globalmm_set variable
          ansible.builtin.set_fact:
            globalmm_set: "{{ uglobalmm.results | rejectattr('failed') | list | length }}"
          when: uglobalmm is defined and uglobalmm.results is defined

        - name: Enforce no global maintenance mode
          ansible.builtin.fail:
            msg: >
              Failed unsetting global maintenance mode.
          when: he_hosts|length > 0 and globalmm_set|int == 0
      when: startup

  always:
    - name: Logout from oVirt
      ovirt_auth:
        state: absent
        ovirt_auth: "{{ ovirt_auth }}"
      when: not loggedin.skipped | default(false)
      tags:
        - always

Anon7 - 2022
AnonSec Team