[ansible] 설치 및 기본 사용법 (ssh-key 교환 포함)

반응형

ansible 설치

# yum -y install ansible

- 로컬(자기자신)서버 ping 테스트
# ansible localhost -m ping

 

ssh-key 교환

ssh key 교환을 통해 비밀번호 묻지 않고도 바로 접속가능한 상태로 만들기

# ssh-keygen
(엔터, 엔터, 엔터, 엔터!!)

# ssh-copy-id 원격지ID@원격지IP // 공개키 원격지로 전달

 

inventory(인벤토리) 작성 - 간단하게

우선 서버의 hosts 파일 수정부터 

# cat /etc/hosts
10.106.110.223 webserver1
10.106.110.224 webserver2

/etc/ansible 하위에 존재하는 hosts 파일을 인벤토리 파일이라고 부르며, 별도의 inventory 파일을 만들어서 사용하기도 함

# cat /etc/ansible/hosts
[web]
webserver1
webserver2

 

ansible 테스트 1 - 간단하게

ping test로 정상 동작 여부 확인

# ansible webserver1 -m ping
webserver1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

# ansible webserver2 -m ping
webserver2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

 

인벤토리 내 모든 서버에 명령 실행하고자 할 때는 all을 사용한다

# ansible all -m ping
webserver1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
webserver2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

 

ansible 테스트 2 - 간단하게

인벤토리 내 모든 서버에 파일 복사 명령을 실행하고자 할 때는 copy 모듈을 사용하며, -a라는 모든 인자값을 의미하는 플래그를 사용한다.

 

아래 예시는 관리 호스트 서버의 /home/test.txt 파일을 인벤토리 내 모든 호스트 서버의 /home 디렉토리 밑에 test.txt파일로 저장하는 방법이다.

# ansible all -m copy -a "src=/home/test.txt dest=/home/test.txt"
webserver1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true,  // 동일한 task가 수행되어 아무런 변경이 없을 때는 true가 아닌 false 값이 출력된다.
    "checksum": "80d765b3df6efce0b484aca8fb0da14d6c1c15d2", 
    "dest": "/home/test.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "4ef440e7901f1acf0d87891cd1c05291", 
    "mode": "0644", 
    "owner": "root", 
    "size": 34, 
    "src": "/root/.ansible/tmp/ansible-tmp-1674028338.52-27200-223585600184088/source", 
    "state": "file", 
    "uid": 0
}
webserver2 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true,  // 동일한 task가 수행되어 아무런 변경이 없을 때는 true가 아닌 false 값이 출력된다.
    "checksum": "80d765b3df6efce0b484aca8fb0da14d6c1c15d2", 
    "dest": "/home/test.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "4ef440e7901f1acf0d87891cd1c05291", 
    "mode": "0644", 
    "owner": "root", 
    "size": 34, 
    "src": "/root/.ansible/tmp/ansible-tmp-1674028338.51-27198-28772977035569/source", 
    "state": "file", 
    "uid": 0
}

 

호스트 서버에서 확인한 결과 파일이 정상적으로 복사된 걸 확인함

[webserver1]
# cat /home/test.txt
2023.01.18
ansible test text file

[webserver2]
# cat /home/test.txt
2023.01.18
ansible test text file

 

반응형

댓글

Designed by JB FACTORY