• 변수 정의 위치
▪ 인벤토리 - 호스트 변수
키=값
형태를 가짐▪ 플레이북 - 변수
- name: make file and directory
hosts: ansi-node1
gather_facts: no
tasks:
- name: make directory
file:
path: "/tmp/testdir1/testdir2"
state: directory
recurse: yes
owner: bin
group: bin
- name: make file
file:
path: "/tmp/testdir1/testdir2/test1.txt"
state: touch
owner: vagrant
group: vagrant
- name: input test.txt data
lineinfile:
dest: "/tmp/testdir1/testdir2/test1.txt"
line: "make file and dir1"
- name: create file
copy:
content: "mask file and dir2"
dest: "/tmp/testdir1/testdir2/test2.txt"
▪ 파일, 인벤토리, 키/값 저장소, API 등 외부 소스에서 데이터를 검색해 변수로 가져올
수 있음
lookup 대상은 현재 대상
( master 에서 작업시 ansi-master1 출력)
split_lines: False -> 보기 편하다
- name: hostname lookup
hosts: ansi-node1
vars:
m_hostname: "{{ lookup('file', '/etc/hostname') }}"
tasks:
- name: var print
debug:
msg: "{{ m_hostname }}"
- name: url lookup
hosts: ansi-node2
- name: display ip ranges
debug:
msg: "{{ lookup('url', 'https://ip-ranges.amazonaws.com/ip-ranges.json', split_lines=False) }}"
▪ 플레이북에 vars_prompt 키워드로 변수를 선언하면, 플레이북을 실행하기 전 사용자에게 변수의 값을
입력하도록 요청할 수 있음
▪ 민감한 데이터나 자주 변경되는 데이터를 플레이북에 저장하지 않고, 사용자가 입력하도록 하는 것
▪ 사용자를 생성하기 위한 패스워드와 같은 민감한 데이터나, 설치 하고자하는 패키지의 버전이 자주 변경되는 경우 버전을 지정하도록 사용할 수 있음
프롬프트 실습
- hosts: ansi-node2
vars_prompt:
- name: filename
prompt: file name input
private: no
tasks:
- name: file create
file:
state: touch
path: /home/vagrant/{{ filename }}
mode: '0644'
owner: vagrant
group: vagrant
ansi-node2, ansi-node3 대상 (그룹이 아닌 노드로 지정해 볼 것)
/home/vagrant/testdir/testfile 생성
testdir 과 testfile은 prompt 변수를 이용해서 이름을 지정하시오.
소유자와 소유 그룹은 vagrant 로 지정하시오.
- name: create file & directory
hosts: ansi-node2,ansi-node3 #ansi-node2:ansi-node3
gather_facts: no
vars_prompt:
- name: f_name
prompt: Input FileName
private: no
- name: d_name
prompt: Input DirectoryName
private: no
tasks:
- name: Create Directory
file:
state: directory
path: /home/vagrant/{{ d_name }}
owner: vagrant
group: vagrant
- name: Create File
file:
state: touch
path: "/home/vagrant/{{ d_name }}/{{ f_name }}"
owner: vagrant
group: vagrant
종류: 디폴트, 필수값 정의, 사전-목록 데이터 변환, ip address 확인, 해시 변환, 주석 변환, url 주소 판독, 경로 판독
ansible ansi-node1 -m setup -a 'filter=ansible-hostname'
호스트 이름 참조 : ansible_hostname
메모리 크기 참조 : ansible_memototal_mb
IPv4 주소참조 : ansible_all_ipv4_address
sda 장치의 모델 참조 : ansible_devices['sda']['model']or .sda.model
NIC 인터페이스 목록 정보 참조 : ansible_interfaces
NIC 인터페이스의 IP 정보 참조 : ansible_enp0s8['ipv4']['address']
배포판 정보 참조 : ansible_distribution