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' |
+-------------------------------------+----------------------------------------------------------+
반응형
'Openstack' 카테고리의 다른 글
openstack helm을 이용한 kubernetes환경에서 openstack 배포 (0) | 2020.08.02 |
---|---|
DVR packet flow(FIP:North-south) (0) | 2018.12.01 |
Openstack barbican install/Barbican-cinder encryption (0) | 2018.07.26 |
Openstack LBaaS (0) | 2018.05.12 |
Openstack token provider(fernet) (0) | 2018.05.07 |