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

  1. ansible1 서버에서 centos 계정으로 암호없이 ansible2와 ansible3에 접속 가능하도록 설정
    1. /etc/hosts 파일에 위 내용을 등록합니다
    2. ansible2와 ansible3 서버에 접속 후, 다음 파일을 수정합니다(해당 내용이 이미 반영되어 있을 경우엔 수정하지 않아도 무관)
      1. #/etc/ssh/sshd_config
        1. PasswordAuthentication yes
        2. 저장 후 centos 계정의 암호를 설정합니다
        3. passwd centos
    3. ansible1 서버에서 다음 명령을 통해 ssh-copy-id 적용 후 centos계정으로 ansible2와 ansible3서버에 암호입력 없이 접속 가능한지 확인합니다
      1. #ssh-copy-id centos@ansible2
      2. #ssh-copy-id centos@ansible3
      3. #ssh centos@ansible2
      4. #ssh centos@ansible3
  2. Ansible 및 AWX 설치
    1. 작성일 기준으로 Ansible 2.7.10, AWX 4.0 버전을 ansible1서버에 설치합니다
    2. 패키지 설치
      1. #sudo yum install epel-release

      2. #sudo yum install git gettext ansible docker nodejs npm gcc-c++ bzip2 -y

      3. #sudo yum install python-pip -y

      4. #sudo yum install python-docker-py -y

    3. Docker 실행
      1. #sudo systemctl start docker

      2. #sudo systemctl enable docker

    4. AWX Clone 및 설정
      1. #git clone https://github.com/ansible/awx.git

      2. #cd awx/installer/

      3. #vim inventory
        1. postgres_data_dir=/opt/awxdb
        2. docker_compose_dir=/opt/awxcompose
      4. #sudo mkdir /opt{awxdb,awxcompose}
      5. inventory 설정 중 AWX 버전 설정이 필요하다면 다음 부분을 수정합니다(설정 안할 시 latest로 설치)
        1. dockerhub_base=ansible
      6. inventory 설정 중 proxy가 필요하다면 다음 부분을 수정합니다
        1. # Proxy
        2. #http_proxy= http://proxy:3128
        3. #https_proxy= http://proxy:3128
        4. #no_proxy= mycorp.org
      7. 설정파일의 설정이 완료될 경우 다음 명령을 수행하여 docker-compose파일을 생성합니다
        1. #ansible-playbook -i inventory install.yml
      8. 위 명령 수행 시 다음과 같은 에러가 발생 가능할 수 있습니다
        1. TASK [local_docker : Start the containers] *************************************************************************************************************************************
          1. 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)"
        2. 위 에러가 발생할 경우 다음 명령을 수행한 뒤 다시 playbook을 수행합니다
          1. #pip install docker
          2. #pip install docker-compose
      9. install.yml을 수행 시 docker-compose 파일이 다음의 위치에 생성되게 됩니다
        1. #cd /opt/awxcompose/
      10. 만들어진 docker-compose파일을 다음 명령을 통해 실행합니다(docker-compose 명령 사용 시 특정 파일을 지정하지 않을 경우 자동으로 docker-compose.yml 이름을 가진 파일을 수행)
        1. #docker-compose up -d
  3. AWX 접속 확인
    1. http://192.168.11.35 로 접속 시 다음과 같은 화면을 확인가능하며 admin / password로 접속합니다

AWX 기본 사용법

  1. Credential 설정
    1. 좌측 패널의 Credential 클릭 후 + 로 새 Credential 추가합니다
    2. 다음 필드 내용을 추가합니다
      1. NAME: 임의의 Credential 이름
      2. CREDENTIAL TYPE: Machine
      3. USERNAME: ansible1 서버 접속 계정
      4. SSH PRIVATE KEY: 키로 접속한는 경우에 사용하며 Key가 아닌 암호로 접속할 경우 위의 비밀번호를 넣어서 Save
    3. Key를 직접 입력하거나 pem 파일등을 드래그 앤 드롭으로 넣어도 가능합니다
  2. Inventory 설정
    1. 좌측 패널의 Inventories 클릭 및 + 로 새로운 Inventory를 생성합니다 (Smart가 아닌 일반 inventory로 생성)
    2. 다음 필드 내용을 추가합니다
      1. NAME: 임의의 Inventory 이름
      2. ORGANIZTION: Default
      3. Inventory 생성 시 HOSTS 탭을 사용 가능하며 + 를 눌러서 Host를 등록합니다
      4. ansible2를 다음과 같이 등록하며 같은 방법으로 ansible3도 등록합니다
      5. 다음과 같이 ansible2를 선택 후 run commands 클릭합니다
      6. 다음 내용을 통해 확인합니다
        1. MODULE: ping
        2. MACHINE CREDENTIAL: AWX Admin Credential
      7. LAUNCH클릭 시 정상적으로 수행될 경우 다음과 같은 화면이 출력됩니다
  3. Project 생성
    1. 일반적으로 git을 사용하나 내부 테스트용으로 Manual로 생성해봅니다
    2. 생성 시 다음처럼 프로젝트를 만들 수 없음을 확인할 수 있습니다
      1. /var/lib/awx/projects내에 디렉토리를 만들어도 인식하지 않음을 알 수 있으며,  inventory 설정 중 다음 부분의 수정 및 재배포가 필요합니다
      2. 재배포하더라도 기존 설정이 초기화되지는 않습니다
        1. #vim /centos/awx/installer/inventory
          1. project_data_dir= /var/lib/awx/projects
        2. 디렉토리를 default인 /var/lib/awx/projects가 아닌 임의의 디렉토리 /opt/awx/projects 등으로 지정해도 무관하며 본문에서는 임의의 디렉토리를 사용합니다
        3. /centos/awx/installer에서 ansible-playbook -i inventory install.yml 명령을 수행합니다
        4. vim /opt/awxcompose/docker-compose.yml 명령으로 내용 확인 시 다음 부분이 추가된 것을 확인할 수 있습니다
        5. 이제 /opt/awx/projects에 디렉토리를 생성 후 새로고침 시 다음처럼 프로젝트 추가가 가능한 것을 확인할 수 있습니다
        6. 동작을 테스트해보기 위해 test_project 디렉토리 내에 간단한 playbook을 생성합니다
          1. vim /opt/awx/projects/test_project/fact.yml
          2. ---
            - hosts: all
              tasks:
                - name: Print Facts
                  debug:
                    msg:
                      - Default Hostname is 
                      - Default IPV4 of  is 
          3. yml 파일을 생성 후 Test_project에서 JOB TEMPLATES탭을 클릭하여 Job Template을 추가합니다
          4. 위 화면에서 Save 이후 바로 LAUNCH를 클릭하거나 좌측 패널의 TEMPLATES메뉴에서 새로 만든 템플릿의 Start job 아이콘을 클릭합니다
          5. 정상적으로 동작 시 위와 같이 완료되며 TEMPLATE 화면에서 녹색으로 표시되는 것을 확인할 수 있습니다
암호화 파일 실행
  1. Ansible Vault 란
    1. Ansible에는 playbook 파일을 암호화할 수 있는 ansible vault라는 기능을 제공하며, 해당 기능으로 암호화 시 암호를 입력해야만 해당 playbook을 수행할 수 있게됩니다
  2. Vault로 암호화된 playbook 실행
    1. 일반적으로 group_vars/all 등 playbook에 사용되는 변수들에 대해 암호화하나 간단한 테스트를 위해 기존 playbook을 복사 후 encrypt합니다
      1. cd /opt/awx/projects/test_project
      2. cp fact.yml secfact.yml
      3. ansible-vault encrypt secfact.yml
    2. vi 편집기 등으로 secfact.yml을 열어볼 경우 암호화되어 내용을 확인할 수 없으며, 내용 확인을 위해서는 다음 명령을 통해 암호를 입력해야합니다
      1. ansible-vault view secfact.yml
    3. 테스트를 위해 AWX에 접속 후 Job Template을 생성하여 실행 시 다음과 같은 에러를 확인 가능합니다
    4. credential 메뉴에서 다음과 같이 새로운 Vault type의 credential을 생성합니다
    5. 생성 후 Job Template에 새로 만들어진 Vault Credential를 추가합니다
    6. 다시 실행 시 다음처럼 정상적으로 수행됨을 확인할 수 있습니다
후기

Ansible 초보의 입장에서 느낀 점으로는 우선 GUI에서 오는 가시성은 꽤나 편리했습니다.(예를 들어 ping test부분이라던가) 특히 Admin의 입장에서라면 이미 모든 설정이 되어있다고 가정할 시 관리적인 측면에서 일반 Ansible에 비해 편하게 사용이 가능하구요.

다만 기본 Ansible외에 AWX의 설치 및 설정에 대한 관리포인트의 증가 및 AWX내에서 yml파일을 생성할 수 없는 점, 실제 운영환경에서의 제약사항등을 고려 시 Ansible에 숙달될수록 AWX의 필요성을 덜 느낄 것으로 생각됩니다.


kjeon's profile image

kjeon

2019-05-24

Read more posts by this author