레이블이 Ansible인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Ansible인 게시물을 표시합니다. 모든 게시물 표시

2020년 2월 10일 월요일

GitHub에서 webhook으로 AWX Template 실행하기

github에 코드 push후에 자동으로 뭔가(보통 빌드나 배포겠지) 이어서 하려고 Jenkins 에서 GitHub Integration Plugin  등을 사용할 수 있다.
https://plugins.jenkins.io/github-pullrequest/

만약 AWX에 template를 실행하고 싶다면 어떻게 하믄 될까

다 준비되어 있다아아...

엔서블타워 매뉴얼(참고)
https://docs.ansible.com/ansible-tower/latest/html/userguide/webhooks.html

!!  아래 나오는 URL은 접근이 안되는 URL이고 token은 모두 제거했으므로 뭔가 해보려고 삽질을 하지 말자 그런다고 누가 10전도 안준다. 공부나 해라

원래 AWX 4.0을 쓰고 있었는데 여기는 webhook이라고 별도 기능이 제공되는건 없고  AWX API를 호출하는 방식으로 webhook을 구현할 수 있었다.
이번에 AWX 9.1.1로 업그레이드 하고보니 webhook이 jenkins의 webhook plugin처럼 별도의 기능으로 편하게 제공되는 것을 확인했다.

대략적인 순서는
  1. GitHub에서 PAT(Personal Access Token)를 생성하고 
  2. 자동으로 실행시킬 AWX의 template에서 웹훅(webhook)을 활성화하고  
  3. 활성화했을때 나오는정보(payload,key)를 사용하여 github에서 Webhook을 설정한다
  4. git에 push나 지정한 이벤트를 발생시키면 AWX의 template가 자동연계실행 되는지 확인한다.
요런식이다.


  1. 내 Github의 PAT생성

    1. 당연히 github에 로긴
    2. 오른쪽 위 구석의 개인프로파일에서 "Settings" 선택 
    3. 왼쪽 메뉴에서  "Developer Settings" 선택 
    4. 왼쪽 메뉴에서 "Personal access tokens" 선택  (기본은 아무것도 없는게 정상)
    5. 우측의 "Generate new token" 클릭 
    6. 필요한 권한을 설정한다  (필요한 접근권한만 주도록 한다)
    7. 맨 아래 "Generate token" 버튼 클릭  - 토큰이 발급 되었다 이걸로 AWX Template에 webhook 설정시 연동하면 template에서 callback으로 정보를 전달 할 때 사용할 수 있다. 사실 필수는 아니고 필요한 경우 옵션으로 사용하면 된다.
      1. key는 지웠다. 쓸대 없이 뭐 해볼라고 하지마라!!
  2. GitHub PAT Credential 작성 
    1. AWX에 로그인한다.
    2. 왼쪽 메뉴에서 "CREDENTIALS"를 선택
    3. 우측 화면 위쪽에 녹색의 "+" 버튼이 있다. 자격증명을 추가하는 버튼이다.
    4. 입력화면 
      1. NAME : 알아서 적당히 
      2. DESCRIPTION : 알아서 적당히
      3. ORGANIZATION : 사용할 권한이 있는 조직을 선택 
      4. CREDENTIAL TYPE : "GitHub Personal Access Token"을 선택한다.  
      5. TOKEN : type을 선택하면 나타난다.  위의 GIT에서 생성한 PAT를 넣어준다. 
    5. "SAVE"
  3. Template(AWX)에 WEBHOOK 설정 

    1. AWX에 로그인한다. 
    2. git에 연동할 template를  선택한다
    3. "OPTIONS" 중에 "ENABLE WEBHOOK"을 체크한다. 뭔가 추가로 입력할 수 있는 박스들이 나타난다. 
      1. 버전이 낮으면 이 기능이 없다. 이런 경우 API Call 방식으로 연동을 할 수 있으나 그 부분은 여기서 다루지 않는다. 내가 테스트한 버전은 AWX 9.1.1이다.  
    4. 입력화면

    저장을 한번 해야 key가  만들어진다.
    만들어 놓은 Credential선택
      1. WEBHOOK SERVICE : github, gitlab중에 선택한다.
      2. WEBHOOK KEY : 한번 저장해야 생성된다. 저장하면 생성되는 키로 github에 연동하면 github에서 해당 template로  인증 token으로 사용된다. (git --> awx)
      3. WEBHOOK CREDENTIAL : 앞서 작성한 git PAT Credential을 등록해준다. 이 자격증명은 실행 결과에 대한 Callback시 git으로  인증 token으로 사용된다.(awx --> git)
  4. GitHub Project에 설정 

    1.  이벤트 발생(push등)시 awx에 연동할 repository에 awx연동을 위한 설정을 추가한다.
    2. github에 로그인하고 repository를 선택한다.
    3. project의 "Settings" 선택
    4. 왼쪽 메뉴에서 "Webhooks" 선택 - 기본 아무것도 없다.
    5. 오른쪽 화면에 "Add webhook" 버튼클릭
        1. Payload URL : AWX template설정시 만들어지는 WEBHOOK URL을 입력한다
        2. Content type : AWX 연결시 json
        3. Secret : AWX template설정시 만들어진 KEY를 입력한다.
        4. SSL verigication : ssl 접속을 한다. awx를 SSL로 접속하지 않을경우 끈다. 번거로와도 SSL접속을 되도록 AWX를 설치하는것을 권장한다.
        5. trigger : 어떤 이벤트시에 AWX template를 호출할 것인지 event를 선택한다. 나는 push event만 선택했다. 원한다면 다른것들도 가능하다.
        6. Avtive : Check해야 활성화ㅣ
    6. "Add webhook" 버튼을 눌러 저장 
    7. 에러 발생시에는..
      1. add시에 자동으로 테스트를 수행한다. 이때 실패하면 빨간색 표시가 뜬다
      2. 내용 설정을 다시한번 확인해본다. edit를 눌러 들어가면  직접 test를 할 수 있는 버튼이 있다.
이상으로  git hub에서 awx로  webhook을 사용하여 pipe를 연결하는 방법을 설명하였다.
회사내부에 gitHub Enterprise를 사용하고 있지 않다면  공개 github.com에서 사내의 awx 서버에 접속하기란 쉽지 않을 수 있다.(보통 보안상 접근불가)
GitLab (opesource)도 지원하므로 사내에 repository를 구축해서 연동하면 충분히 사용할 만 하다. 

git에 push -> jenkins (일반적으로 build test, code test) 형태로 주로 사용하고 
실제 배포는 jekins에 들어가서 버튼을 누를겁니다....(자동은 무섭....)

빌드는 jenkins에서 하지만 서버에 파일 넣고 재구동 하기가 꽤나 번거로울겁니다. 보통 ssh plugin으로 쉘명령 날리기로 하실껀데....뭐 에러나고 권한문제생기고...그렇죠

ansible plugin도 있으니 ansible yaml code를 jenkins에 넣어서 작업하시는 분들도 있을 것이고요 

AWX를 잘 쓰고 있다는 가정하에 다양하게 연동하실 수 있을 겁니다. 

git에 push -> awx template  (build? copy? restart?)
git에 push -> jenkins pipeline -> awx template 

상상력을 발휘해보시고 일을 좀 더 편하게 할 수 있는 방법을 찾아보세요 

.이상

2019년 12월 9일 월요일

Ansible 편하게(?) 사용하기 AWX

2019년 1년간 Ansible의 운영플렛폼인 AWX를 백그라운드 프로젝트로 진행하면서 꽤나 공부가 되었다.

!! 백그라운드 프로젝트
일과 관련없는(?), 시킨거말고, 내가궁금한걸로, 몰래할수 있는, 한해 내에 뭔가 만들 수 있을것 같은걸로..... 그런걸로 년말에 선정해서 일년동안 그냥 시간날때 마다 해보고 정리해본다. 직장 생활이란게 원래 계속 일이 있기 때문에 내 경우 중간중간 관련 없는일을 해서 리프레시하지 않으면 지겨워서 못산다

특히나 회사에 서버가 많은 덕분에 이런저런 작업에 써먹어 볼 수 있었고  혼자 VM띄워서 해보기 힘들것들도 쉽게쉽게 접근이 가능했다

그러고보면 중소기업에서 일하는게 좋은면도 있었지만 리소스면에서는 아무래도 부족한 지라 지금 회사에 몸담게 된것이 운이 억수로 좋은 것 같기도 하다

일년 공부한걸 정리하자는 생각에 회사에서 년말 맞이 기술자랑질 대회를 한다길래 숫가락을 올려보았다

다른 사람들 글을 보니 좀 부끄부끄 하지만.... 그럼 뭐 어때 그냥 하는거지

그렇게 또 이불킥 발사할 글이 인터넷에 올라가게 되었따..

프로비저닝 자동화를 위한 Ansible AWX 1부



프로비저닝 자동화를 위한 Ansible AWX 2부 



2019년 9월 9일 월요일

AWX(Ansible worker) 설치 방법




  1. AWX 설명 
    1. 기존  비정형 자동화 스크립트들 (shell,perl,python...etc)을 Automation에 방점을 찍어 기능의 모듈화(정형화), python 기반 + yml(야뮬,YAML Ain't Markup Language)을 적용하여 자동화를 지원하는 언어로써 Ansible이 있다.
      이 Ansible은 그저 언어 형태를 가지기만 할 뿐 실제 스크립팅(playbook제작)은 사용자 몫이며
      작은 단위의 실행에서는 CLI형태(Ad-hoc)로 작업이 가능하지만 Enterprise 영역에서
      사용자마다 권한 설정, SCM관리, 병령, 분산처리, 실행결과 로깅, 등등의 필수적인 기능은 제공되지 않으므로
      직접 구현해야 하는(배보다 배꼽이 크다)형태라 이 부분을 제공하는 제품으로 Ansible Tower라는 제품을 Redhat에서 제공(판매)한다. 
      (레드햇은 Ansible, Inc를 인수했다. ansible org 역시 메인 서포터는 레드햇)
      이 Ansible Tower의 OSS 버젼이 AWX(Ansible Worker)이다.
      OSS라면 기능의 차이는 어떨까 레드햇 의 OSS를 Enterprise로 전환 방법과 비지니스 모델은 거의 모든 제품에서 유사하다
      Software이므로 쉽게 설명하면 CentOS와 RHEL을 비교하면 되겠다
      두 개의 차이는 거의 없으나 CentOS는 빠르게 업데이트가 반영되는 반면 안정성이나 지원이 부족하고
      RHEL은 CentOS의 Stable버젼으로 판단되는 시점에서 별도 브렌치되어 개발(보안,특화기능추가) 배포 되므로 서브스크립션을 구입하면 지원과 업데이트 등이 가능해 진다.
      각설하면 기능은 다 되는 것으로 판단할 수 있다.(클러스터 등 몇몇 주요 기능은 2019년 Q1 현재 구현되지 않았다) 하지만 상용 버젼으로 패키징하는 단계를 거치지 못했기 때문에 여러모로 부족한 부분이 있다.
      (예를 들어 초기 만 해도 설치 스크립트가 없어서 yml을 직접 수정 작성해야 했다)
      안되면 게시판을 전전해야 하는 것은 OSS버젼을 쓰는자의 숙명?인듯 하다...... 
    2. 오해 하지 말아야 할것
      1. AWX는 platform만 제공한다.
        1. 말 그대로 AWX는 플렛폼이다. 템플릿팅을 지원하고 로그, 권한 관리등...이 글을 읽고는 바로 와 닿지 않으 수 있지만 기업에서 사용하기 위한 여러가지 기능을 별도의 개발없이 사용할 수 있도록 지원한다 
        2. 예를 들어 awx의 로그를 elastic search에 연동해서 kibana에서 조회하고 싶다면 AWX의 logging 기능에서 logstash로 직접 log를 발행해주는 기능을 사용할 수 있다.
        3. 다만 실제 제어를 위한 부분은 사용자가 개별 개발해야한다. 과거 티볼리나 HP 자동화 솔루션을 접해보거나 데모를 봤다면 "AWX가 알아서 뭔가해주는거아니야?" 하겠지만 어림 1도 없다. 모든 제어는 사용자가 yml형태의 code를 짜야한다.
        4. 물론 이 부분에서 ansible 갤럭시라는 이미 여러 케이스의 기능에 대한 샘플을 볼 수 있지만 내가 필요한 것 보다 과도하게 코드가 복잡하거나 여하간 수정하지 않고 그대로 쓰기에는 문제가 있다. 그래도 그것만 해도 대단한거다 쌩으로 다 짜려면 쓸대없는 시간이 많이 날아 간다...특히나 띄어쓰기와 오타....
        5. redhat 세일즈나 파트너사에서 이야기 하듯이 무지 쉽지않다 오해 하지말자, 다시한번 말하지만 알아서 해주는 부분은 "ansible을 개발하는 개발자가 기업에서 사용하기 위한 환경"에 대해서 도움을 주는것이다. 
        6. 말이 좀 그렇지만 그렇다고 뭐 엄청 어려운건 아니다 셈플 몇개 보고 해보면 금방한다. 오히려 개발해 본 적이 없거나 자신의 PC에 IDE 환경이 만들어져 있지 않다면 그런 환경을 구성하는데 시간을 더 보낼지도 모르겠다.  기존 개발을 위해 atom, eclipse,intelliJ 등의 IDE 환경이 구성되어 있고 git에 code pull/push 할 줄 아는 정도의 시본 스킬이 필요하다
        7. 특히나 시스템업무를 주로 하면서 vi가 지상최강의 editor라며(인정!) 일을 하시는 스크립트 장인분들은 초반 접근이 무지 귀찮을 것이다.  
        8. 세상이 변했다 devops건 SRE이건  장비쟁이가 코드모르거나  개발쟁이가 시스템 모르면 일하기 개 빡신세상이다. 공부해라 공부해서 남줘라
  2. AWX 설치
    1. Pre-Install 
      1. add docker repo
        awx는 docker기반으로의 배포만 지원한다. openshift와 kubernetes환경도 지원하지만 automation을 위해 그런 제품을 사거나 환경구성을 위한 공수를 들이기는 오버이지 싶다
        # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
      2. Install docker
        OS에 docker를 구동하기 위한 환경을 구성한다 
        # yum -y install docker-ce
        # systemctl enable docker
        # systemctl start docker
      3. Install Ansible & pip & docker compose
        AWX를 쓰는것 자체에서는 필요없겠지만 ansible로 제어를 하려다보면 가끔 python module을 사용해야 할때가 있다. 이때를 위해서 pip를 설치한다.
        # yum -y install ansible python-pip
        # pip install --upgrade pip
        # pip install docker-compose --ignore-installed
      4. vmomi(VMware Managed Object Management Interface) - need for vMware control
        옵션이다  vmware를 자동화 하기 위한 모듈로 이런것도 설치해서 쓴다는 정도만 알고 있으면 되겠다. 필수사항이 아니다.
        #pip install pyvmomi

      5. pip module - some lib is need upgrade
        돌리다보면 ansible version마다 사용하는 python module이 버전이 낮은경우 문제들이 발생하는 경우가 있다.  특히나 url module등에서 많이 발생하는데 이런 경우 아래처럼 설치하거나 업그레이드 해서 회피 가능하다. 
        pip install requests urllib3 pyOpenSSL --force --upgrade
    2. official awx clone
      여기서 부터가 실제 AWX를 설치하는 부분이다.
      1. opensource awx not support HA
        AWX를 그냥 받아서 쓰면 SSL도 안되고 HA도 안된다 이 문서에서는 그 부분을 다루지 않는다....시간나면 써보겠지만.... 여하간 좀 찾아보면 할 수 있기는한데 ......(세상에 안되는게 어디있나  사람 갈아넣으면 다 되지....ㅠ.ㅠ)
        소스를 받아서 로컬에 저장한다  -b 는 해당 git 에서 특정버전을 지정한다. 지정하지 않으면 최신버전이 내려온다
        cd /tmp
        git clone -b 6.0.0 https://github.com/ansible/awx.git
    3. make install script
      1. file :  /tmp/awx/installer/install.sh
        그냥 손으로 돌려도 되지만 한방에 설치되리라는 보장이 없다 할때마다 타이핑 치기 귀찮아서 shell 파일 하나 만든다.
        cd /tmp/awx/installer
        vi /tmp/awx/installer/install.sh
        >>
        ansible-playbook -i ./inventory ./install.yml
        <<
        chmod 755 install.sh
    4. edit config 
      1. file : /tmp/awx/installer/inventory
        이건 취향에 따라 다른데  기본값으로 설치해도 된다. 그런경우 저장되는 위치가 여기저기 흩어지기 때문에 내 경우 /data 파티션을 하나 만들고 그 아래에 몰아 넣도록 했다
        dockerhub_version= 은 이걸 지정하지 않으면 최신 버전의 docker image르 받아오므로 위체 clone할때 지정한 버전과 같도록 해준다
        위에서 지정을 하지 않았으면 최신버전이므로 inventory에도 지정하지 않으면 최신 이미지를 받아온다 
        dockerhub_version=6.0.0
        postgres_data_dir=/data/pgdata
        docker_compose_dir=/data/awxcompose
        project_data_dir=/data/projects
      2. make folder
        AWX의 데이터는 docker로 구동되는 pgsql DB에 저장된다. 이 저장소가 docker container에 저장될 수 는 없으므로 local disk의 어딘가 저장되며 나의 경우 위에 inventory 설정에서 /data/pgdata 라고 지정했으므로 해당 폴더를 만들어준다.
        mkdir -p   /data/pgdata
        #other folder is auto create
    5. install  and check
      1. path : /tmp/awx/installer/install.sh
        이제 별 문제가 없다면 installer를 돌려준다.
        ansible log가 화면가득 떨어질것이고 문제가 있다면 에러를 내고 떨어질것인데...
        문제를 해결하고 중복해서 여러번 돌려도 걱정하지 않아도 된다
        설치 스크립트 자체가 ansible이기 때문에 여러번 수행해도 별 문제 없다.   돌리고 에러나면 처리하고 다시돌리고....또 돌리고...될때까지 돌리자 ㅋㅋㅋ
        cd /tmp/awx/installer
        ./install.sh
        .....
      2. connect awx (web browser)
        처음 설치되고나면 docker가 기동되고 DB에 기본 schema생성을 위해 1~2분 정도 소요된다. 물론 서버의 성능에 따라 천차만별이겠지만...
        아래 URL로 접속해서 뭔가 화면에 나오고 화살표가 빙글빙글돌고 있다면 속편하게 기다리자 
        1. http://${IP_ADDRESS}
        2. default ID/PASS : admin / password
    6. 기타
      1. 설치하고 아무것도 안나오고이상하다면 아래 명령어를 쳐서 docker가 구동중인지 정도는 확인할 수 있다
        1. #docker ps 
      2. docker는 5개가 구동된다.
        1. awx_web : 사용자 UI다 내부는 nginx로 되어 있다.
        2. awx_task : awx_web에서 수신받은 처리를 담당한다. python process로 확인된다.
        3. awx__rabbitmq : 클러스터 구성시 job을 공유하기 위해 사용된다. 다만 awx를 그냥 설치하면 cluster구성이 안되므로 큰 의미는 없다
        4. postgres : awx의 각종정보가 저장되는 RDB이다. pgsql 9.6으로 되어 있다. 10까지는 설치해서 외부 DB로 사용해 봤는데 문제 없이 사용가능하다 
        5. memcached : 걍 케쉬다
        6. # docker ps
          CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                                 NAMES
          5bdb52eadf2d        ansible/awx_task:6.0.0       "/tini -- /bin/sh -c…"   4 weeks ago         Up 2 weeks          8052/tcp                                              awx_task
          4d21608ce7be        ansible/awx_web:6.0.0        "/tini -- /bin/sh -c…"   4 weeks ago         Up 2 weeks          0.0.0.0:80->8052/tcp                                  awx_web
          ce130d98621a        ansible/awx_rabbitmq:3.7.4   "docker-entrypoint.s…"   4 weeks ago         Up 2 weeks          4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp   awx_rabbitmq
          74d79bde7cb9        postgres:9.6                 "docker-entrypoint.s…"   4 weeks ago         Up 2 weeks          5432/tcp                                              awx_postgres
          dd06ffef773d        memcached:alpine             "docker-entrypoint.s…"   4 weeks ago         Up 2 weeks          11211/tcp                                             awx_memcached
      3. log를 보고싶다면
        1. docker 명령어를 좀 배우면 된다.
          1. log : # docker logs -f awx_web 
      4. docker에 접속해서 설정을 보고싶다면 아래 명령어를 사용해서 container의 shell을 실행해서 접근을 할 수 있다.
        1. # docker exec -it awx_web /bin/bash 

2017년 6월 22일 목요일

ATOM기반으로 Ansible개발환경 설정하기

앞서 Eclpise기반으로 yml을 편집하고 런쳐로 실행하는 포스팅을 올렸다.

https://yckwon2nd.blogspot.kr/2017/03/ansible.html

근데 오타 대마왕인 나로써는 코드 코디네이터(자동완성기능같은...)가 꼭 필요한데

Eclipse에서 찾을 수 가 없더라고....

그래서 혹시나 ATOM을 뒤져 봤더니 대박!

그것 뿐 아니라 Syntax checker까지 다 나와있다... 이미 몇 년전 부터  -.-;;

그래서 ATOM을 기반으로 Ansible playbook 개발과 실행을 위한 환경을 구성해 보았다.