https://docs.ansible.com/ansible/2.9/user_guide/intro_adhoc.html
# AD-HOC 공식 문서이다.
https://holywat2r.tistory.com/161
# 이전 게시물에서 ansible 구성파일까지 설정을 해 보았다.
# 이번 게시물에서는 AD-HOC을 알아보자
AD-HOC 명령어란?
- 원래 ansible이 자동화 도구이기 때문에 원하는 작업을 다양하게 설정할 수 있다. 필요에 따라서는 여러 작업을 동시에 해야할텐데, 하나의 작업을 간단하게 실행해야 할 경우가 있을 것이다.
- 하나의 작업을 실행하려고 할 때 플레이북이라는 것을 작성하려고 하면 더욱 번거로워질 수 있으니 명령어 방식을 사용한다.
- 이 명령어 방식에는 모듈이름을 직접 지정해서 모듈의 사용법에 맞게 필요한 값들을 추가 입력을 해야한다. (-a)
- 모듈에 따라서 사용될 argument가 없다면 -a 옵션을 생략할 수 있지만 거의 대부분 필요로 한다.
일반적인 사용법
ansible [pattern] -m [module] -a "[module options]"
ping 모듈 사용해보기
- 핑 모듈은 argument가 따로 필요 없고 인터넷 연결 상태확인을 할 때 쓰는 ping과 거의 비슷하다.
- 즉 상대방과 연결이 잘 되어있는지를 확인하기 위한 모듈이다.
ansible -m ping all
- 위의 명령어를 사용하기 전에 구성 파일을 설정한다.
mkdir test_inventory
cd test_inventory
vi inventory
host1
10.0.2.22
host3.gurm.example.com
localhost
host4
nohosts
vi ansible.cfg
[defaults]
inventory = test_inventory/inventory
- 구성 파일 설정 후 핑 모듈을 사용해보자
ansible -m ping all
# 위와 같은 오류가 뜬다. 왜 그럴까? 권한이 없기 때문이라고 한다.
- 이 때 ansible.cfg 구성 파일을 수정해준다
[defaults]
inventory = test_inventory/inventory
remote_user = study
# 권한을 부여하니 로컬 호스트와 host1번이 연결이 되었다. 나머지 호스트 2 3 4는 꺼놓았기 때문에 오류
모듈 사용법
- 모듈은 ansible 명령어를 치게되면 ansible-doc 파일이 보이는데, man 같은 느낌이다.
man ansible-doc
# ansible-doc의 매뉴얼이다. ansible-doc 은 ansible 모듈의 document를 열어준다고 생각하자.
- ansible-doc을 이용하여 사용할 수 있는 모듈들을 검색해보자
# 무수히 많다.
- 파이프라인 grep 명령어를 사용해서 찾고자 하는 모듈을 찾아보자
ansible-doc -l | grep file # 파일관리와 관련된 모듈을 보고싶다.
# 그래도 진짜 많다.
- 핑 모듈의 doc를 검색해보자
ansible-doc ping
# 핑 모듈에 관한 설명이 나온다.
# 하단으로 내려가다보면 모듈 사용 예시가 나온다. 앤서블은 모듈 설명, 옵션, argument 설명후 예시와 예제로 끝난다.
모듈 사용 예시 1 Command
- 로컬 호스트를 대상으로 command 명령어를 실행해보자
ansible -m command -a id localhost
- 이후 ssh를 통해 id라는 명령어를 사용
ssh study@localhost id
# 출력값이 같음을 알 수 있다.
모듈 사용 예시 Copy 1
- ansible-doc copy를 통해 메뉴얼을 살펴보자
ansible-doc copy
# 모듈 사용시 argument가 많으면 불편해진다
- 복사할 파일을 생성해본다
echo "test copy modules" > fileA
ssh study@host1
# host1 에는 아무런 파일이 없음을 확인할 수 있다.
- 이후 host1 에 대하여 카피 모듈을 사용한다
ansible host1 -m compy -a "src=fileA dest=/home/study"
# CHANGED 라고 뜨며 변경사항이 있음을 알려준다
- 한번 더 수행해보자
ansible host1 -m compy -a "src=fileA dest=/home/study"
# SUCCESS라고 뜨며 controller 노드의 fileA가 host1에 복사됨을 알 수 있다.
# 물론 CHANGED라고 떠도 파일은 복사가 되어있다.
모듈 사용 예시 Copy 2
- 복사한 파일의 권한을 수정해보자
ansible host1 -m file -a "owner =root mode=0777 path=/home/study/fileA"
# 오류가 뜬다. 이는 owner 때문이다. 소유권을 바꾸려면 일반사용자로는 안되니 권한 상승이 필요하다.
- owner 제거
ansible host1 -m file -a "mode=0777 path=/home/study/fileA"
# owner 제거시 잘 작동됨을 알 수 있다.
- 만약 owner를 root로 설정하고 싶다면 아래의 명령어를 실행한다.
ansible -b host1 -m file -a "owner=root mode=0777 path/home/study/fileA"
모듈 사용 예시 Copy 3
- 파일 삭제를 진행해보겠다
ansible host1 -m file -a "path=/home/study/fileA state=absent"
# 파일을 지웠다. 파일 소유권이 아닌 파일의 디렉토리 권한에 따라 삭제 추가가 가능하다. 그렇기에 -b 옵션이 필요가 없이 삭제가 되었다.
'DevOps > Ansible' 카테고리의 다른 글
[Ansible] Ansible 실습 - AD-HOC, Playbook예제 풀어보기 (0) | 2021.09.10 |
---|---|
[Ansible] Ansible 실습 - Playbook (0) | 2021.09.09 |
[Ansible] Ansible 실습 - 구성파일 설정 (0) | 2021.09.07 |
[Ansible] Ansible 실습 - 시스템 구성 및 인벤토리 설정 (0) | 2021.09.07 |
[Ansible] Ansible 정의 (0) | 2021.09.07 |