Ansible

Ansible 인벤토리 생성 및 모듈 활용

Joon0464 2021. 7. 11. 16:38

1. 인벤토리 생성

# vi /etc/ansible/hosts

[all]
172.16.0.200
172.16.0.201
172.16.0.202
172.16.0.203

[web]
172.16.0.201
172.16.0.202

[db]
172.16.0.203

해당 내용을 hosts파일 맨 아래에 추가해준다.

해당 인벤토리 파일은 ansible의 기본 인벤토리 파일이다. 인벤토리 파일을 따로 생성하고 활용하는 방법은 내용 마지막에 적도록 하겠다.

다음과 같이 4대의 서버에서 모두 Success가 출력되면 정상적으로 설정이 완료된 것이다.

2. 모듈 활용

모듈이란?

  • CLI나 플레이북 작업에서 사용 할 수 있는 별도의 코드 단위

모듈의 특징

  • 멱등성을 보장해준다.
  • 중복 실행될 여지가 차단된다.
  • 가독성이 좋다.
  • 배포전에 테스트가 가능하다.

Shell 모듈

쉘을 이용한 작업에 사용되는 모듈이다. -a로 쉘에서 동작시킬 명령어를 입력할 수 있다.

'위 명령어를 입력하면 inventory에서 지정한 [all] 그룹에게 shell 모듈로 ls 명령어를 실행하게 된다.

마찬 가지로 all 그룹에게 shell 모듈로 whoami 명령어를 동작시킨 모습이다.

 

User 모듈

지정한 서버에 user를 생성하는 모듈이다.

# ansible all -m user -a 'name=a'

위 명령어를 입력하면 all 서버들에게 user 모듈을 사용하여 a라는 이름의 사용자 계정을 생성한다.

shell 모듈을 사용하여 계정 생성 확인

a 계정이 4대의 서버 모두에 생성된 것을 볼 수 있다.

ansible all -m user -a "name=a update_password=always password={{ 'P@ssw0rd' | password_hash('sha512') }}"

위 명령어는 user 모듈을 사용하여 패스워드를 변경하는 방법이다.

ansible all -m shell -a "echo "P@ssw0rd" | passwd --stdin b

다음과 같이 shell 명령어를 이용하여 비밀번호를 변경할 수도 있다.

# ansible all -m user -a "name=a state=absent"

state=absent를 입력하면 지정한 사용자를 제거할 수 있다.

 

yum 모듈

지정한 서버에 yum을 사용하여 패키지 설치 및 삭제하는 모듈이다.

# ansible web -m yum -a "name=httpd state=latest"

yum 모듈을 사용하여 httpd 패키지를 설치하는 명령어이다.

다음과 같이 shell 모듈을 사용하여 rpm -qa로 패키지가 설치된 것을 확인할 수 있다.

 

COPY 모듈

파일을 원하는 서버에 복사하는 모듈이다.

# ansible web -m copy -a "src=index.html dest=/var/www/html/index.html"

src는 복사할 원본 파일의 위치를 지정하고 dest는 파일이 복사될 경로를 지정한다.

 

Service 모듈

데몬을 동작시키기위한 systemctl 명령어를 사용하기 위한 모듈이다.

# ansible web -m service -a "name=httpd state=started"

마지막으로 shell 모듈을 사용하여 웹서비스를 위한 80번 포트를 inventory의 web에 소속된 서버들에게 열어준다.
마지막으로 방화벽을 재시작해준다.

172.16.0.201 서버와 172.16.0.202의 웹 서비스가 정상적으로 동작하는 것을 볼 수 있다.

 

File 모듈

파일에 대한 상세정보 설정, 확인 및 삭제가 가능하다.

ansible web -m file -a "name=/var/www/html/index.html state=absent"

 

3. 인벤토리 별도 생성 및 활용

# vi inven.list

[ai]
anm
ann[1:3]

[webi]
ann[1:2]

[dbi]
ann3

인벤토리를 원하는 경로에 원하는 이름으로 지정하여 생성할 수 있다.
ann[1:3]은 ann1, ann2, ann3를 묶어서 작성하는 방법이다.

위 예시처럼 모듈에서 인벤토리를 -i옵션으로 지정하여 사용할 수 있다.