일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- lvcreate
- pvcreate
- MSBing
- chmod
- docker network
- journalctl
- chatGPT
- firewalld
- swapon
- M365필터
- permission
- mount
- docker image
- yum
- 같은폴더
- docker
- vgcreate
- 프로세스
- nmcli
- tar
- 리다이렉션
- 랜카드인식불량
- 날짜변경
- ansible
- HTTPD
- 엑셀파일명변경
- ssh
- vagrant kubernetes
- Kubernetes
- newbingai
- Today
- Total
becool
20210728 (수) playbook 변수 실습 본문
09:33 review
adhoc 명령어 추가 설명
[user@ansible-server work]$ ansible all -m copy -a "src=/etc/resolv.conf dest=/tmp/"
[user@ansible-server work]$ ansible all -m shell -a "ls -l /tmp/resolv.conf"
[user@ansible-server work]$ ansible all -m user -a "name=work password=1234"
[user@ansible-server work]$ ansible all -m user -a "name=work state=absent"
[user@ansible-server work]$ ansible webservers -m yum -a "name=zsh state=present"
[user@ansible-server work]$ ansible all -m yum -a "name=zsh state=present"
[user@ansible-server work]$ ansible all -m yum -a "name=vim state=present"
[user@ansible-server work]$ ansible all -m yum -a "name=vim state=latest"
* 최신버전으로 업데이트 : latest
* 프로그램이 설치만 되어있으면 아무동작안함 (업데이트 x) : present
※ name=yum (value of state must be one of: absent, installed, latest, present, removed)
※ name=service (value of state must be one of: reloaded, restarted, started, stopped)
※ name=lineinfile (value of state must be one of: absent, present)
[user@ansible-server work]$ ansible all -m service -a "name=crond state=started"
[user@ansible-server work]$ ansible all -m service -a "name=crond state=stopped"
[user@ansible-server work]$ ansible -m file -a "path=/etc/ansible/fact.d state=directory recurse=true"
--- - name: Install Apache HTTPD Webservers hosts: all become: true become_user: root tasks: - name: Install Apache HTTPD Package yum: name: httpd state: latest - name: Ensure start and enable Apache HTTPD Service service: name: httpd state: started enabled: true - name: Create index.html Web Content copy: content: "Hello Apache webserver<br>index.html" dest: /var/www/html/index.html |
--- - name: "Setup firewall service rules" hosts: all become: true become_method: sudo tasks: - name: "Allow web service" firewalld: service: http state: enabled [user@ansible-server work]$ ansible all -m command -a "firewall-cmd --list-services" --become 192.168.56.12 | CHANGED | rc=0 >> dhcpv6-client http ssh 192.168.56.13 | CHANGED | rc=0 >> dhcpv6-client http ssh 192.168.56.11 | CHANGED | rc=0 >> dhcpv6-client http ssh |
변수 (Variable)
- 데이터를 저장하기 위한 메모리의 저장 공간
변수의 이름 규칙
- 변수의 이름은 영문 대소문자, 숫자, '_'로 구성됨
- Python 에서 사용하는 키워드(예약어)는 사용 불가
- 변수의 이름은 숫자로 시작할 수 없음
- 영문자나 언더바로 시작은 가능
사용가능 | 사용불가 |
foo foo_test foo5 _foo |
*foo foo-test 5foo foo test foo.test 1foo 12345 |
변수 종류
1. 기본변수 | 2. 목록변수 |
(1) 기본 변수 정의 host_name: "test01" (2) 기본 변수 참조 {{ host_name }} |
(1) 목록 변수 정의 list01: - northeast - southeast - mideast (2) 목록 변수 참조 test: "{{ list01[0] }}" |
3. 사전 변수 (Dictionary Variable) | 4. 등록 변수 (Registered Variable) |
(1) 사전 변수 정의 foo: field1: one field2: two (2) 사전 변수 참조 foo['field1'] foo.field1 |
모듈 실행 후 리턴 값을 저장하는 변수 |
변수의 정의 가능 경로
- 인벤토리(inventory)
- 플레이북(Playbook)
- 외부 참조 파일(재사용 가능 파일)
- 역할
- 명령어의 '-e' 옵션
변수의 사용 범위
- 전역/플레이북 : ansible.cfg, 명령어 실행 시 옵션으로 전달하는 변수
- 호스트 그룹 :
- 호스트
- 플레이(play) : vars, vars_files
- 블록 :
- 작업(task) :
playbook을 통한 변수 사용 실습 : vars에 선언하고 아래에서 사용
※ playbook에서 {{ }} 괄호로 문장이 시작하면 " "필요. 문장 중간에 들어가면 불필요 [user@ansible-server work]$ vim 0728_playbook_variables.yml --- - name: Configure Apache Web Service hosts: webservers vars: - package_web: httpd package_firewall: firewalld service_web: httpd service_firewall: firewalld rule_service: http become: true tasks: - name: Install Packages yum: name: - "{{ package_web }}" - "{{ package_firewall }}" state: latest - name: The {{ service_firewall }} service is started and enabled service: name: "{{ service_firewall }}" state: started enabled: true - name: The {{ service_web }} service is started and enabled service: name: "{{ service_web }}" state: started enabled: true - name: Web service is allowed firewalld: service: "{{ rule_service }}" state: enabled permanent: true [user@ansible-server work]$ ansible-playbook 0728_playbook_variables.yml PLAY [Configure Apache Web Service] ************************************************************************************ TASK [Gathering Facts] ************************************************************************************************* ok: [192.168.56.12] ok: [192.168.56.13] TASK [Install Packages] ************************************************************************************************ ok: [192.168.56.12] ok: [192.168.56.13] TASK [The firewalld service is started and enabled] ******************************************************************** ok: [192.168.56.12] ok: [192.168.56.13] TASK [The httpd service is started and enabled] ************************************************************************ ok: [192.168.56.12] ok: [192.168.56.13] TASK [Web service is allowed] ****************************************************************************************** changed: [192.168.56.12] changed: [192.168.56.13] PLAY RECAP ************************************************************************************************************* 192.168.56.12 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.56.13 : ok=5 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
과제
playbook 에서 변수를 사용하여 포함된 install_web_variables.yaml 작성
web server: nginx
db: mariadb
firewall 허용 서비스 http
설치 호스트 ansible-node01 (192.168.56.11) - inventory에 정의
[user@ansible-server work]$ cat install_web_variables.yaml --- - name: "variables exam #3" hosts: 192.168.56.11 become: true vars: - release : epel-release package_web: nginx package_db: mariadb package_db_server: mariadb-server service_firewall: firewalld package_web_rule: http package_db_rule: mysql tasks: - name: install {{ release }} yum: name: "{{ release }}" state: latest - name: install packages yum: name: - "{{ package_web }}" - "{{ package_db }}" - "{{ package_db_server }}" state: latest - name: The {{ service_firewall }} service is started and enabled service: name: "{{ service_firewall }}" state: restarted enabled: true - name: The {{ package_web }} service is started and enabled service: name: "{{ package_web }}" state: started enabled: true - name: The {{ package_db }} service is started and enabled service: name: "{{ package_db }}" state: started enabled: true - name: Allow to {{ package_web_rule }} service in Firewalld (permanent) firewalld: service: "{{ package_web_rule }}" state: enabled permanent: true - name: Allow to {{ package_web_rule }} service in Firewalld (runtime) firewalld: service: "{{ package_web_rule }}" state: enabled - name: Allow to {{ package_db_rule }} service in Firewalld (permanent) firewalld: service: "{{ package_db_rule }}" state: enabled permanent: true - name: Allow to {{ package_db_rule }} service in Firewalld (runtime) firewalld: service: "{{ package_db_rule }}" state: enabled [user@ansible-server work]$ ansible-playbook install_web_variables.yaml PLAY [variables exam #3] *********************************************************************************************** TASK [Gathering Facts] ************************************************************************************************* ok: [192.168.56.11] TASK [install epel-release] ******************************************************************************************** changed: [192.168.56.11] TASK [install packages] ************************************************************************************************ changed: [192.168.56.11] TASK [The firewalld service is started and enabled] ******************************************************************** changed: [192.168.56.11] TASK [The nginx service is started and enabled] ************************************************************************ changed: [192.168.56.11] TASK [The mariadb service is started and enabled] ********************************************************************** changed: [192.168.56.11] TASK [Allow to http service in Firewalld (permanent)] ****************************************************************** ok: [192.168.56.11] TASK [Allow to http service in Firewalld (runtime)] ******************************************************************** ok: [192.168.56.11] TASK [Allow to mysql service in Firewalld (permanent)] ***************************************************************** ok: [192.168.56.11] TASK [Allow to mysql service in Firewalld (runtime)] ******************************************************************* ok: [192.168.56.11] PLAY RECAP ************************************************************************************************************* 192.168.56.11 : ok=10 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [user@ansible-server work]$ 웹서버노드에서 방화벽 확인 [user@ansible-node01 lib]$ sudo firewall-cmd --list-services dhcpv6-client http mysql ssh [user@ansible-node01 lib]$ sudo firewall-cmd --list-services --permanent dhcpv6-client http mysql ssh |
과제시 유의사항
1) 의존성 : nginx설치를 위한 epel-release 설치 선행
2) mariadb 패키지 : mariadb, mariadb-server 두개 설치해야함
3) systemctl start와 firewall-cmd --add-service를 서비스별로 묶어서 리스트 형태로 해봤으나 안됨.
fatal: [192.168.56.11]: FAILED! => {"changed": false, "msg": "This module does not currently support using glob patterns, found '[' in service name: ['firewalld', 'nginx', 'mariadb']"}
fatal: [192.168.56.11]: FAILED! => {"changed": false, "msg": "ERROR: Exception caught: org.fedoraproject.FirewallD1.Exception: INVALID_SERVICE: ['http', 'mysql'] Non-permanent operation, Services are defined by port/tcp relationship and named as they are in /etc/services (on most systems)"}
4) nginx 서비스를 시작할때는 아파치 웹서비스 http 서비스가 종료된 상태에서만 가능
5) 문자열 : - name: "{{ service_firewall }} service is started and enabled" 전체 문자열은 "" 쌍따옴표로 묶을 것.
'ansible' 카테고리의 다른 글
20210730 (금) playbook 연습장 (0) | 2021.07.30 |
---|---|
20210730 (금) ansible 조건문, 블록, 핸들러 (0) | 2021.07.30 |
20210729 (목) ansible 변수, 반복문, 조건문 (0) | 2021.07.29 |
20210727 (화) ad-hoc 명령어 및 playbook 기초 (0) | 2021.07.27 |
20210726 (월) ansible 설치 (0) | 2021.07.26 |