0414 Ansible 4

Ada·2022년 4월 14일
0

Playdata-Cloud

목록 보기
8/21

복습

변수

• 변수 정의 위치
▪ 인벤토리 - 호스트 변수

  • INI 형식의 인벤토리에서 변수 선언은 키=값 형태를 가짐

▪ 플레이북 - 변수

  • 플레이에 vars 키워드를 사용하여 변수를 정의

  • ansible을 이용한 파일 및 디렉토리 생성
- 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 키워드로 변수를 선언하면, 플레이북을 실행하기 전 사용자에게 변수의 값을
입력하도록 요청할 수 있음

▪ 민감한 데이터나 자주 변경되는 데이터를 플레이북에 저장하지 않고, 사용자가 입력하도록 하는 것

▪ 사용자를 생성하기 위한 패스워드와 같은 민감한 데이터나, 설치 하고자하는 패키지의 버전이 자주 변경되는 경우 버전을 지정하도록 사용할 수 있음

  • name: 변수 명
  • prompt: 프롬프트에 출력될 문자열
  • private: 입력 값이 보이는지 여부
  • default: 기본값
  • encrypt: 암호화/해시 알고리즘
  • confirm: 입력값을 한번 더 검증
  • salt_size: Salt 길이(기본 8)

프롬프트 실습

- 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

필터

  • 필터의 역활
    ▪ 변수값의 변환
    • JSON 데이터를 YAML 데이터로 변환
    • URL을 분할하여 호스트 이름을 추출
    • 문자열의 SHA1 해시를 가져옴
    • 정수를 더하거나 곱하는 등의 작업을 수행
      ▪ 정의되지 않은 변수를 관리
    • 변수에 기본값을 제공
    • 변수를 선택적으로 설정
      ▪ 변수 선언 뒤에 파이프 ‘|’ 를 이용해 필터를 지정

종류: 디폴트, 필수값 정의, 사전-목록 데이터 변환, 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

profile
백엔드 프로그래머

0개의 댓글