Ansibrest 소개

이 문서는 Ansible Advent Calendar의 9 일째입니다.

우리 팀은 현재 환경 공유를 포함하여 Docker/Ansible을 사용합니다.
또, 새롭게 서비스를 만들 때도 되도록(듯이) docker-compose.yml 를 최초로 만드는 것으로, 개발 초기부터 적절한 분담으로 작업을 할 수 있으므로, 추천입니다.
그럼에도 불구하고 모든 서버가 Docker에서 작동하지 않으므로 ansible은 필수적입니다.

Ansible의 슬픔


  • Ops/Deploy 용 서버의 ansible과 손의 ansible 버전의 차이
  • 서비스 A의 Ops 서버와 서비스 B의 Ops 서버의 ansible에서 버전이 다르거나 둘 다 대응할 수 없습니다.

  • 실행은 Ops 또는 수동 컴퓨터에서만 수행 할 수 있지만 일부는 Ops 서버에 들어가고 싶지 않습니다.

    Ansibrest



    위를 해결하기 위해 이전에 블로그에 썼지만 Ansibrest이라는 도구를 만들었습니다.

    ansible tower 의 기능이 적고, 언오피셜 버전 정도의 인식으로 좋다

    그 후, 사내의 개발 환경에 넣어 Mattermost와 제휴해 놀거나 하고 있었습니다만, 별건으로 바쁘게 되어 방치하고 있었습니다.
    눈치 채면 사내에서는 퍼지 않는 채임에도 불구하고 「사쿠라의 지식

    사용해 주시는 분이 있다면, 무거운 허리를 올리고, 사내에서의 본격 이용도 검토하면서, 필요한 기능을 추가해 갔습니다
  • 전반적인 리팩토링
  • lib/ansible.js

  • 오류 메시지 표시 개선
  • ExtraVars 지원
  • WebSocket에 의한 「긴 Playbook」에 대응
  • 이 녀석이 코드를 더럽히고 있기 때문에 다시 리팩터를 다시 시작할 예정입니다

  • ansible 1.X 계/2.X 계의 대응
  • Dockerize (ansible 2계 동봉)

  • 상당히 다양한, 변경했으므로 꼭 시험해 주세요.

    사용법



    GUI


    % docker run -d -p 2400:2400 -v $ANSIBLE_PATH:/opt/ansible muddydixon/ansibrest
    % docker run -d -p 2400:2400 -v $YOURANSIBRRESTFILE:/opt/ansibrest/.ansibrest \
                               -v $ANSIBLE_PATH:/opt/ansible \
                               muddydixon/ansibrest
    

    이런 식으로, playbook 가 있는 디렉토리를 볼륨 마운트 하는 것만으로 시험할 수 있을 것입니다.





    제대로 ExtraVars{"version": 2}


    마지막 작업은 제대로 반영됩니다!

    CUI



    ansib "rest"의 이름을 붙이고 있으므로 curl 등으로 playbook을 실행할 수 있도록하고 있습니다.
    curl -X POST "http://dev.docker.com:2400/api/playbooks/sample1.yml"
    {"stdout":"\nPLAY [Sample 1 tasks 1] ********************************************************\n\n\nTASK [setup] *******************************************************************\n\nok: [localhost]\n\n\nTASK [debug] *******************************************************************\n\nok: [localhost] => {\n    \"inventory_hostname\": \"localhost\"\n}\n\n\nPLAY [Sample 1 tasks 2] ********************************************************\n\n\nTASK [setup] *******************************************************************\n\nok: [localhost]\n\n\nTASK [debug] *******************************************************************\n\nok: [localhost] => {\n    \"inventory_hostname\": \"localhost\"\n}\n\n\nPLAY RECAP *********************************************************************\n\nlocalhost                  : ok=4    changed=0    unreachable=0    failed=0   \n\n\n","stderr":""}%       
    

    제대로 두드리기 때문에, 예를 들면(라고 할까 이쪽이 메인의 목적이었습니다만), Ops 서버에 이것을 인스톨 해 두는 것으로, Slack Command 등으로 배포를 할 수 있게 되는 것입니다. 승리! ! !

    미래



    ansible tower 에 있는 것과 같은 인증용의 설정이 아직 유감스럽게 마운트 또는 playbook 안에 조용히 할 필요가 있는 곳을 고치고 싶습니다.

    좋은 웹페이지 즐겨찾기