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


Posted by '김용환'
,