[Ansible] #3.2 Ansible 기본 - 구성 파일

[Ansible] #3.2 Ansible 기본 - 구성 파일

Ansible 의 기본 구성요소인 구성 파일 에 대해서 알아보자.


1. 구성 파일 개념


Ansible 구성 파일Ansible의 설정 파일이라고 할 수 있으며, 작동 방식을 구성하는 파일이다.

Ansible 구성 파일 에는 인벤토리 파일의 위치, 관리 노드에 연결하는 방법, 연결 한 후 작동 방법 등 무수히 많은 구성을 지정할 수 있다.

기본 Ansible 구성 파일 의 위치는 /etc/ansible/ansible.cfg 파일이며, 변형된 INI 형식을 사용하고, yaml 로는 만들 수 없다.

처음에는 모두 주석처리 되어있으며, 인벤토리 파일처럼 빈 파일이나 다름 없고, 모든 사용자에게 적용되는 파일이기 때문에 별도로 파일을 만들어서 구성 파일 로 사용한다.

1

ansible --version

ansible --version 명령어로 설치되어 있는 Ansible 의 버전과 정보들을 볼 수 있는데, config file 변수로 /etc/ansible/ansible.cfg구성 파일 로 지정되어 있는 것을 볼 수 있다.

2. 구성 파일 우선순위


구성 파일 에는 우선순위가 있으며, 그 순위는 다음과 같다.

  1. ANSIBLE_CONFIG 환경 변수
  2. 현재 디렉토리의 ansible.cfg
  3. 홈 디렉토리의 ~/.ansible.cfg
  4. /etc/ansible/ansible.cfg

지금은 1, 2, 3 번의 구성 파일 이 모두 없기 떄문에, 4번이 적용되고 있는 상황이다.

이 파일이 ansible -—version 으로 출력된 구성파일이다.

우선순위 실습


먼저 홈 디렉토리에 .ansible.cfg 파일을 만들어보자.

touch .ansible.cfg
ansible --version

2

~/.ansible.cfg/etc/ansible/ansible.cfg 파일보다 우선순위가 높기 때문에, --version 으로 조회시 해당 파일이 구성 파일 로 나오게 된다.

이번에는 test 디렉토리를 생성하고, 그 안에 ansible.cfg 파일을 만들어보자.

mkdir test
cd test
ansible --version
touch ansible.cfg
ansible --version

3

현재 디렉토리 안에 있는 ansible.cfg~/.ansible.cfg 보다 우선순위가 높기 때문에, config file 이 갱신되었다.

물론 이는 해당 디렉토리에서만 한정되는 것임을 명심하자.

cd ..
ansible --version

4

test 디렉토리를 벗어나면, 다시 ~/.ansible.cfg 가 출력된다.

이제 마지막으로 제일 우선순위가 높은 ANSIBLE_CONFIG 에 변수를 할당해서 구성 파일 을 지정해보자.
/tmp 디렉토리로 이동해서 ans.cfg 파일을 만든 뒤, ANSIBLE_CONFIG 변수를 지정하자.

cd /tmp
ansible --version
touch ans.cfg
export ANSIBLE_CONFIG=/tmp/ans.cfg
echo $ANSIBLE_CONFIG
ansible --version

5

구성 파일 지정이 잘 갱신되었다.
이제 test 디렉토리로 이동한 뒤 버전을 조회해도, 환경변수로 인한 구성 파일 의 우선도가 제일 높기 때문에 ans.cfg 파일이 그대로 출력된다.

ans.cfg 파일은 임시로 만든 것이니까, 다음 명령어로 변수 값 지정을 해제하자.

unset ANSIBLE_CONFIG

일반적으로는 1. ANSIBLE_CONFIG4. /etc/ansible/ansible.cfg 보다는 2. 현재 디렉토리의 ansible.cfg , 3. ~/.ansible.cfg 를 사용하는 방법을 많이 사용한다.

3. Ansible 작동 방식 제어 우선순위 (작성중)


지금은 안하고 나중에 보기로.

4. 구성 파일 설정


Ansible 구성 파일 에는 [section] 처럼 대괄호로 묶여진 여러 섹션(분류)이 있다.

각 섹션에는 키=값 으로 설정된 설정이 포함된다.

INI 형식으로 구성된다.

다음은 일반적으로 많이 구성되는 구성 파일 이다.

[defaults]
inventory = ./inventory.ini
remote_user = vagrant
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
  • [defaults] 섹션
    • inventory : 인벤토리 파일의 위치 (기본 : /etc/ansible/ansible.cfg)
    • remote_user : SSH 인증하기 위한 사용자 (기본 : 현재 사용자)
    • ask_pass : SSH 인증하기 위한 패스워드 요청/입력 여부 (기본 : false)
  • [privilege_escalation] 섹션
    • become : 권한 상승 여부 (기본 : false)
    • become_method : 권한 상승 방법 (기본 : sudo)
    • become_user : 권한 상승할 사용자 (기본 : root)
    • become_ask_pass : 권한 상승 패스워드 요청/입력 여부 (기본 : false)

보통 [defaults] 섹션과 [privilege_escalation] 섹션을 많이 사용한다.

[defaults] 섹션에서 inventory 변수로 기본 인벤토리 파일을 지정할 수 있다.

원래는 -i 를 사용해서 위치를 잡아줬지만, 구성 파일 에서 이렇게 지정해줄 경우 -i 를 안써도 된다.

remote_userssh 접속 유저 명이다.

vagrant 는 기본 사용자명으로, AWS Linux2 EC2 인스턴스로 따지면 ec2-user , Ubuntuubuntu 이런 식이다.
더 많은 운영체제별 사용자명은 여기 참고.

주의 !
vagrant 는 기본 일반 사용자일뿐, 관리자 계정이 아니다.

Ansible 에서 패키지를 설치하고, 서비스를 stop 등을 하기 위해서는 관리자 계정이 필요하며, 관리자 권한이 필요한 모듈도 있다.

[privilege_escalation] (권한 상승) 은 일반 사용자가 상위 사용자 권한을 사용할 때 쓰이는 것이다.
주로 sudo 명령어를 통해서 많이 사용한다.

defaultsprivilege_escalation 모두 인증하기 위해서 필요하다.

실습 구성 파일 설정


홈 디렉토리에서 .ansible.cfg 파일을 수정하자.

다음과 같이 작성하면 된다.

[defaults]
inventory = /home/vagrant/hosts.ini
remote_user = vagrant
ask_pass = false

[privilege_escalation]
become = false
become_user = root
become_method = sudo
become_ask_pass = false

기본 인벤토리 파일을 /home/vagrant/hosts.ini 로 지정했다.

실습 환경을 점검해보자.

6

자 이제 아래 명령어를 실행해보자.

ansible-inventory --graph

7

이전 인벤토리 글에서 ansible-inventory --graph 로 따로 -i 옵션을 사용하지 않았을 때 위 사진과 같은 결과가 나왔다.
ansible 명령어는 기본적으로 구성 파일 을 참조한다.
즉, 해당 결과는 내가 이미 구성 파일 에서 inventory 변수를 /home/vagrant/hosts.ini 로 설정해 두었기 때문에, 기본 인벤토리 파일로 지정되어 나온 것이었다 !

정리하자면, 어떤 특정 대상의 호스트가 있으면, 그 호스트에 연결하기 위한 인벤토리 파일이 필요하고, 그 인벤토리 파일에 접근하기 위해서 구성 파일 이 필요하다.

5. 구성 파일 및 설정 확인


  • 현재 적용된 구성 파일의 내용 확인
    ansible-config view
    
  • 현재 적용된 모든 구성 정보 확인
    ansible-config dump
    
  • 설정 가능한 모든 설정 항목
    ansible-config list
    

10

ansible-config viewcat 으로 구성 파일의 내용을 출력하는 것과 동일하다.

8

위 그림은 ansible-config dump 의 결과이다.

한 가지 상식으로, 초록색으로 되어 있는 것들은 모두 기본값, 즉 변경사항이 없는 값들이다.
그리고 노란색은, 변경사항이 있는 값을 의미한다.
마지막으로 그림에는 없지만 빨간색은 오류를 의미한다.

9

위 그림은 ansible-config list 의 결과이다.

설정 가능한 모든 설정 항목들을 보여주는데, 현재는 ANSIBLE_INVENTORY 를 검색해서 DEFAULT_HOST_LIST , DEFAULT 섹션의 HOST_LIST 설정 항목을 보고 있는 것이다.

  • default : 기본 값을 보여준다.
  • description : 설명이다.
  • env : 쉘의 환경변수.
    • name : 환경변수로 설정할 때 지정하는 이름을 나타낸다.
  • ini : ini 파일로 설정할 때
    • key : ini 파일로 설정할 때 사용하는 키
    • section : 위치해야하는 섹션

등등등 …

여기서 우리는 구성 파일을 INI 형식으로 작성한다는것을 배웠다.
ini 항목을 보면, 우리가 이전에 작성한 것과 동일한 사용법이 적혀있는 것을 확인할 수 있다.

6. 실습 파일 제거


앞으로 쭉 사용해야 할 파일을 제외하고, 나머지는 삭제하자.

우선 홈 디렉토리의 test - ansible.cfg 를 삭제해야한다. 귀찮으니까 그냥 test 디렉토리를 삭제해서 한 번에 지우자.

rm -r test

/tmp - ans.cfg 파일도 지우자.

cd /tmp
rm ans.cfg

© 2022. All rights reserved.