1교시
6장 후반부 - 네트워크 서버 부분은 넘어가지만, 432 페이지의 문자열 인덱싱/슬라이싱은 자동화에 있어서 필요한 부분이니 알아두고 넘어갈 것.
ansible.cfg가 있는 경로 ansible 기준으로 root다.
자주 작업할 내용에 대해 동적으로 정보를 수집하는 플레이북을 여러 개 만들어 놓으면, 매 작업마다 새로 만들 필요가 없다. 작업 시에 필요한 기능을 가진 플레이북을 불러오면 되는 것이다.
-> 재사용이 가능한 플레이북
- Handler : 작업을 도와주는 역할
1. 전 단계가 정상적으로 이루어졌을 경우에 동작
2. 변경 사항이 발생한 경우에만 동작
-> 더 효과적으로 동작하는 코드
교재의 코드(438 페이지)를 보면 handler를 추가했다.
-> 핸들러가 들어간 파일을 2번 실행해 보면, 2번째 실행에서는 RUNNING HANDLER가 동작하지 않는 것을 볼 수 있다.
-> 웹 페이지 받아오는 것 때문에 2번째 실행에서도 changed는 있다.
2교시
- 변수(var)
어떤 값을 바로 불러다 쓸 수는 없다. 값을 호출 시 변수에 넣고, 변수를 호출해서 사용해야 한다.
노드 쪽에서 받은 facts를 바로 사용하지 않고, 특정 변수에 넣어서 다음에 사용한다.
하나의 파일에서 같은 변수를 여러 번 선언할 때, 우선순위가 필요하다.
교재의 표(450 페이지)에는 나와있지 않지만, 가장 우선순위가 높은 것은 anp 명령어에서 -e 옵션으로 선언하는 변수다.
anp aaa.yml -e lnx_name=CentOS
-> 이렇게 실행해 버리면, aaa.yml 내에서 lnx_name을 선언하더라도 CentOS로 고정된다.
동일한 변수일지라도, 우선순위가 가장 높은 곳에 있는 변수를 삽입한다.
-> nginx 설치 실습에서, lnx_name을 지정하는 과정을
1. group_vars 디렉터리에 nodes라는 파일에 저장한다
2. 설치 진행
3. 모든 노드에 실행된다
----
1. nginx와 group_vars를 삭제한다
2. host_vars 디렉터리에 노드 2개의 주소를 이름으로 가진 파일을 만들고, lnx_name을 지정하는 과정을 저장한다.
3. 설치 진행
4. 해당 노드에만 실행된다.
/etc/ansible_hosts에 nodes라는 이름으로 주소들을 지정해 놓았는데, group_vars에 nodes라는 파일명으로 설정한 것과
host_vars에 특정 주소를 파일명으로 설정한 것인데, 당연히 후자가 우선순위가 더 높아야 한다.
-> group_vars와 host_vars가 모두 있을 경우 후자만 설치되어야 한다는 것.
-> 그런데 실습 중에는 모두 설치되었다.
-> 둘 다 적용되는 것인지, group_vars가 먼저 적용되는 것인지 모르겠다.
-> 물론 실행하는 플레이북 내에 vars로 선언하면 이게 가장 먼저 적용된다(play vars)
3~4교시
- Template
-> 일정한 형식을 가지고, 해당 형식에 맞게 동적으로 노드들에게 배포
실습에서의 j2는 진자2(jinja2) 확장자.
-> 웹 템플릿
-> 이 파일에 있는 idx와 nu 변수는 yml 파일에서 정의해 주었다.
매직 변수를 사용했다.
groups 값 중 nodes라는 그룹 사용
group.nodes의 개수(count)를 nu에 저장하고
group.nodes의 특정 노드에서 해당 노드의 inventory_hostname을 뽑아내고, 그 주소의 인덱스를 index()로 알아낸다.
그리고 그 인덱스 값에 +1을 해서 정수형으로 idx 변수에 저장한다.
- 템플릿의 응용
-> yml을 vim으로 작성 시, 색깔이 무조건적으로 구분되는 것은 아니더라.
5~6교시
4교시 내용 설명 + 강사님 회의 참석 문제로 자습
플레이북을 재사용 가능하도록 구성한다는 것은 무엇인가?
=-> 약속된(지정된) 구조/형태로 만들어 사용한다는 것이다.
우리는 /home/vagrant/ 에서 작업을 하고 있다.
여기에 CentOS.yml이나 플레이북 등을 만들어 사용하고 있는데, 이러면 구조적으로 좋지 않다. 작업량이 많아지면 너저분해질 것이다.
-> 약속된 구조 : Role을 구성한다.
1. defaults
-> 우선순위가 가장 낮은 변수인 디폴트 변수를 가진다.
2. files
-> 노드에 배포할 파일들이 위치한 디렉터리. 주로 노드마다 동적으로 변경할 필요가 없는 파일을 전달할 때 사용된다.
(웹 페이지, 환경 설정 파일 등)
3. handlers
-> 핸들러를 선언하는 곳
4. meta
-> 의존성이 있는 다른 롤을 선언할 때 사용 + @
5. tasks
-> 필수 항목. 플레이북에서 계속 사용되어 왔던 태스크들을 작성하는 곳.
6. templates
-> 템플릿(진자2) 파일이 위치하는 곳
7. vars
-> 변수들에 대한 정보를 모아두는 곳(우선순위 15)
- nginx with roles
(tree 패키지를 설치해 보기 편하게)
교재에서 제시된 파일들을 모두 작성하고, https://gist.github.com/sysnet4admin/에서 기본 설정 파일을 받아온다.
anp로 실행하고 접속해보면 접속이 안될 것이다.
-> 위에서 받아온 nginx 기본 설정 파일(nginx.conf)에서 접속 포트를 8080으로 지정했기 때문.
-> 8080으로 접속하면 접속 성공.
files와 templates 외에는 main.yml의 형식 필수.
벌써 교재 7장인데, 교재가 끝난 후 다시 스스로 훑어보라는 의도라고 한다. 어느 정도 배우다 보니 교재로 독학, 예습, 복습이 가능할 것 같다는 게 느껴진다. 이번 주 안으로 교재를 끝내고, 추석 연휴 동안 세부적으로 복습하라고 권하셨다.
위에서는 Roles를 위한 디렉터리를 mkdir로 하나하나 만들었다. 당연히 이것도 자동으로 생성해 주는 명령어가 있다.
-> ansible-galaxy init [생성할 Role의 이름]
ansible-galaxy init apache
-> apache라는 디렉터리 하에 기본 Roles 구조가 만들어진다.
-> main.yml 파일도 만들어진다(껍데기만).
7교시
적합한 롤을 검색하는 방법
1. 명령어로 검색
ansible-galaxy search --galaxy-tags [이름]
-> 당연히 앤서블이 설치되어 있어야 하고, 가독성도 좋지 않다.
2. 앤서블 갤럭시 홈페이지(https://galaxy.ansible.com)d에서 검색
ansible-galaxy install [-roles-path (설치 경로)] [Role 이름]
-> 설치 경로를 지정하지 않을 경우 ~/.ansible/roles/ 에 설치된다.
ansible-galaxy list
ansible-galaxy remove [Role 이름]
아무튼 Role 설치 후, 이 롤을 실행시킬 플레이북을 만들어야 한다(p. 498).
8교시
오늘 배운 내용 복습
내일은 호스트 PC에 앤서블을 설치해서 AWS에 인스턴스를 만들어 볼 것이다.
-> 호스트 PC가 ansible-server가 되는 것이다.
다시 들을 만한 부분은 없었지만, 오늘 수업은 한번 훑을 수 있다면 하는 것이 좋을 듯.
'교육' 카테고리의 다른 글
[42일 차] 21.09.16 : AWS 2 (2) | 2021.09.16 |
---|---|
[41일 차] 21.09.15 : Ansible 5(AWS, VPC), AWS 1 (0) | 2021.09.15 |
[39일 차] 21.09.13 : Ansible 3(전자 서명 자동 구축, 동적 구성) (0) | 2021.09.13 |
[Ansible/Vagrant] 정리 1 (0) | 2021.09.12 |
[38일 차] 21.09.10 : Ansible 2 (0) | 2021.09.10 |
댓글