AWX는 Redhat Ansible Tower의 Community 버전으로써 GUI 환경에서 Ansible 스크립트를 수행할 수 있는 장점이 있습니다
본문의 내용은 AWX의 설치 및 간단한 사용방법에 대한 내용을 다룹니다
Test Server 구성
본문에서의 테스트 환경은 Openstack 환경의 Centos7.3 기준으로 구축되었으며 IP주소(Floating IP)는 임의로 지정합니다
- ansible1 192.168.11.35
- ansible2 192.168.11.44
- ansible3 192.168.11.45
- ansible1 서버에서 centos 계정으로 암호없이 ansible2와 ansible3에 접속 가능하도록 설정
- /etc/hosts 파일에 위 내용을 등록합니다
- ansible2와 ansible3 서버에 접속 후, 다음 파일을 수정합니다(해당 내용이 이미 반영되어 있을 경우엔 수정하지 않아도 무관)
- #/etc/ssh/sshd_config
- PasswordAuthentication yes
- 저장 후 centos 계정의 암호를 설정합니다
- passwd centos
- #/etc/ssh/sshd_config
- ansible1 서버에서 다음 명령을 통해 ssh-copy-id 적용 후 centos계정으로 ansible2와 ansible3서버에 암호입력 없이 접속 가능한지 확인합니다
- #ssh-copy-id centos@ansible2
- #ssh-copy-id centos@ansible3
- #ssh centos@ansible2
- #ssh centos@ansible3
- Ansible 및 AWX 설치
- 작성일 기준으로 Ansible 2.7.10, AWX 4.0 버전을 ansible1서버에 설치합니다
- 패키지 설치
- #sudo yum install epel-release
- #sudo yum install git gettext ansible docker nodejs npm gcc-c++ bzip2 -y
- #sudo yum install python-pip -y
- #sudo yum install python-docker-py -y
- Docker 실행
- #sudo systemctl start docker
- #sudo systemctl enable docker
- AWX Clone 및 설정
- #git clone https://github.com/ansible/awx.git
- #cd awx/installer/
- #vim inventory
- postgres_data_dir=/opt/awxdb
- docker_compose_dir=/opt/awxcompose
- #sudo mkdir /opt{awxdb,awxcompose}
- inventory 설정 중 AWX 버전 설정이 필요하다면 다음 부분을 수정합니다(설정 안할 시 latest로 설치)
- dockerhub_base=ansible
- inventory 설정 중 proxy가 필요하다면 다음 부분을 수정합니다
- # Proxy
- #http_proxy= http://proxy:3128
- #https_proxy= http://proxy:3128
- #no_proxy= mycorp.org
- 설정파일의 설정이 완료될 경우 다음 명령을 수행하여 docker-compose파일을 생성합니다
- #ansible-playbook -i inventory install.yml
- 위 명령 수행 시 다음과 같은 에러가 발생 가능할 수 있습니다
- TASK [local_docker : Start the containers] *************************************************************************************************************************************
- fatal: [localhost]: FAILED! => {“changed”: false, “msg”: “Failed to import docker or docker-py – No module named docker. Try `pip install docker` or `pip install docker-py` (Python 2.6)”
- 위 에러가 발생할 경우 다음 명령을 수행한 뒤 다시 playbook을 수행합니다
- #pip install docker
- #pip install docker-compose
- TASK [local_docker : Start the containers] *************************************************************************************************************************************
- install.yml을 수행 시 docker-compose 파일이 다음의 위치에 생성되게 됩니다
- #cd /opt/awxcompose/
- 만들어진 docker-compose파일을 다음 명령을 통해 실행합니다(docker-compose 명령 사용 시 특정 파일을 지정하지 않을 경우 자동으로 docker-compose.yml 이름을 가진 파일을 수행)
- #docker-compose up -d
- AWX 접속 확인
- http://192.168.11.35 로 접속 시 다음과 같은 화면을 확인가능하며 admin / password로 접속합니다
AWX 기본 사용법
- Credential 설정
- 좌측 패널의 Credential 클릭 후 + 로 새 Credential 추가합니다
- 다음 필드 내용을 추가합니다
- NAME: 임의의 Credential 이름
- CREDENTIAL TYPE: Machine
- USERNAME: ansible1 서버 접속 계정
- SSH PRIVATE KEY: 키로 접속한는 경우에 사용하며 Key가 아닌 암호로 접속할 경우 위의 비밀번호를 넣어서 Save
- Key를 직접 입력하거나 pem 파일등을 드래그 앤 드롭으로 넣어도 가능합니다
- Inventory 설정
- 좌측 패널의 Inventories 클릭 및 + 로 새로운 Inventory를 생성합니다 (Smart가 아닌 일반 inventory로 생성)
- 다음 필드 내용을 추가합니다
- NAME: 임의의 Inventory 이름
- ORGANIZTION: Default
- Inventory 생성 시 HOSTS 탭을 사용 가능하며 + 를 눌러서 Host를 등록합니다
- ansible2를 다음과 같이 등록하며 같은 방법으로 ansible3도 등록합니다
- 다음과 같이 ansible2를 선택 후 run commands 클릭합니다
- 다음 내용을 통해 확인합니다
- MODULE: ping
- MACHINE CREDENTIAL: AWX Admin Credential
- LAUNCH클릭 시 정상적으로 수행될 경우 다음과 같은 화면이 출력됩니다
- Project 생성
- 일반적으로 git을 사용하나 내부 테스트용으로 Manual로 생성해봅니다
- 생성 시 다음처럼 프로젝트를 만들 수 없음을 확인할 수 있습니다
- /var/lib/awx/projects내에 디렉토리를 만들어도 인식하지 않음을 알 수 있으며, inventory 설정 중 다음 부분의 수정 및 재배포가 필요합니다
- 재배포하더라도 기존 설정이 초기화되지는 않습니다
- #vim /centos/awx/installer/inventory
- project_data_dir= /var/lib/awx/projects
- 디렉토리를 default인 /var/lib/awx/projects가 아닌 임의의 디렉토리 /opt/awx/projects 등으로 지정해도 무관하며 본문에서는 임의의 디렉토리를 사용합니다
- /centos/awx/installer에서 ansible-playbook -i inventory install.yml 명령을 수행합니다
- vim /opt/awxcompose/docker-compose.yml 명령으로 내용 확인 시 다음 부분이 추가된 것을 확인할 수 있습니다
- 이제 /opt/awx/projects에 디렉토리를 생성 후 새로고침 시 다음처럼 프로젝트 추가가 가능한 것을 확인할 수 있습니다
- 동작을 테스트해보기 위해 test_project 디렉토리 내에 간단한 playbook을 생성합니다
- vim /opt/awx/projects/test_project/fact.yml
--- - hosts: all tasks: - name: Print Facts debug: msg: - Default Hostname is {{ ansible_hostname }} - Default IPV4 of {{ ansible_fqdn }} is {{ ansible_default_ipv4.address }}
- yml 파일을 생성 후 Test_project에서 JOB TEMPLATES탭을 클릭하여 Job Template을 추가합니다
- 위 화면에서 Save 이후 바로 LAUNCH를 클릭하거나 좌측 패널의 TEMPLATES메뉴에서 새로 만든 템플릿의 Start job 아이콘을 클릭합니다
- 정상적으로 동작 시 위와 같이 완료되며 TEMPLATE 화면에서 녹색으로 표시되는 것을 확인할 수 있습니다
- #vim /centos/awx/installer/inventory
암호화 파일 실행
- Ansible Vault 란
- Ansible에는 playbook 파일을 암호화할 수 있는 ansible vault라는 기능을 제공하며, 해당 기능으로 암호화 시 암호를 입력해야만 해당 playbook을 수행할 수 있게됩니다
- Vault로 암호화된 playbook 실행
- 일반적으로 group_vars/all 등 playbook에 사용되는 변수들에 대해 암호화하나 간단한 테스트를 위해 기존 playbook을 복사 후 encrypt합니다
- cd /opt/awx/projects/test_project
- cp fact.yml secfact.yml
- ansible-vault encrypt secfact.yml
- vi 편집기 등으로 secfact.yml을 열어볼 경우 암호화되어 내용을 확인할 수 없으며, 내용 확인을 위해서는 다음 명령을 통해 암호를 입력해야합니다
- ansible-vault view secfact.yml
- 테스트를 위해 AWX에 접속 후 Job Template을 생성하여 실행 시 다음과 같은 에러를 확인 가능합니다
- credential 메뉴에서 다음과 같이 새로운 Vault type의 credential을 생성합니다
- 생성 후 Job Template에 새로 만들어진 Vault Credential를 추가합니다
- 다시 실행 시 다음처럼 정상적으로 수행됨을 확인할 수 있습니다
- 일반적으로 group_vars/all 등 playbook에 사용되는 변수들에 대해 암호화하나 간단한 테스트를 위해 기존 playbook을 복사 후 encrypt합니다
후기
Ansible 초보의 입장에서 느낀 점으로는 우선 GUI에서 오는 가시성은 꽤나 편리했습니다.(예를 들어 ping test부분이라던가) 특히 Admin의 입장에서라면 이미 모든 설정이 되어있다고 가정할 시 관리적인 측면에서 일반 Ansible에 비해 편하게 사용이 가능하구요.
다만 기본 Ansible외에 AWX의 설치 및 설정에 대한 관리포인트의 증가 및 AWX내에서 yml파일을 생성할 수 없는 점, 실제 운영환경에서의 제약사항등을 고려 시 Ansible에 숙달될수록 AWX의 필요성을 덜 느낄 것으로 생각됩니다