사전 준비 사항

  1. python 2.6 또는 2.7과 package manager 인 pip 가 설치되어 있어야 한다.

    1. RHEL/CentOS 에 파이썬 패키지 매니저(python package manager) python-pip 설치하기 참고

  2. git 이 설치되어 있어야 한다.
    1. RHEL/CentOS 에 git 2 설치하기
  3. ansible 1.3 이상부터는 가능하면 OpenSSH 의 python 구현물인 paramiko 를 사용하지 않고 pure OpenSSH 를 사용한다. 이 경우 OpenSSH 가 ControlPersist 를 지원해야 하지만  RHEL/CentOS 6 에 탑재된 openssh 는 버전이 낮으므로 계속 paramiko 를 사용해야 한다. (RHEL 7 부터는 문제 없음)

Control Machine 설치

앤서블은 puppet 와는 달리 별도의 agent 설치없이 SSH 로 연결하여 작업하며 앤서블을 구동하여 원격지에 접속하는 서버를 Control Machine 이라고 부른다.

소스에서 설치

  1. python 모듈 설치(root 로 실행)

    # pip install paramiko PyYAML jinja2 httplib2
    CODE
  2. git 으로 ansible clone

    $ git clone git://github.com/ansible/ansible.git
    $ cd ./ansible
    CODE
  3. 안정 버전 체크아웃

    $ git checkout tags/v2.1.2.0-1
    CODE
  4. ansible 설정 스크립트를 쉘에서 구동하고 쉘 초기화 파일(~/.bash_profile, ~/.profile 등)에 포함

    source ${HOME}/ansible/hacking/env-setup
    CODE

pip로 설치

의존성있는 패키지까지 자동으로 설치해주므로 개인적으로 권장하는 설치 방법. (root 권한 필요)

pip install ansible
CODE

yum 으로 설치

먼저 EPEL repository 가 설치되어 있어야 한다.

  1. yum 으로 설치

    yum install ansible -y
    CODE

Brew 로 설치

brew install ansible
CODE

apt-get 으로 설치

sudo apt-get install ansible
CODE

Inventory 파일 생성

ansible 이 관리하는 서버의 정보를 담은 파일을 Inventory 파일이라고 하며 소스로 설치했을 경우 examples/hosts 에 위치하고 있다.

인벤토리는 세 가지 방법으로 지정할 수 있다.

  1. /etc/ansible/hosts(기본 설정)

    mkdir /etc/ansible/
    echo "127.0.0.1" > /etc/ansible/hosts
    CODE
  2. ANSIBLE_INVENTORY 환경 변수에 설정

    echo "127.0.0.1" > ~/.ansible/hosts
    
    export ANSIBLE_INVENTORY=~/.ansible/hosts
    CODE
  3. ansible 실행시 -i 옵션과 파일 경로 지정

    ansible all -m ping  -k -i ~/my_ansible_hosts
    CODE

우선 순위는 3, 2,1 순이으로 1, 2, 3 이 다 지정되어 있으면 3 번이 적용되게 되며 1번은 루트 권한이 필요하므로 2번으로 지정하는 것을 권장한다.

Config 파일 생성

ansible 동작을 제어하는 설정 파일은 /etc/ansible/ansible.cfg  이며  ANSIBLE_CONFIG 환경 변수를 통해 설정할 수 있다.

export ANSIBLE_CONFIG=~/.ansible/ansible.cfg 
CODE

정상 설정 여부는 다음과 같이 --version 을 주고 실행하면 된다.

$ ansible --version  

ansible 2.1.2.0
  config file = /home/ansible/.ansible/ansible.cfg
  configured module search path = Default w/o overrides
CODE

설치 확인

  1. ansible ping 모듈 실행. 

    ansible all -m ping  -k
    CODE

    다음과 같은 결과가 출력됨

    SSH password:
    127.0.0.1 | success >> {
    "changed": false,
    "ping": "pong"
    }

문제 해결

127.0.0.1 | FAILED => No authentication methods available

 -k, --ask-pass 옵션을 추가해서 실행

127.0.0.1 | FAILED => paramiko is not installed

  1. pip list paramiko 로 설치 여부 확인
  2. pip 로 설치했는데 발생한다면 yum 으로 패키지 재설치

    yum install python-paramiko
    CODE

Ref