понедельник, 15 февраля 2016 г.

Ansible Proxmox

Добрый день.
Сегодня краткая заметка и описание работы ansible модуля для Proxmox.
Модуль Proxmox для Ansible стал доступен с версии 2.0.0 (Описание)

Был создан файл hosts с содержимым:
[pve]
192.168.0.125


И пара playbook:
- crate_ct_manual.yml
- remove_ct_manual.yml

Содержимое create_ct_manual.yml:
---
- hosts: pve
  gather_facts: False
  vars_prompt:
    - name: "VMID"
      prompt: "Enter VMID for CT: "
      private: no
    - name: "IP"
      prompt: "Enter IP for new CT: "
      private: no
    - name: "HOSTNAME"
      prompt: "Enter hostname for new CT: "
      default: "testing.com"
      private: no
    - name: "PASSWD"
      prompt: "Enter root password: "
      default: "password"
    - name: "ROLE"
      prompt: "Enter role of CT (frontend/backend): "
      private: no

  tasks:
    - name: Install frontend
      local_action: 'lineinfile dest=/etc/ansible/hosts line="{{ IP }}" insertafter="^\[backend\]"'
      when: ROLE == "backend"
    - name: Install backend
      local_action: 'lineinfile dest=/etc/ansible/hosts line="{{ IP }}" insertafter="^\[frontend\]"'
      when: ROLE == "frontend"
    - name: Create CT {{ VMID }}
      proxmox: vmid={{ VMID }} api_user='root@pam' api_password='{{ lookup('env','PROXMOX_PASSWORD') }}' api_host='192.168.0.125' hostname='{{ HOSTNAME }}' ostemplate='local:vztmpl/ubuntu_12.04_i386_clear_with_ansible_key.tar.gz' node='domain' state=present ip_address='{{ IP }}' password='{{ PASSWD }}' timeout='150' onboot='yes'
    - name: Start CT {{ VMID }}
      proxmox: vmid={{ VMID }} api_user='root@pam' api_password='{{ lookup('env','PROXMOX_PASSWORD') }}' api_host='192.168.0.125' state=started
      

В поле hosts для группы pve из файла hosts мы запрашиваем переменные для внесения основных сведений о создаваемой контейнере.
VMID - ID-контейнера
IP - IP-адрес контейнера
HOSTNAME - хостнейм для контейнера, с дефолтным значением testing.com, если никакие данные не были введены
PASSWD - пароль root для контейнера, с дефолтным значением password
ROLE - это поле было создано для других плейбуков, которое добавляет в нужную группу в файле hosts IP-адрес сервера. Описание этих ролей отложу для другой заметки.

Очень важно, что на хост ноде с Proxmox обязательно должны быть установлены последние версии Python библиотек Proxmoxer и requests.
Пароль для взаимодействия с Proxmox берется из переменной окружения PROXMOX_PASSWORD, т.е. перед использованием нужно экспортировать данную переменную:
# export PROXMOX_PASSWORD=password

Содержимое remove_ct_manual.yml:
---
- hosts: pve
  vars_prompt:
    - name: "VMID"
      prompt: "Enter VMID for CT: "
      private: no

  tasks:
    - name: Stopped CT {{ VMID }}
      proxmox: vmid={{ VMID }} api_user='root@pam' api_password='{{ lookup('env','PROXMOX_PASSWORD') }}' api_host='192.168.0.125' state=stopped
    - name: Remove CT {{ VMID }}
      proxmox: vmid={{ VMID }} api_user='root@pam' api_password='{{ lookup('env','PROXMOX_PASSWORD') }}' api_host='192.168.0.125' state=absent
 
Теперь небольшой playbook для остановки и удаления контейнера с указанным ID.

Вот пара примеров выполнения данных playbook'ов:
# ansible-playbook create_ct_manual.yml 
Enter VMID for CT: : 109
Enter IP for new CT: : 192.168.0.119
Enter hostname for new CT:  [testing.com]: backend3.com
Enter root password:  [password]: 
Enter role of CT (frontend/backend):

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [192.168.0.125]

TASK [Create CT 109] ***********************************************************
changed: [192.168.0.125]

PLAY RECAP *********************************************************************
192.168.0.125              : ok=2    changed=1    unreachable=0    failed=0   


# ansible-playbook remove_ct_manual.yml 
Enter VMID for CT: : 109

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [192.168.0.125]

TASK [Stopped CT 109] **********************************************************
changed: [192.168.0.125]

TASK [Remove CT 109] ***********************************************************
changed: [192.168.0.125]

PLAY RECAP *********************************************************************
192.168.0.125              : ok=3    changed=2    unreachable=0    failed=0   

Комментариев нет:

Отправить комментарий