티스토리 뷰
▶ 확장자를 yaml로 하면 탭을 스페이스로 바꿔준다
▷ yaml 은 tab을 사용하면 안된다
>> yaml 쓰려면 확장자를 yaml로 쓰라는 의미
>> ansible-doc 궁금한 것 입력으로 확인하면서 체크하자
>> /^= 로 필수사항 체크
>> EXAMPLE 보고 하자
>> 플레이는 순서가 지정된 작업집합
>> 인벤토리에서 선택한 호스트만 실행가능
>> 1개이상의 플레이가 필요하다
>> yaml 형식으로 작성
>> 일반적으로 확장자는 yaml 또는 yml 로 한다
>> 들여쓰기 규칙은 엄격하게 지켜야 한다.
>> 동일한 수준의 계층은 들여쓰기가 같아야 한다.
>> 하위 항목은 상위항목보다 들여쓰기가 되어야 한다.
>> 빈줄은 얼마든지 사용해도 된다.
>> 들여쓰기는 스페이스만 사용해야하고 탭은 사용할수 업다.
그러나 vim 환경설정으로 탭을 스페이스키처럼 사용할수 있다.
>> vim 편집기로 플레이북을 편리하게 사용하고 싶으면 환경설정 변경 $HOME/.vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et
>> 플레이북의 시작은 '---' 로 시작한다.(생략가능하다)
>> 플레이북의 종료는 '...' 이지만 일반적으로 거의 생략한다.
▶ playbook 의 시작과 task 의 시작은 list로 시작해야 한다는 것을 기억
[ - 으로 시작해야 한다 ]
>> hosts 는 생략불가
>> tasks 는 경우에 따라서 생략가능하다.
>> 하나이상의 작업이 등록되어 있는경우는 생략불가
>> tasks 는 관리대상 호스트에서 실행할 작업을 순서대로 나열
>> 목록에 있는 각 작업은 딕셔너리로 표현하며 키: 값 형태이다.
▶ 실제 실행하는 것이 아닌, 시뮬레이션을 돌려보는 것
>> 실행하는 것처럼 출력
ansible-playbook -C d.yaml
▶ yaml 설정할 때 설정 파일
[ cd /home/opuser ] >> [ vim .vimrc ]
>> FileType yaml : yaml 파일 타입에 대해서만 적용된다
>> expandtab : tab 을 space로 바꿔라
>> ai 는 자동 들여쓰기
>> shiftwidth 는 자동 들여쓰기 할 때에 이동 칸 수
>> set paste 는 복사 붙여넣기 했을 때 문제 해결
autocmd FileType yaml setlocal ts=2 shiftwidth=2 sts=2 expandtab ai
▶ 리스트 데이터란 뜻은 - 로 시작한다
▷ 위 name 은 playbook 을 위한 것
▷ 아래 name 은 task 를 위한 것
▷ host 는 inventory에 있는 것
▷ useradd -c "jang nara" tuser10 으로 만든다는 의미
▷ 쓰지 않는 모든 것들은 default
▷ 삭제할 거면 state: absent
▷ 끝까지가 하나의 single Playbook
--- # yaml 문서의 시작 생략해도 된다
- name: 계정생성을 위한 플레이북
hosts: all
tasks: # 태스크의 시작은 리스트로 시작한다
- name: #계정생성을 위한 태스크
user:
name: tuser10
comment: jang nara
shell: /bin/bash
uid: 1500
group: wheel
state: present
# - name: 두번째 계정 생성
- user:
name: tuser10
state: present
▷ 문법체크
[opuser@control sample]$ ansible-playbook --syntax-check user.yaml
▷ playbook 완료
#### 복붙 했을 때 계단형상 발생시
>> 미리 set paste 설정 후 붙여넣기
▷ 멀티 플레이북
▷ node1 에서 apache 실행
>> 원하는 상태를 만드는 것이기에 installed 로 설정한다
>> ansible-doc 에서는 install로 지정되어 있는데 딱히 상관은 없다
>> state: latest 더 높은 버전으로 설정해라
>> 들여쓰기 한 것은 종속관계를 의미
---
- name: playbook for http service
hosts: node1
tasks:
- name: installed httpd
yum:
name: httpd
state: latest
- name: installed filrewalld
yum:
name: firewalld
state: present
- name: stated httpd
service:
name: httpd
state: started
- name: stated firewalld
service:
name: firewalld
state: restarted
▷ immediate 를 통해서 [ firewall-cmd --reload ] 를 해야한다
>> permanent 를 썼으므로 reload 가 필요하다
>> firewalld 는 모듈
>> 굳이 - name을 쓰지 않아도 된다 없어도 되나,
>> 시작은 - ( list ) 를 꼭 넣어주자
[ name 은 comment 처럼 사용 할 수도 있다 ]
---
- name: playbook for http service
hosts: node1
tasks:
- name: installed httpd
yum:
name: httpd
state: latest
- name: installed filrewalld
yum:
name: firewalld
state: present
- name: stated httpd
service:
name: httpd
state: started
- name: stated firewalld
service:
name: firewalld
state: restarted
- firewalld:
service: http
permanent: yes
immediate: yes
state: enabled
>> 방화벽 켜고 문제 없이 실행
▶ 설정 내용은 task 위에 써야한다
▶ node 를 직접 적어줘도 되고, 그룹으로 적어도 된다
[ 둘 중 하나만 적는다 ]
▶ 초기 페이지 배포
▷ 소유주와 그룹을 안정하면 root로 된다
>> 설정 파일에서 root 로 설정을 해놨으므로
▷ 배포
>> 작업을 한대씩 끝내는 것이 아니라 하나씩 실행하며 끝내나간다
주석 처리는 # 으로 한줄씩 한다
command 모듈은 멱등성 보장 못하며,
change를 인지 못하지만, 간단한 걸로는 사용한다
localhost 는 inventory에 없어도 등록이 되어 있다고 간주한다
hosts:
- server1
- server2
- server3
>> 한줄로 표기 가능 hosts: [ server1, server2, server3 ]
yum:
name: httpd
state: present
>> 한줄 표기 가능 yum: {name:httpd, state: present}
▷ 문자열 체크
- name: test playbook
hosts: node1
tasks:
- command: echo "hello ansible"
- command: echo "hello linux"
>> node1 에 출력되므로 모른다
>> localhost로 hosts를 바꿔도 보이지 않는다
>> node1 에서도 출력이 안됨 >> 몇 번째 콘솔인지 지정이 필요하다
▷ register 는 모듈이 아니므로 ansible-doc에서도 안나온다
[ 주로 디버깅을 위한 목적으로 사용한다 ]
>> task 의 실행결과를 변수에 저장한다
>> 하나의 모듈 아래에 register 사용 가능
>> register 는 변수를 지정해 준다
>> myvar 는 바로 위 내용의 register 변수로 지정된다
>> 값만 정해주는 것
>> debug 는 출력하는 모듈
- name: test playbook
hosts: localhost
tasks:
- command: echo "hello ansible"
register: myvar
- command: echo "hello linux"
register: myvar2
- command: cal
register: myvar3
- debug:
var: myvar
- debug:
var: myvar2
- debug:
var: myvar3
>> 전체 결과는 제이슨(JSON) 형태로 출력됨
>> value 와 key 형식
▷ debug 의 default 는 hello world
▷ 줄바꿈 처리한다
▷한줄로 처리한다
▷ checksum 값이 다르면 실행한다
[opuser@control src]$ md5sum index.html
7ad4a024ee8f2045583ff149b1b43d39 index.html
[opuser@control src]$ echo "whatwhat" > index.html
[opuser@control src]$ md5sum index.html
246b7a0f66819fa91b13fd7680586d2a index.html
변수는 문자로 시작해야 하며
특수문자는 ' _ ' 만 가능하다
>> 숫자로 시작하면 안된다
변수 정의가 가능한 곳
1. inventory 내에서 변수 정의
2. playbook 의 vars 블록에서 정의
3. palybook 의 var_files 로 외부파일에서 정의
>> vars 는 모듈이 아니다
>> 변수 취급을 위해선 {{ }} 중괄호 2개 사용
>> var 뒤는 바로 변수로 취급한다
>> 변수명으로 시작할 때에는 " " 가 필요하다
>>> 전체를 다 " " 붙여줘야 한다
▶ inventory 내에서의 변수 설정
▷ 그룹변수도 가능
[ 그룹명:vars ]
▷ 변수가 2개면 그냥 띄어서 쓰면 된다
( 한 칸 이상 탭 or 스페이스로 띄우면 된다 )
## gather_facts: no 는 빠르게 실행이 가능하다
## 변수가 아니다
>> playbook 이 가장 우선권을 가진다
>> inventory 에 변수를 설정하면
>>> 복잡하고 관리하기 쉽지 않다
>>> 따라서 group_vars , host_vars 디렉터리 사용 권장
>> host_vars 는 디렉터리 명 똑같이 / 호스트와 똑같은 파일이름
[opuser@control sample]$ mkdir host_vars
[opuser@control sample]$ cd host_vars/
[opuser@control host_vars]$ cat node1
package: finger
[opuser@control host_vars]$ cat node2
package: finger-server
service: finger-server
>> group_vars 는 디렉터리 명 똑같이 / 그룹명과 똑같은 파일이름
[opuser@control sample]$ mkdir group_vars
[opuser@control sample]$ cd group_vars/
[opuser@control group_vars]$ vim debservers
[opuser@control group_vars]$ cat debservers
service: mariadb
▩ 실습
node 1 / node 2 / node 3 각각 다른 웹 페이지 출력되도록 설정
>> 각 node 마다 설정을 해야하므로, inventory 나 host_vars 에서 설정하는게 편하다
[webservers]
node1 index_file=node1.html
node2 index_file=node2.html
[dbservers]
node3 index_file=node3.html
>> 각자 다른 내용으로 설정
[opuser@control src]$ ls
index.html node1.html node2.html node3.html
[opuser@control src]$ vim node1.html
[opuser@control src]$ vim node2.html
[opuser@control src]$ vim node3.html
▶ lineinfile 모듈
▷ create 가 설정되어야 파일이 생성되면서 에러가 뜨지 않는다
[webservers]
node1 index_file=node1.html nodename=node1
node2 index_file=node2.html nodename=node2
[dbservers]
node3 index_file=node3.html nodename=node3
>> index.html 만들어진게 있으면,
>> 그 뒤에 내용이 추가된다
'Ansible' 카테고리의 다른 글
Ansible 총 정리 (1) | 2024.02.15 |
---|---|
Ansible 변수 추가내용 (0) | 2024.02.14 |
Ansible module (0) | 2024.02.13 |
Visual Studio Code (0) | 2024.02.08 |
Ansible 환경 변수 / DB 연동 (0) | 2024.02.08 |