openstack ansible 모듈로 인스턴스를 생성해봤다.
서버와 vm 이름을 정의한 inventories 디렉토리의 ci 파일은 다음과 같다.
[ci]
ci-master ansible_connection=ssh ansible_user=www vm_name1=mytest-centos-vm1 vm_name2=mytest-centos-vm2 image=google-centos7 ansible_python_interpreter=/usr/bin/python
playbooks/proejct/ci.yml 파일은 다음과 같다. 2대의 vm을 생성한다.
- name: CI 테스트
hosts: ci
environment: "{{proxy_env}}"
roles:
- { role: create_vm, vm_name: "{{ hostvars['ci-master'].vm_name1 }}", image: "{{ hostvars['ci-master'].image }}" }
- { role: create_vm, vm_name: "{{ hostvars['ci-master'].vm_name2 }}", image: "{{ hostvars['ci-master'].image }}" }
vm을 생성하는 roles/create_vm/task/main.yml 파일은 다음과 같다.
os_server 태스크를 사용한다 (https://docs.ansible.com/ansible/latest/modules/os_server_module.html 참고 )
---
- name: openstacksdk 라이브러리를 설티한다
pip:
name: openstacksdk
sudo: yes
- name: 인스턴스를 생성한다
os_server:
state: present
auth:
auth_url: https://google-openstack-api.google.io:5000/v2.0/
username: openstack
password: xxxxx
project_name: mytest
name: "{{ vm_name }}"
region_name: "az1"
verify: false
image: "{{ image }}"
# key_name: openstack 키페어를 생성해서 추가해야 함
availability_zone: Dev_Zone
timeout: 200
flavor: m1.large
auto_ip: no
security_groups: default
register: instance
vm을 삭제하는 roles/delete_vm/task/main.yml 이다.
---
- name: Delete an instance
os_server:
state: absent
auth:
auth_url: https://google-openstack-api.google.io:5000/v2.0/
username: openstack
password: xxxxx
project_name: mytest
name: "{{ vm_name }}"
region_name: "az1"
verify: false
availability_zone: Dev_Zone
timeout: 200
flavor: m1.large
auto_ip: no
security_groups: default
register: instance