Ansible AWX 를 설치해보기

ansible을 팀에서 사용하면서, 몇가지 이런게 있었으면 하는 점이 있었는데, 그 중하나가 바로 GUI 환경이다. 물론 CLI 콘솔 상에서 playbook을 실행하는데는 아무 문제가 없고 잘 사용하고 있지만, GUI에서도 보기 쉽게 playbook을 실행하고 또한 누가 언제 playbook을 실행했는지 기록되면 좋겠다는 바램이 있었다. Ansible Tower는 이러한 바램을 해소시켜 줄 수 있는 대안이라고 생각이 되지만, 라이센스 비용이 비싸기로 유명(?) 해서, 포기하고 있었는데. Redhat에서 Ansible Tower 의 오픈소스 버전으로 Ansible AWX를 발표했다! (대인배…Redhat.)

AWX(Towner의 오픈소스 버전)는 stanalone으로 구동하며, job(playbook) 에 대한 수행 history, 사용자별 권한제어, GUI, 스케줄링을 통한 실행 기능등을 제공한다.

단일 시스템으로 구동되는데 사용된 기술은 다음과 같다 - Django - Angular JS 1.* - Pgsql - RabbitMQ - memcached

초기 발표 때 부터 Github Repo를 보면서 버전업과 이슈들을 살펴보았는데, 초기에는 install guide가 부실해서 삽질이 많았다. 1.0.3 부터 docker를 통한 설치가 좀 더 간편해졌기 때문에, 이 버전부터는 그냥 docker 구성으로 설치를 진행했다. AWX에서는 완성된 docker-compose.yml 파일을 제공해주지 않기 때문에, 각종 설정을 구성하고, 자체적으로 제공되는 playbook을 실행하면 docker-compose 파일이 생성되는 구조이다. 다음은 Centos 7.4 에서 AWX의 설치 과정을 기록한 것이다.

여기까지하면, AWX는 설치가 완료된것이다. 이제 project를 설정해보자.

항목 설정값
name Ansible Control Node Credential
description playbook 을 실행하기 위해서 control node 에 접속하기 위한 credential
organization Default
type machine
username ssh 계정명
password ssh 패스워드
PRIVILEGE ESCALATION sudo
항목 설정값
name Project Name
description 프로젝트 설명
organization Default
SCM type git
SCM Url ansible playbook github repo 주소
SCM Branch
SCM Update Options Clean, Update on Launch 체크

ansible 을 CLI 에서 다룰 때는 hosts 파일을 지정하면 되었지만, awx 에서는 target node들을 db로 관리한다. 따라서 연결된 SCM 에서 hosts 파일을 읽어 오거나 (매번 playbook 이 실행되기 전에 hosts 내역을 업데이트 한다)/dynamic inventory(클라우드와 같이 target node 들이 유연하게 생성/삭제되어 변경되는 경우)/ 또는 수동으로 직접 관리할 수 있다..

항목 설정값
name 실행할 playbook 의 제목
description 실행할 playbook 의 설명
job type run (check 인경우에는 dry run 만 수행)
inventory UI 상에서 추가한 inventory 연결
project Project Name
playbook 프로젝트에 연결된 SCM(git)에서 playbook 리스트를 자동으로 불러와 그 중 하나를 선택한다.
machen Credential Ansible Control Node Credential : playbook 을 실행하기 위한 control node 에 접속하기 위한 계정정보
Options Enable Privilges Escalation (sudo 필요시 체크)

template 에서 등록한 job을 run(로켓 모양 아이콘 클릭) 하면 된다. 이렇게 되면 jobs 메뉴에 실행 이력이 추가된다.

Identity added: /tmp/awx_40_wPmxLi/credential_6 (/tmp/awx_40_wPmxLi/credential_6)
Using /etc/ansible/ansible.cfg as config file


PLAY [all] *********************************************************************

TASK [delete project directory before update] **********************************
skipping: [localhost]

TASK [check repo using git] ****************************************************
skipping: [localhost]

TASK [update project using git] ************************************************
changed: [localhost]

TASK [Set the git repository version] ******************************************
ok: [localhost]

TASK [update project using hg] *************************************************
skipping: [localhost]

TASK [Set the hg repository version] *******************************************
skipping: [localhost]

TASK [parse hg version string properly] ****************************************
skipping: [localhost]

TASK [update project using svn] ************************************************
skipping: [localhost]

TASK [Set the svn repository version] ******************************************
skipping: [localhost]

TASK [parse subversion version string properly] ********************************
skipping: [localhost]

TASK [Ensure the project directory is present] *********************************
skipping: [localhost]

TASK [Fetch Insights Playbook(s)] **********************************************
skipping: [localhost]

TASK [Save Insights Version] ***************************************************
skipping: [localhost]

TASK [Repository Version] ******************************************************
ok: [localhost] => {
    "msg": "Repository Version fafb252e642065bff7dfa4349adeade7e085825d"
}

TASK [Write Repository Version] ************************************************
changed: [localhost]

PLAY [all] *********************************************************************

TASK [detect requirements.yml] *************************************************
skipping: [localhost]

TASK [fetch galaxy roles from requirements.yml] ********************************
skipping: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=4    changed=2    unreachable=0    failed=0

이제 필요한 만큼 job template(playbook)을 연결하고 실행하면 된다. 요약하자면, awx clone => inventory 파일 설정 => docker-compose up 이다. 보다 자세한 설치는 install 가이드를 확인하자. 다음에는 Kubernetes 에서 설치해봐야 겠다.

추가 사항

참고

J.S Ahn

J.S Ahn

Software Developer, I love code.

comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora