본문 바로가기
Openstack

Ansible Cloud(openstack) 모듈을 이용한 볼륨/인스턴스 생성

Ansible cloud module

Ansbile을 이용한 opnestack의 관리는 ansible의 Cloud 모듈을 이용하여 사용 된다.
cloud모듈에는 kvm,aws 등 다양한 cloud환경에 필요한 기능을 제공 하고 있다.
해당 모듈을 사용 여, 대상서버에 openstacksdk를 기반으로 요청/응답 된다. 그맇기 때문에 기본적으로 대상서버에는 openstacksdk가 설치 되어야 한다.)

 

Ansible cloud 인증 설정

openstacksdk를 통하여 요청/응답을 받기 위해서 대상 서버에 추가적으로 openstack 인증 라이브라리 shade를 설치 해야 한다.
# pip install shade
Ansible로 실행된 요청/응답은 os-client-config 라이브러리를 통하여 /etc/openstack/clouds.yaml 파일을 참조 하여 인증을 한다.
clouds.yaml 에는 openstack keystone에 인증하는 정보를 yaml 형태로 보관 하고 있다. 
여기서 설정한 test_openstack으로 ansible에서 인증 정보를 선택 한다. 여러 인증 정보가 있을 경우 동일하게 이름만 변경 하여 추가/수정 한다.
clouds:
  test_openstack: ## 해당 이름으로 인증
    auth:
      auth_url: http://10.10.3.100:35357/v3
      project_name: admin
      username: admin
      password: adminpassword
      user_domain_name: default
      project_domain_name: default

Ansible 설정

ansible을 실행 할 호스트에서 ansible을 설치 한다.
# yum install epel-release  -y
# yum install ansible -y
# ansible --version
ansible 2.7.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jul 13 2018, 13:06:57) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

hosts 파일에 openstack sdk가 설치된 호스트 정보를 추가 한다.
192.168.190.2 deploy_host
...
ansible host파일에도 openstack sdk가 설치된 호스트 정보를 추가 하고, ssh 접속 정보를 변수로 추가 한다.
[deploy_group]
deploy_host
 
[deploy_group:vars]
ansible_user=root
ansible_ssh_pass=password
ansible의 ping 모듈을 사용 하여, 정상적으로 접속 되는지 확인 한다.
# ansible -m ping deploy_group
deploy_host | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Ansible 을 이용한 openstack 볼륨 생성

os_volume 을 이용하여,size 1(GB)의 볼륨을 생성하는 yaml파일이다. 이때, cloud 지시자에 openstacksdk를 설치한 host에 설정한 test_host라는 인증 정보로 인증 할 수 있도록 한다.(openstack_vol_cre.yml) 

 

---
- name: Test Openstack os_volume
  become: true
  hosts: deploy_group
 
  tasks:
  - name: create 1g test volume
    os_volume:
      state: present
      cloud: test_openstack
      size: 1
      display_name: test_openstack_vol_1
      
ansible-playbook을 이용 하여 해당 플레이북을 실행 한다. 볼륨이 생성되는 시간이 걸리기 때문에 종료 되는데 시간이 조금 걸린다.(KVM위에 올려서 그런듯...)
# ansible-playbook openstack_vol_cre.yml
 
PLAY [Test Openstack os_volume] **********************************************************************
 
TASK [Gathering Facts] *******************************************************************************
ok: [deploy_host]
 
TASK [create 1g test volume] *************************************************************************
changed: [deploy_host]
 
PLAY RECAP *******************************************************************************************
deploy_host                : ok=2    changed=1    unreachable=0    failed=0
 
이제 openstacksdk가 설치된 호스트에서 해당 볼륨이 생성 되었는지 확인 한다.
# openstack  volume show test_openstack_vol_1
+--------------------------------+--------------------------------------+
| Field                          | Value                                |
+--------------------------------+--------------------------------------+
| attachments                    | []                                   |
| availability_zone              | nova                                 |
| bootable                       | false                                |
| consistencygroup_id            | None                                 |
| created_at                     | 2018-10-21T06:28:06.000000           |
| description                    | None                                 |
| encrypted                      | False                                |
| id                             | 3d16f767-246a-463d-8c15-68a529fe4664 |
| migration_status               | None                                 |
| multiattach                    | False                                |
| name                           | test_openstack_vol_1                 |
| os-vol-host-attr:host          | cm01.localdomain@rbd-1#RBD           |
| os-vol-mig-status-attr:migstat | None                                 |
| os-vol-mig-status-attr:name_id | None                                 |
| os-vol-tenant-attr:tenant_id   | 7ca9c01a63e84a8aa1bcb872d3faf361     |
| properties                     |                                      |
| replication_status             | None                                 |
| size                           | 1                                    |
| snapshot_id                    | None                                 |
| source_volid                   | None                                 |
| status                         | available                            |
| type                           | None                                 |
| updated_at                     | 2018-10-21T06:28:07.000000           |
| user_id                        | 8577d0ff4a994319983f646563a73255     |
+--------------------------------+--------------------------------------+
 

Ansible 을 이용한 openstack 인스턴스 생성

인스턴스를 실행 하는 과정은 os_volumes를 사용 하여 , cirros기반의  boot volume을 10GB사이즈로 생성 한뒤 해당 볼륨으로 인스턴스를 실행 하는 과정을 
플레이북에 미리 설정 한 것이다. os_server 를 사용 하여 인스턴스를 생성하는 과정은 cli로  인스턴스를 생성하는 과정과 동일 하다.(openstack_os_cre.yml) 
---
- name: Test Openstack os_server
  become: true
  hosts: deploy_group
 
  tasks:
  - name: create boot volume from image
    os_volume:
      cloud: test_openstack
      state: present
      size: 10
      display_name: test_cirros_vol_10
      image: cirros
      timeout: 300
      wait: yes
 
  - name: launch an instance
    os_server:
      cloud: test_openstack
      key_name: mykey
      timeout: 300
      flavor: m1.test
      security_groups: default
      nics:
        - net-id: d9e98ed0-6f19-42c1-9e28-b73ac198a002
      name: test_cirros_vm
      boot_volume: test_cirros_vol_10
마찬가지로 ansible-playbook을 이용하여 해당 플레이북을 실행 한다.
# ansible-playbook openstack_os_cre.yml
 
PLAY [Test Openstack os_server] **********************************************************************
 
TASK [Gathering Facts] *******************************************************************************
ok: [deploy_host]
 
TASK [create boot volume from image] *****************************************************************
changed: [deploy_host]
 
TASK [launch an instance] ****************************************************************************
changed: [deploy_host]
 
PLAY RECAP *******************************************************************************************
deploy_host                : ok=3    changed=2    unreachable=0    failed=0

 

이제 openstacksdk가 설치된 호스트에서 해당 인스턴스가 생성 되었는지 확인 한다.
# openstack  server show test_cirros_vm
+-------------------------------------+----------------------------------------------------------+
| Field                               | Value                                                    |
+-------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                                                   |
| OS-EXT-AZ:availability_zone         | nova                                                     |
| OS-EXT-SRV-ATTR:host                | com03.localdomain                                        |
| OS-EXT-SRV-ATTR:hypervisor_hostname | com03.localdomain                                        |
| OS-EXT-SRV-ATTR:instance_name       | instance-0000013f                                        |
| OS-EXT-STS:power_state              | Running                                                  |
| OS-EXT-STS:task_state               | None                                                     |
| OS-EXT-STS:vm_state                 | active                                                   |
| OS-SRV-USG:launched_at              | 2018-10-21T06:34:53.000000                               |
| OS-SRV-USG:terminated_at            | None                                                     |
| accessIPv4                          |                                                          |
| accessIPv6                          |                                                          |
| addresses                           | vlan600=3.3.3.17                                         |
| config_drive                        |                                                          |
| created                             | 2018-10-21T06:34:32Z                                     |
| flavor                              | m1.test (0)                                              |
| hostId                              | 2b2a829b99d6b9680ac618bb6f826c74fa39d9af374719184cdc0a27 |
| id                                  | c968790d-9009-481f-9529-41c123ac89d9                     |
| image                               |                                                          |
| key_name                            | mykey                                                    |
| name                                | test_cirros_vm                                           |
| progress                            | 0                                                        |
| project_id                          | 7ca9c01a63e84a8aa1bcb872d3faf361                         |
| properties                          |                                                          |
| security_groups                     | name='default'                                           |
| status                              | ACTIVE                                                   |
| updated                             | 2018-10-21T06:34:52Z                                     |
| user_id                             | 8577d0ff4a994319983f646563a73255                         |
| volumes_attached                    | id='861cf353-67e6-43b8-8c6e-12c3e276fb2d'                |
+-------------------------------------+----------------------------------------------------------+
 

 

반응형