일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Kubernets on Jenkins
- 메탈LB
- AWS 딥레이서
- 그라파나 대시보드
- jenkins
- terraform
- livenessPorbe
- headless service
- Prometheus install
- Kubernetes
- LoadBalancer Controller
- helm
- Solution Architecture
- SAA 합격 후기
- kubernetes 동작 원리
- 쿠버네티스
- 로드밸런서 컨트롤러
- 딥레이서 보상함수
- blue-green
- 그라파나 시각화
- EFS CSI Driver
- github action 사용법
- Aurora cluster
- 깃허브 액션
- 딥레이서
- EKS 클러스터
- 쿠버네티스 컴포넌트
- Firelens
- grafana on kubernetes
- 솔데스크
Archives
mingming
Ansible - 변수 본문
변수
변수 이름
- 변수 이름에는 문자 숫자 밑줄만 포함할 수 있습니다.
- 이미 예약된 플레이북 키워드나 Python 키워드는 사용할 수 없습니다.
- 변수는 숫자로 시작할 수 없습니다.
- 플레이북 예약 키워드
- Python 예약 키워드
변수 정의 및 참조
1. 기본 변수
기본 변수 정의
remote_install_path: /opt/my_app_config
기본 변수 참조
template:
src: foo.cfg.j2
dest: '{{ remote_install_path }}/foo.cfg'
2. 목록 변수
목록 변수 정의
region:
- northeast
- southeast
- midwest
목록 변수 참조
region: "{{ region[0] }}"
3. 사전 변수
사전 변수 정의
foo:
filed1: one
filed2: two
사전 변수 참조
foo['field']
foo.filed1
4. 등록 변수
등록 변수 사용 : 등록 변수는 모듈의 반환값을 저장하는 변수를 의미합니다.
---
- hosts:
tasks:
- name: Run a shell command and register its outpu as a variable
shell: /usr/bin/foo
register: foo_result
ignore_errors: true
- name: Run a shell command using output of the previous task
shell: /usr/bin/bar
when: foo_result.rc == 5
변수 정의 위치
변수를 정의할 수 있는 위치
- 인벤토리
- 플레이북
- 재사용 가능 파일( 외부 참조 파일 )
- 명령의 -e 옵션
1. 인벤토리
호스트 변수
[atlanta]
host1 httpd_port=80 maxRequestsPerChild=808
host2 httpd_port=303 maxRequestsPerchild=909
그룹 변수
[atlanta]
host1
host2
[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=prxy.atlanta.example.com
2. 플레이북
플레이북 변수
---
- hosts: webservers
vars:
http_port: 80
tasks:
- name: ensure apache is at the latest version
name: apache2
state: present
플레이북 변수 파일 참조
---
- hosts: worker
remote_user: slave
vars:
favcolor: blue
vars_files:
- vars.yaml
3. 런타임 - e 옵션
키=값 형식
ansible-playbook release.yaml --extra-vars "version=1.23.45"
JSON 문자열 형식
ansible-playbook release.yaml --extra-vars '{"version":"1.23.45"}'
JSON 또는 YAML 파일
ansible-playbook release.yaml --extra-vars "vars.json"
변수 우선순위
변수 실습
변수를 만들고 확인하는 플레이북 ( debug 모듈 )
---
- hosts: worker
remote_user: slave
vars:
user: slave
home: /home/slave
tasks:
- name: print user variable
debug:
var: user
- name: print home variable
debug:
var: home
- hosts: local
remote_user: master
vars:
user: master
home: /home/{{ user }}
tasks:
- name: print {{ user }} variable
debug:
var: user
- name: print {{ home }} variable
debug:
var: home
변수 파일 생성 및 변수 참조
vi user.yaml
---
user: master
home: /home/{{ user }}
vi playbook-vars-files.yaml
---
- hosts: worker
remote_user: slave
vars_files:
- user.yaml
tasks:
- name: print user variable
debug:
var: user
- name: print home variable
debug:
var: home
- hosts: local
remote_user: master
vars_files:
- user.yaml
tasks:
- name: print {{ user }} variable
debug:
var: user
- name: print {{ home }} variable
debug:
var: home
httpd를 실행시키는 플레이북
vi playbook-httpd-start
---
- name: worker httpd start
hosts: worker
remote_user: slave
become: yes
vars:
service: httpd start
tasks:
- name: httpd
service:
name: {{ service }}
state: started
위의 플레이북을 실행시키면 에러가 발생합니다.
ERROR! We were unable to read either as JSON nor YAML, these are the errors we got from each:
JSON: No JSON object could be decoded
해당 에러는 모듈과 겹치는 변수명을 사용했기 때문입니다. 이땐 양 끝을 "" 로 감싸주면 됩니다.
---
- name: worker httpd start
hosts: worker
remote_user: slave
become: yes
vars:
service: httpd start
tasks:
- name: httpd
service:
name: "{{ service }}"
state: started
실습 과제
플레이북 internet.yaml 파일 생성 및 실행
- 관리 호스트에서 진행
- firewalld, httpd, mairadb, php, php-mysqld 패키지를 없으면 설치하는 작업
- firewalld를 실행하는 작업
- 80번 포트를 영구적으로 추가하는작업
- mairadb를 실행하는 작업
---
- name: install package
hosts: worker
become: yes
remote_user: slave
tasks:
- name: yum install package
yum:
name: "{{ item }}"
state: present
with_items:
- firewalld
- httpd
- mariadb-server
- php
- php-mysqlnd
- name: service start
service:
name: "{{ item }}"
state: started
enabled: true
with_items:
- firewalld
- mariadb
- name: firewalld open 80
firewalld:
zone: public
port: 80/tcp
permanent: true
immediate: true
state: enabled
vi service.yaml
service:
- firewalld
- httpd
- mariadb
- name: service start
service:
name: "{{ item }}"
state: started
enabled: true
loop: "{{ service }}"
'새싹 하이브리드 클라우드 > Ansible' 카테고리의 다른 글
Ansible - 반복문 & 조건문 (1) | 2023.11.19 |
---|---|
Ansible - ad-hoc & playbook (0) | 2023.11.18 |
Ansible - 관리 노드 연결 ( SSH Key & Password ) (0) | 2023.11.11 |
Ansible - 설치 & 인벤토리 및 구성파일 (0) | 2023.11.10 |