ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Ansible: 디렉토리 구조와 커맨드 정리(feat. Vagrant)
    Ansible 2021. 9. 18. 19:51

     

    이번 포스팅은 ansible을 설치하고 inventory와 ansible.cfg 파일을 구성합니다.

     

    마지막에는 ansible을 이용해 간단한 커맨드를 사용해 봅니다. 

     

    최종 디렉토리 구조는 다음과 같습니다. 

     

    < 최종 디렉토리 구조 >

    seung@seung-15Z990-VR5DK:~/vagrant/testserver$ tree .
    .
    ├── ansible.cfg
    ├── hosts
    ├── ubuntu-bionic-18.04-cloudimg-console.log
    └── Vagrantfile

     

     

     

    다음 환경에서 실습합니다.  

     

    - 로컬 = ubuntu 18.04 (ansible core로 사용합니다)

    - virtual box 사용 (ansible node로 사용합니다)

    - ubuntu/bionic64 이미지 사용

     

     

     

    1. Ansible 설치하기 

     

    앤서블을 pip3 패키지관리자를 이용해 설치합니다.

     

    sudo pip3 install ansible

     

     

     

    absible로 docker와 ec2를 관리한다면 다음 모듈을 설치합니다.  

    pip3 install docker-py boto

     

     

     

    2. test server 만들기 

     

    vagrant를 이용해서 virtual box에 vm을 하나 생성합니다. 

    이때 운영체제 이미지는 ubuntu/bionic64를 사용합니다. 

     

    mkdir testserver
    cd testserver 
    vagrant init ubuntu/bionic64
    vagrant up

     

     

     

    3. test server에 접속하기 

     

    /testserver에서 vagrant ssh로 접속합니다.  

    vagrant ssh

     

     

     

    4. ssh로 접근할 수 있는지 확인해보자. 

     

    ssh로도 접근해봅니다. 

    ssh로 접근하기 전 vagrant ssh-config를 통해 ssh 접속을 위해 필요한 정보를 알아냅니다. 

     

    seung@seung-15Z990-VR5DK:~/vagrant/testserver$ vagrant ssh-config
    Host default
      HostName 127.0.0.1
      User vagrant
      Port 2222
      UserKnownHostsFile /dev/null
      StrictHostKeyChecking no
      PasswordAuthentication no
      IdentityFile /home/seung/vagrant/testserver/.vagrant/machines/default/virtualbox/private_key
      IdentitiesOnly yes
      LogLevel FATAL

     

     

    ssh-config정보를 이용해서 ssh로 접속이 되는지 확인합니다. 

     

    ssh vagrant@127.0.0.1 -p 2222 -i /home/seung/vagrant/testserver/.vagrant/machines/default/virtualbox/private_key

     

     

     

    5. 인벤토리(hosts) 설정하기 

     

    ansible Core에서 생성된 vm을 이름으로 찾을 수 있도록 /testserver에 hosts라는 파일을 생성합니다. 

    (네임서버를 설정할때 /etc/hosts에 서버 이름을 적는 것과 같습니다)

     

    ansible이 각 서버를 인식할 수 있도록 hosts라는 inventory 파일을 생성하고

    vagrant로 생성한 vm에 대한 정보를 적습니다. 

     

    < /testserver/hosts >

    testserver ansible_host=127.0.0.1 ansible_port=2222 ansible_user=vagrant ansible_private_key_file=.vagrant/machines/default/virtualbox/private_key ansible_python_interpreter=/usr/bin/python3

     

     

    hosts 인벤토리 안에 있는 testserver에 연결되었는지 확인하기 위해 ping 모듈을 사용합니다. 

     

    ansible testserver -i hosts -m ping

     

     

    < 참고 >  

     

    만약 성공하지 못했다면 -vvvv옵션을 통해 에러 원인을 파악합니다. 

    ansible testserver -i hosts -m ping -vvvv

     

     

    지금까지의 디렉토리 구조 

    seung@seung-15Z990-VR5DK:~/vagrant/testserver$ tree .
    .
    ├── hosts
    ├── ubuntu-bionic-18.04-cloudimg-console.log
    └── Vagrantfile

     

     

     

    6. ansible.cfg 파일 설정하기 

     

    기존에는 hosts 파일에 모든 내용을 저장했는데 ansible.cfg를 따로 두어 hosts에 대한 변수를 따로 저장할 수 있습니다. 

    ansible.cfg에는 인벤토리 파일의 경로, SSH 사용자, SSH 프라이빗 키의 경로를 따로 적어줄 수 있습니다. 

     

    < /testserver/ansible.cfg >

    [defaults]
    inventory = hosts
    remote_user = vagrant
    private_key_file = .vagrant/machines/default/virtualbox/private_key
    host_key_checking = False

     

     

    hosts 파일도 수정합니다. 

     

    </testserver/hosts>

    testserver ansible_host=127.0.0.1 ansible_port=2222 ansible_python_interpreter=/usr/bin/python3

     

     

    최종 디렉토리 구조가 완성되었습니다.  

     

    seung@seung-15Z990-VR5DK:~/vagrant/testserver$ tree
    .
    ├── ansible.cfg
    ├── hosts
    ├── ubuntu-bionic-18.04-cloudimg-console.log
    └── Vagrantfile
    
    0 directories, 4 files

     

     

    기존에는 hosts 인벤토리를 사용해서 testserver를 호출했는데 

    ansible.cfg 파일을 생성했으므로 인벤토리 명시 없이 ansible을 호출할 수 있습니다. 

     

    ansible testserver -m ping

     

     

     

    7. 커맨드 사용하기 

     

    다음과 같은 커맨드 모듈을 사용해서 command를 사용할 수 있습니다.  

    command를 사용할때는 -a 옵션과 함께 사용합니다.   

     

    ansible testserver -m command -a uptime

     

     

    command는 자주 사용되는 모듈이기 때문에 생략해서 사용해도 됩니다. 

     

    ansible testserver -a uptime

     

     

    root 권한이 필요할때는 -b 옵션을 주면 root권한으로 실행합니다. 

     

    ansible testserver -b -a "tail /var/log/syslog"

     

     

    이번에는 apt 모듈을 이용해서 nginx 설치해봅니다.  

     

    ansible testserver -m apt -a name=nginx

     

    반응형

    댓글

Designed by Tistory.