Ansible 11: 변수 설명

10311 단어 registeransiblegroups
1. Inventory 에서 변 수 를 정의 합 니 다.
자세 한 내용 은 < Ansible 2: 호스트 목록 > 참조
2. 플레이 북 에서 변 수 를 정의 합 니 다.
1. vars 키 워드 를 통 해 정의:
vars: 
  http_port: 80
  server_name: localhost
  cert_file: /etc/nginx/ssl/nginx.crt
  key_file: /etc/nginx/ssh/nginx.key
  conf_file: /etc/nginx/conf/default.conf
2, vars 를 통 해files 키워드 도입 변수 파일:
- hosts: all
  remote_user: root
  vars:
    favcolor: blue
  vars_files:
    - /vars/external_vars.yml
    - /vars/nginx_vars.yml
/vars/nginx_vars. yml 예제:
http_port: 80
server_name: localhost
cert_file: /etc/nginx/ssl/nginx.crt
key_file: /etc/nginx/ssh/nginx.key
conf_file: /etc/nginx/conf/default.conf
3 、 vars 를 통 해prompt 를 통 해 인간 과 컴퓨터 의 상호작용 을 실현 합 니 다.
hosts: all
remote_user: root
vars_prompt:
  - name: 'https_passphrase'          #데이터 저장 변수 이름
    prompt: 'Key Passphrase'          #수 동 입력 데이터
    private: yes                      #이 값 이 yes 이면 사용자 의 입력 이 인쇄 되 지 않 습 니 다.
4. 플레이 북 의 roles 를 통 해 변 수 를 정의 합 니 다.
상세 한 내용 은 《 ansible 10: Playbook 의 역할 과 포함 》 을 보십시오.
3. 등록 변수
     ,                   ,                 ,    register      :         ,  /etc/motd      'hi'    ,   "mothd contains ther word hi":- name: test play
  hosts: all
  tasks:
      - shell: cat /etc/motd
        register: motd_contents
      - shell: echo "motd contains the word hi"
        when: motd_contents.stdout.find('hi') != -1     register            :- name: registered variable usage as a with_items list
  hosts: all
  tasks:
      - name: retrieve the list of home directories
        command: ls /home
        register: home_dirs
      - name: add home dirs to the backup spooler
        file: path=/mnt/bkspool/{{ item }} src=/home/{{ item }} state=link
        with_items: home_dirs.stdout_lines
        # same as with_items: home_dirs.stdout.split()

4. fact 를 통 해 원 격 호스트 변 수 를 가 져 옵 니 다.
    우 리 는 이전에 ad - hoc 상용 모듈 을 말 할 때 setup 모듈 을 언급 하여 원 격 호스트 의 관련 정 보 를 얻 고 이 정 보 를 변수 로 플레이 북 에서 호출 할 수 있 습 니 다.setup 모듈 에서 이 정 보 를 얻 는 방법 은 fact 에 의존 하 는 것 이다.여기 서 우 리 는 얻 은 기본 fact 의 내용 을 자세히 설명 하지 않 습 니 다.ansible 은 미리 정 의 된 fact 의 내용 을 가 져 올 수 있 을 뿐만 아니 라 호스트 에 수 동 으로 fact 를 맞 출 수 있 습 니 다.로 컬 fact 라 고 합 니 다.로 컬 fact 는 기본적으로 대상 호스트 의 / etc / ansible / facts. d 디 렉 터 리 에 저 장 됩 니 다. 파일 이. ini 형식 이나 json 형식 이면 ansible 은 자동 으로 식 별 됩 니 다.이런 식 으로 불 러 오 는 fact 는 key 를 ansiblelocal 의 특수 변수 입 니 다.
다음은 간단 한 예제 입 니 다. 하나의. ini 형식의 example. fact 파일 내용 은 다음 과 같 습 니 다.
[book]
title=Ansible Book
author=Breeze Yan
대상 호스트 의 / etc / ansible / facts. d / 디 렉 터 리 에 복사 하고 debug 모듈 을 통 해 출력 합 니 다:
- name: print ansible_local
  debug: var=ansibl_local
다음 내용 을 출력 합 니 다:
ok: [localhost] => {
    "var": {
        "ansible_local": {
            "example": {
                "book": {
                    "author": "Breeze Yan", 
                    "title": "Ansible Book"
                }
            }
        }
    }
}
fact 에서 변 수 를 가 져 오지 않 으 려 면 다음 과 같은 방법 으로 fact 를 닫 을 수 있 습 니 다.
- hosts: whatever
  gather_facts: no
5. set fact 모듈 을 사용 하여 새로운 변 수 를 정의 합 니 다.
에서 set fact 모듈 용법 에 대한 상세 한 설명 이 있 습 니 다.
6. 내장 변수
1、hostvars
    지정 한 호스트 의 변 수 를 가 져 옵 니 다. 웹 서버 설정 파일 에 db 서버 의 ip 주 소 를 지정 해 야 한다 면, 이 db 서버 의 hostname 을 db. exmaple. com 으로 가정 합 니 다. ip 주 소 는 eth0 네트워크 카드 에 연결 되 어 있 습 니 다. 웹 서버 에서 db 서버 의 ip 주 소 를 다음 과 같이 호출 할 수 있 습 니 다.
{{ hostvars['db.example.com'].ansible_eth0.ipv4.address }}
주의해 야 할 것 은 db. example. com 은 ip 주 소 를 사용 하여 대체 할 수 없고 호스트 이름 이나 별명 만 사용 할 수 있 습 니 다.
2, inventory hostname 과 inventory hostname short
    inventory hostname 은 Ansible 이 인식 하 는 현재 task 를 실행 중인 호스트 의 호스트 이름 입 니 다. inventory 에서 별명 을 정의 한 적 이 있다 면, 여기 가 바로 그 별명 입 니 다. inentory 에 다음 줄 이 포함 되 어 있다 면:
server1 ansible_ssh_host=192.168.1.1
inventory hostname 즉 server 1
hostvars 와 inventory hostname 변 수 를 이용 하여 현재 호스트 와 연 결 된 모든 변 수 를 출력 할 수 있 습 니 다.
- debug: var=hostvars[inventory_hostname]
    inventory hostname 과 비슷 한 inventory hostname short 도 있 습 니 다. 호스트 의 inventory hostname 이 server 1. exmaple. com 이면 inventory hostname short 의 값 은 server 1 입 니 다.
3、group_names
현재 task 를 실행 하고 있 는 대상 호스트 가 있 는 호스트 그룹 을 표시 하 는 데 사 용 됩 니 다. 호스트 가 세 대 있다 면 주 2 종 my sql 서버 로 설정 할 수 있 습 니 다. inventory 설정 은 다음 과 같 습 니 다.
[mdb]
db1
[sdb]
db2
db3
mysql 프로필 my. conf. j2 예 는 다음 과 같 습 니 다.
{% if 'db1' in group_names %}
[mysqld]
server-id=1
log-bin=mysql-bin
log-bin-index=mysql-bin.index
sync-binlog=1
innodb_flush_log_at_trx_commit=1    #db1 이 mdb 그룹 에 있다 는 것 을 알 고 있 습 니 다. db1 과 현재 c 그룹 을 실행 할 때 현재 호스트 가 mdb 그룹 이 라 고 생각 하기 때문에 현재 호스트 에 my sql master 설정 을 적용 합 니 다.
{% else %}
[mysqld]
server-id=2
relay-log=relay-log
relay-log-index=relay-log.index
read-only = yes
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
relay_log_recovery = 1
skip_slave_start    #db1 이 현재 호스트 와 같은 그룹 에 없 을 때 현재 호스트 가 mdb 그룹 에 없다 고 생각 합 니 다. 즉, my slave 설정 을 사용 합 니 다.
{% endif %}
우 리 는 다음 과 같은 task 를 실행 합 니 다.
- name: copy config file to mysql master
  template: src=my.conf.j2 dest=/etc/my.cnf
4、groups
호스트 의 변 수 를 방문 하려 면 groups 변 수 는 유용 합 니 다. inventory 파일 이 다음 과 같이 정의 된다 면:
[web]
server1
server2
HAproxy 의 부하 이퀄 라이저 를 설정 할 때, 우리 의 설정 파일 은 웹 그룹의 모든 서버 의 IP 가 필요 합 니 다. 설정 파일 은 다음 과 같은 세 션 을 포함 합 니 다.
backend web-backend
{% for host in groups.web%}
    server {{host.inventory_hostname}} {{ host.ansible_default_ipv4.address }}:80
{% endfor %}
마지막 으로 생 성 된 파일 은 다음 과 같 습 니 다.
backend web-backend
    server server1 192.168.1.1
    server server2 192.168.1.2
모든 dbserver 그룹의 서버 에 데이터베이스 사용자 kate 를 만 드 는 예 를 들 어 보 겠 습 니 다.
- name: Create a user for all db servers
  mysql_user: name=kate password=test host={{ hostvars.[item].ansible_eth0.ipv4.address }} state=present
  with_items: groups['dbservers'] 
5、play_hosts    #현재 플레이 북 은 어떤 hosts 에서 실 행 됩 니까?
6、ansible_version    #현재 ansible 버 전
7、inventory_dir    #호스트 목록 이 있 는 디 렉 터 리
8、inventory_file    #호스트 목록 파일
7. 명령 행 을 통 해 변 수 를 설정 합 니 다.
예 는 다음 과 같다.
---
- hosts: '{{ hosts }}'
  remote_user: '{{ user }}'
  tasks:
     - ...
ansible-playbook release.yml --extra-vars "hosts=vipers user=starbuck"
다음 과 같은 방식 으로 쓸 수도 있다.
--extra-vars '{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'

      ,ansible   debug           。        fact            fact    、     
1、extra vars(   -e)   
2、inventory (ansible_ssh_user )
3、play varsvars_files
4、 inventory
5、 facts
6、 (roles/rolesname/defaults/main.yml)
: ,

좋은 웹페이지 즐겨찾기