http://twoseven.kr/class803/ansible/yaml_syntax.txt
inventory 등록 (ad-hoc = 커맨드)
** 커맨드로 하는 것은 ssh 기반으로 되기때문에 server에서는 sshd가 실행이 된 상태여야한다.
테스트 등록 (권장하지 않음 - 되는것을 확인하기 위해 해보는것)
#cd /etc/ansible
#vim hosts -- inventory 가 참조하는 기본 파일경로
맨 아래에
node1.example.com
node2.example.com
node3.example.com
작성
$ ansible all -m ping
- ansible로 관리가 가능한지 확인 (SUCCESS)
[devops@control ansible]$ ansible all -m ping
node2.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
node1.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
node3.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
실제 등록
$pwd
/home/devops
$mkdir test
$cd test
$vim inventory
node3
[webservers]
node1
node2
#[dbservers] -- 안쓸거라 주석처리
#node4
#node5
$vim ansible.cfg
[defaults]
inventory = ./inventory
확인
$ ansible all -m ping
> ansible all (모든장비) -m (모듈) ping (모듈이름)
>> ansible node1 -m ping 하면 node1에만 핑테스트를 함.
- ansible로 관리가 가능한지 확인 (SUCCESS)
[devops@control ansible]$ ansible all -m ping
node2.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
node1.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
node3.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
$ ansible all -m command -a 'hostname'
> -a (argument - 변수) 'hostname' (명령)
* command 모듈은 멱등성이 없기 때문에 안쓰는것을 권장함. (하지만 hostname을 보여주는 모듈이 없어서 쓴거임)
** -m command는 디폴트 값이기 때문에 빼도 된다.
[devops@control test]$ ansible all -m command -a 'hostname'
node3 | CHANGED | rc=0 >>
node3.example.com
node1 | CHANGED | rc=0 >>
node1.example.com
node2 | CHANGED | rc=0 >>
node2.example.com
[devops@control test]$ ansible all -m command -a 'whoami'
node3 | CHANGED | rc=0 >>
devops
node1 | CHANGED | rc=0 >>
devops
node2 | CHANGED | rc=0 >>
devops
하지만 useradd는 안된다.
[devops@control test]$ ansible all -a 'useradd auser1'
node3 | FAILED | rc=2 >>
[Errno 2] No such file or directory
node1 | FAILED | rc=2 >>
[Errno 2] No such file or directory
node2 | FAILED | rc=2 >>
[Errno 2] No such file or directory
왜냐면 devops 계정으로 명령어를 치는 것이기 때문에.
> -a 'sudo useradd auser1' sudo로 권한을 주면 된다.
> 혹은 -a 'useradd auser1' --become --become-method=sudo (--become = 권한 상승) - 하지만 이건 너무 귀찮음
그래서 ansible.cfg에 추가로 설정을 등록해주면 됨.
[defaults]
inventory = ./inventory
remote_user = devops
#ask_pass = false -디폴트값 비밀번호 물어볼 것이냐
[privilege_escalation]
become = true
#become_method = sudo -디폴트
#become_user = root - 디폴트
become_ask_pass = false
등록 해주고 나면 useradd 실행이 된다.
[devops@control test]$ ansible all -a 'useradd auser1'
node2 | CHANGED | rc=0 >>
node1 | CHANGED | rc=0 >>
node3 | CHANGED | rc=0 >>
** 설정파일을 참조하는 순서는
현재 디렉토리의 ansible.cfg 를 가장 먼저 참조
두번째는 $HOME/.ansible.cfg
마지막으로 /etc/ansible/ansible.cfg 참조
* user 모듈을 통한 user 생성
[devops@control test]$ ansible webservers -m user -a 'name=auser5 shell=/bin/csh state=present'
node2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 1003,
"home": "/home/auser5",
"name": "auser5",
"shell": "/bin/csh",
"state": "present",
"system": false,
"uid": 1003
}
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 1004,
"home": "/home/auser5",
"name": "auser5",
"shell": "/bin/csh",
"state": "present",
"system": false,
"uid": 1004
}
============================================================================================
7번째 8번째 타임
yaml 문서 작성
vim makeuser.yaml
--- # yaml 파일의 시작, 생략가능
- name: test playbook
hosts: all
tasks: # task의 시작은 항상 리스트로 시작한다.
- name: present xuser1
user:
name: xuser1
comment: jang nara
uid: 2000
group: wheel
state: present
- name: present xuser2
user:
name: xuser2
state: present
...
set cursorcolumn - 줄 간격 보기
ansible-playbook makeuser.yaml
[devops@control test]$ ansible-playbook makeuser.yaml
PLAY [test playbook] ************************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [node2]
ok: [node3]
ok: [node1]
TASK [present xuser1] ***********************************************************************************
ok: [node3]
ok: [node1]
ok: [node2]
TASK [present xuser2] ***********************************************************************************
ok: [node3]
ok: [node2]
ok: [node1]
PLAY RECAP **********************************************************************************************
node1 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
'Ansible' 카테고리의 다른 글
| ansible 에러 (0) | 2024.02.14 |
|---|---|
| ansible 기본 환경설정 (2) | 2024.02.13 |
| ansible 2일차 (2) | 2024.02.07 |
| ansible 사전준비 2 (1) | 2024.02.06 |
| Ansible 준비 (2) | 2024.02.06 |