본문 바로가기

DevOps/Ansible

[Ansible] Ansible 실습 - AD-HOC와 모듈 사용법

https://docs.ansible.com/ansible/2.9/user_guide/intro_adhoc.html

 

Introduction to ad-hoc commands — Ansible Documentation

An Ansible ad-hoc command uses the /usr/bin/ansible command-line tool to automate a single task on one or more managed nodes. Ad-hoc commands are quick and easy, but they are not reusable. So why learn about ad-hoc commands first? Ad-hoc commands demonstra

docs.ansible.com

# AD-HOC 공식 문서이다.

https://holywat2r.tistory.com/161

 

[Linux] Ansible 실습 - 구성파일 설정

https://holywat2r.tistory.com/160 [Linux] Ansible 실습 - 시스템 구성 및 인벤토리 설정 https://holywat2r.tistory.com/159 [Linux] Ansible 정의 앞서 다루었던 IaC의 종류중 하나인 Ansible을 다뤄보겠다. h..

holywat2r.tistory.com

# 이전 게시물에서 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 옵션이 필요가 없이 삭제가 되었다.