[Ansible] #3.2 Ansible 기본 - 구성 파일
Ansible
의 기본 구성요소인 구성 파일
에 대해서 알아보자.
1. 구성 파일 개념
Ansible 구성 파일
은 Ansible
의 설정 파일이라고 할 수 있으며, 작동 방식을 구성하는 파일이다.
Ansible 구성 파일
에는 인벤토리
파일의 위치, 관리 노드
에 연결하는 방법, 연결 한 후 작동 방법 등 무수히 많은 구성을 지정할 수 있다.
기본 Ansible 구성 파일
의 위치는 /etc/ansible/ansible.cfg
파일이며, 변형된 INI
형식을 사용하고, yaml
로는 만들 수 없다.
처음에는 모두 주석처리 되어있으며, 인벤토리
파일처럼 빈 파일이나 다름 없고, 모든 사용자에게 적용되는 파일이기 때문에 별도로 파일을 만들어서 구성 파일
로 사용한다.
ansible --version
ansible --version
명령어로 설치되어 있는 Ansible
의 버전과 정보들을 볼 수 있는데, config file
변수로 /etc/ansible/ansible.cfg
가 구성 파일
로 지정되어 있는 것을 볼 수 있다.
2. 구성 파일 우선순위
구성 파일
에는 우선순위가 있으며, 그 순위는 다음과 같다.
ANSIBLE_CONFIG
환경 변수- 현재 디렉토리의
ansible.cfg
- 홈 디렉토리의
~/.ansible.cfg
/etc/ansible/ansible.cfg
지금은 1, 2, 3 번의 구성 파일
이 모두 없기 떄문에, 4번이 적용되고 있는 상황이다.
이 파일이 ansible -—version
으로 출력된 구성파일이다.
우선순위 실습
먼저 홈 디렉토리에 .ansible.cfg
파일을 만들어보자.
touch .ansible.cfg
ansible --version
~/.ansible.cfg
는 /etc/ansible/ansible.cfg
파일보다 우선순위가 높기 때문에, --version
으로 조회시 해당 파일이 구성 파일
로 나오게 된다.
이번에는 test
디렉토리를 생성하고, 그 안에 ansible.cfg
파일을 만들어보자.
mkdir test
cd test
ansible --version
touch ansible.cfg
ansible --version
현재 디렉토리 안에 있는 ansible.cfg
는 ~/.ansible.cfg
보다 우선순위가 높기 때문에, config file
이 갱신되었다.
물론 이는 해당 디렉토리에서만 한정되는 것임을 명심하자.
cd ..
ansible --version
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
구성 파일
지정이 잘 갱신되었다.
이제 test
디렉토리로 이동한 뒤 버전을 조회해도, 환경변수로 인한 구성 파일
의 우선도가 제일 높기 때문에 ans.cfg
파일이 그대로 출력된다.
ans.cfg
파일은 임시로 만든 것이니까, 다음 명령어로 변수 값 지정을 해제하자.
unset ANSIBLE_CONFIG
일반적으로는 1. ANSIBLE_CONFIG
나 4. /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_user
는 ssh
접속 유저 명이다.
vagrant
는 기본 사용자명으로, AWS Linux2 EC2
인스턴스로 따지면 ec2-user
, Ubuntu
는 ubuntu
이런 식이다.
더 많은 운영체제별 사용자명은 여기 참고.
주의 !
vagrant
는 기본 일반 사용자일뿐, 관리자 계정이 아니다.
Ansible
에서 패키지를 설치하고, 서비스를 stop 등을 하기 위해서는 관리자 계정이 필요하며, 관리자 권한이 필요한 모듈도 있다.
[privilege_escalation] (권한 상승)
은 일반 사용자가 상위 사용자 권한을 사용할 때 쓰이는 것이다.
주로 sudo
명령어를 통해서 많이 사용한다.
defaults
와 privilege_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
로 지정했다.
실습 환경을 점검해보자.
자 이제 아래 명령어를 실행해보자.
ansible-inventory --graph
이전 인벤토리 글에서 ansible-inventory --graph
로 따로 -i
옵션을 사용하지 않았을 때 위 사진과 같은 결과가 나왔다.
ansible
명령어는 기본적으로 구성 파일
을 참조한다.
즉, 해당 결과는 내가 이미 구성 파일
에서 inventory
변수를 /home/vagrant/hosts.ini
로 설정해 두었기 때문에, 기본 인벤토리
파일로 지정되어 나온 것이었다 !
정리하자면, 어떤 특정 대상의 호스트가 있으면, 그 호스트에 연결하기 위한 인벤토리
파일이 필요하고, 그 인벤토리
파일에 접근하기 위해서 구성 파일
이 필요하다.
5. 구성 파일 및 설정 확인
- 현재 적용된 구성 파일의 내용 확인
ansible-config view
- 현재 적용된 모든 구성 정보 확인
ansible-config dump
- 설정 가능한 모든 설정 항목
ansible-config list
ansible-config view
는 cat
으로 구성 파일의 내용을 출력하는 것과 동일하다.
위 그림은 ansible-config dump
의 결과이다.
한 가지 상식으로, 초록색으로 되어 있는 것들은 모두 기본값, 즉 변경사항이 없는 값들이다.
그리고 노란색은, 변경사항이 있는 값을 의미한다.
마지막으로 그림에는 없지만 빨간색은 오류를 의미한다.
위 그림은 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