앞에서 playbook을 사용하는 것을 살짝 맛봤는데,

이번에는 조금 더 진보된 playbook을 작성해서 사용해보자.





1. 새로운 playbook 작성


    - "apt-get upgrade"를 실행시키기 위한 playbook이다.


$ nano ./apt-upgrade.yml


- hosts: all

  tasks:

    - name: Update and upgrade apt packages

      become: true

      apt:

        upgrade: yes

        update_cache: yes

        cache_valid_time: 86400 #One day




2. 설명....


    - hosts: all → hosts 파일에 등록된 모든 아이들에게 실행하라는 의미

    - tasks → 해야할 일을 적겠다라는 의미

    - name → 해야할 일을 설명? 하기 위해서 적어주는 내용

    - become: true → sudo 권한으로 일을 하겠다라는 의미

    - apt: → apt와 관련된 모듈을 사용하겠다라는 의미

    - upgrade: yes → "apt-get upgrade" 명령과 같은 의미

    - update_cache ... cache_valid_time → "apt-get update"를 실행하는데, 하루 이내라면 생략~




3. apt 모듈과 관련되어서 더 알고 싶다면 아래 링크 참조


    - http://docs.ansible.com/ansible/apt_module.html




4. 그러면 일단 실행 !!!


$ ansible-playbook ./apt-upgrade.yml 


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


TASK [Gathering Facts] ***********************************************************************

ok: [192.168.100.105]


TASK [Update and upgrade apt packages] **************************************************

fatal: [192.168.100.105]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find aptitude. Please ensure it is installed."}

to retry, use: --limit @/srv/workspace/ansible/apt-upgrade.retry


PLAY RECAP **********************************************************************************

192.168.100.105            : ok=1    changed=0    unreachable=0    failed=1


    - 어?! 에러가 발생했다. "Could not find aptitude. Please ensure it is installed."





5. aptitude가 필요한 노예 !!!


    - 주인의 말을 제대로 알아듣기 위해서는 노예(slave)에게 aptitude 패키지를 설치해줘야 한다.


$ sudo apt-get install


    - 아니면 이마저도 ansible을 통해 설치해볼 수도 있다.



$ nano ./install-aptitude.yml


- hosts: all

  tasks:

    - name: install aptitude

      raw: sudo apt-get -y install aptitude


$ ansible-playbook ./install-aptitude.yml 


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


TASK [Gathering Facts] ***********************************************************************

ok: [192.168.100.105]


TASK [install aptitude] ************************************************************************

changed: [192.168.100.105]


PLAY RECAP **********************************************************************************

192.168.100.105            : ok=2    changed=1    unreachable=0    failed=0   





6. 이제 다시 실행해보자.


$ ansible-playbook ./apt-upgrade.yml 


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


TASK [Gathering Facts] ***********************************************************************

ok: [192.168.100.105]


TASK [Update and upgrade apt packages] **************************************************

ok: [192.168.100.105]


PLAY RECAP **********************************************************************************

192.168.100.105            : ok=2    changed=0    unreachable=0    failed=0  




이제서야 ansible 에 대해서 조금 감이 온다!

여러분도???? ^^



이제 실무에 사용하기 위해서 필요한 것들이 뭔가 더 없을지 알아봐야겠다.



반응형


Server 관리를 위해 이것저것 보다가 발견한 Ansible,

그런데, Docker 관련하여 시스템 환경 셋팅을 할 일이 있어서 알아보다가 다시 만난 Ansible


생각보다 나온지는 꽤 된 놈이다. 무려.... 2012년...


아는 사람들은 꽤 오래전부터 사용해왔던듯.




Ubuntu에서 패키지로도 제공은 해주지만,

개인적인 취향으로 (그리고 폐쇄된 망을 사용해야하는 경우를 위해)

직접 Source를 내려받아서 package를 만들어서 설치하는 방법으로 알아보겠다.




1. 필요한 패키지들을 좀 설치해야 한다.


$ sudo apt-get install python-setuptools python-dev libffi-dev libssl-dev python-yaml python-paramiko python-jinja2 cdbs debhelper dpkg-dev reprepro asciidoc devscripts pbuilder sshpass




2. 소스코드는 GitHub로부터 다운로드를 받아야 한다. (당연히 git이 미리 설치되어 있어야 한다)


$ git clone git://github.com/ansible/ansible.git --recursive





3. dep 패키지를 만들어보자.



$ cd ./ansible


$ make deb-src


$ cd ./deb-build/unstable/ansible-2.4.0/


$ dpkg-buildpackage -us -uc -rfakeroot





4. 만들어 놓은 것을 이제 설치해보자.


$ cd ..


$ ls -al

합계 8072

drwxrwxr-x  3 u14 u14    4096  7월 16 20:15 ./

drwxrwxr-x  3 u14 u14    4096  7월 16 19:52 ../

drwxrwxr-x 11 u14 u14    4096  7월 16 20:14 ansible-2.4.0/

-rw-r--r--  1 u14 u14     792  7월 16 20:14 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable.dsc

-rw-rw-r--  1 u14 u14 5845022  7월 16 20:14 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable.tar.gz

-rw-r--r--  1 u14 u14 2387746  7월 16 20:15 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_all.deb

-rw-rw-r--  1 u14 u14    1620  7월 16 20:15 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_amd64.changes

-rw-r--r--  1 u14 u14    2375  7월 16 19:52 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_source.build

-rw-r--r--  1 u14 u14    1240  7월 16 19:52 ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_source.changes


$ sudo dpkg --install ./ansible_2.4.0-100.git201707151558.1a27546.devel~unstable_all.deb




5. 버전 확인하기


$ ansible --version

ansible 2.4.0

  config file = /etc/ansible/ansible.cfg

  configured module search path = [u'/home/u14/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

  ansible python module location = /usr/lib/python2.7/dist-packages/ansible

  executable location = /usr/bin/ansible

  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]



엄청 쉽다~!!!



반응형


DevOps 트렌드에 발맞추기 위해서 이런 저런 도구들을 찾아보면,

최근 가장 유명한 것은 Chef 아니면 Puppet 이라는 이름이 검색되곤 한다.


하지만, Ansible도 나름 유명한 도구라는...

그래서 계속 더 공부해보기로 했다.



1. hosts 파일

    - 앞에서는 임의의 위치에 hosts 파일을 만들어서 "-i" 옵션을 통해 직접 파일을 지정해주었다.

    - 하지만, 기본 경로에 해당 파일을 위치시키면 아주 편하게 사용할 수 있다.


$ sudo mkdir /etc/ansible

$ sudo nano /etc/ansible/hosts


[staging]

192.168.100.105



2. playbook 작성

    - 어떤 서버에게 어떤 일을 시킬 것인지를 적어놓는 파일을 playbook 이라고 한다.

    - ping을 하는 것을 하나 만들어보자.


$ nano ./ping-test.yml


- hosts: all

  tasks:

    - name: ping

      action: ping



3. playbook 실행

    - 앞에서 작성한 hosts 파일과 playbook을 이용하여 일을 시켜보자.


$ ansible-playbook ./ping-test.yml


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


TASK [Gathering Facts] ********************************************************************************************

ok: [192.168.100.105]


TASK [ping] ********************************************************************************************************

ok: [192.168.100.105]


PLAY RECAP *********************************************************************************************************************

192.168.100.105            : ok=2    changed=0    unreachable=0    failed=0



혹시 노예(Slave)가 말을 잘 듣지 않는 경우라면... 주인의 키를 노예에게 알려주지 않은 것이 아닌지 확인해보자.

    - http://www.whatwant.com/395




Ansible 관련 문서나 가이드들이 꽤 많이 검색이 되지만,

나처럼 멍청한 사람을 위한 친절하고 쉬운 가이드가 없어서 고생하고 있다.


일단, 위의 가장 단순한 형태의 Sample로 playbook을 이용하는 방법을 맛보자!


다음 기회에 한 발 더 걸음을 내딪어보자.


반응형


Ansible은 장점이 많은 도구인 것 같다.

첫번째로 Master에만 설치하면 된다는 점에서 좋고, 두번째로는 SSH 기반으로 일을 한다는 것이 좋다!



 

 

지난 포스팅을 통해서 Master 역할을 할 아이에게 Ansible을 설치했다는 전제 하에 설명을 진행하겠다.

    - [ Ansible Source Install (Ubuntu 14.04) ] : http://www.whatwant.com/865

 

 

 

 

그 다음 해야할 첫번째 일은... Master에서 Slave로 SSH로 접근할 수 있는 길을 만드는 것이다.

    - [ SSH Public Key - SSH 공개키 ] : http://www.whatwant.com/395

 

Master에서 ssh 키를 생성하고나서 Slave들에게 public-key를 넣어주면 된다.

 

 

 

 

 

이제 해야할 일은 Ansible에게 Slave가 누군지를 알려줘야 한다.

hosts 파일을 만들자. 꼭 이름을 "hosts"라고 해야하는 것은 아니다.

 

$ nano ./hosts

 

Slave IP 정보를 적어주면 된다. 꼭 "[Staging]"이라고 이름을 지어야 하는 것은 아니다.

 

[staging]
192.168.100.105

 

 

 

주인의 명령을 듣는 노예(Slave)들에게는 내가 주인인 것을 알려주는 열쇠가 필요하다. SSH Public-Key

    - http://www.whatwant.com/395


주인의 키를 노예에게 넣어놓자!


 

 

Slave와 잘 통하는지 알아보자.

 

$ ansible all -m ping -i ./hosts -u u14
192.168.100.105 | SUCCESS => {
    "changed": false,
    "failed": false,
    "ping": "pong"
}

 

"-i" 옵션 뒤에는 앞에서 만든 hosts 파일을 지정해주면 되고.

"-u" 옵션 뒤에는 Slave에 접근할 계정을 지정해주면 된다.

 

 

 

 

그럼 간단한 명령어를 원격으로 날려보자.

 

$ ansible -i ./hosts staging -u u14 -m command -a "ls -ahl"
192.168.100.105 | SUCCESS | rc=0 >>
합계 140K
drwxr-xr-x 18 u14  u14  4.0K  7월  2 03:38 .
drwxr-xr-x  3 root root 4.0K  8월  9  2015 ..
-rw-------  1 u14  u14  7.4K  7월  2 03:37 .ICEauthority
-rw-------  1 u14  u14    53  7월  2 03:37 .Xauthority
drwx------  3 u14  u14  4.0K  6월 25 19:07 .ansible
-rw-------  1 u14  u14  2.0K  6월 26 00:35 .bash_history
-rw-r--r--  1 u14  u14   220  8월  9  2015 .bash_logout
-rw-r--r--  1 u14  u14  3.6K  8월  9  2015 .bashrc
drwx------ 14 u14  u14  4.0K  6월 25 14:58 .cache
drwx------  3 u14  u14  4.0K  8월  9  2015 .compiz
drwx------ 14 u14  u14  4.0K  8월  9  2015 .config
drwx------  3 u14  u14  4.0K 12월 12  2016 .dbus
drwx------  3 u14  u14  4.0K  7월  2 03:37 .gconf
drwx------  3 u14  u14  4.0K  8월  9  2015 .local
-rw-r--r--  1 u14  u14   675  8월  9  2015 .profile
drwxrwxr-x  2 u14  u14  4.0K  6월 25 18:59 .ssh
-rw-r-----  1 u14  u14     5  7월  2 03:37 .vboxclient-clipboard.pid
-rw-r-----  1 u14  u14     5  7월  2 03:37 .vboxclient-display.pid
-rw-r-----  1 u14  u14     5  7월  2 03:37 .vboxclient-draganddrop.pid
-rw-r-----  1 u14  u14     5  7월  2 03:37 .vboxclient-seamless.pid
-rw-rw-r--  1 u14  u14   131  8월  9  2015 .xinputrc
-rw-------  1 u14  u14    54  7월  2 03:37 .xsession-errors
-rw-------  1 u14  u14   833  7월  2 03:11 .xsession-errors.old
-rw-r--r--  1 u14  u14  8.8K  8월  9  2015 examples.desktop
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 공개
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 다운로드
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 문서
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 바탕화면
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 비디오
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 사진
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 음악
drwxr-xr-x  2 u14  u14  4.0K  8월  9  2015 템플릿

 

 

"$ sudo apt-get -y upgrade" 명령어 등을 이용하면...^^

 

 

 

 

Ansible을 이용해서 Slave에 접근하는 것에 대해서 살짝 맛만 봤다.

제대로 이용하기 위해서는 playbook 등을 이용해야하지만, 지금은 맛만 살짝~




다음에 기회가 되면 계속 이어가보겠다~



 

반응형

+ Recent posts