1. 程式人生 > >Ansible 小手冊系列 十一(變量)

Ansible 小手冊系列 十一(變量)

add comm scrip conf 是否 ask ansi yam yml

變量名約束


  • 變量名稱應為字母,數字和下劃線。
  • 變量應始終以字母開頭。
  • 變量名不應與python屬性和方法名沖突。

變量使用


通過命令行傳遞變量(extra vars)

ansible-playbook release.yml -e "user=starbuck"

inventory 中定義變量(inventory vars)

host3 http_port=80 # 定義主機變量
[webservers:vars] # 定義組的變量
ntp_server= ntp.example.com

playbook 中如何定義變量(play vars)

- hosts: webservers
  vars:
    http_port: 80

從角色和文件包含中定義變量

- hosts: webservers
   include_vars: myvars.yml

- hosts: webservers
  vars_files:
    - /vars/external_vars.yml

定義角色默認的變量(role defaults)

在角色目錄中添加一個defaults/main.yml文件。文件裏存儲著yaml或json格式的數據。

以交互方式獲取變量值

---
- hosts: server
  vars_prompt:
    - name: web
      prompt: ‘Please input the web server:‘
      private: no

定義角色變量(role and include vars)

roles:
   - { role: app_user, name: Ian    }

註冊變量(registered vars)

---
- hosts: all 
  tasks:
  - shell: uptime
    register: result
  - name: show uptime
    debug: var=result

此選項將任務的結果存儲在變量中,結果參數可以用在模版中。名稱為result,使用debug來輸出result的信息。

以下是一些重要的註冊變量的組件:

  • changed: 顯示是否已更改
  • cmd: 執行的命令
  • rc: 命令的返回碼
  • stdout:命令的輸出
  • stdout_lines: 逐行輸出
  • stderr: 如果有錯誤,則輸出錯誤的信息

內置變量

變量名稱說明使用
hostvars 包含主機得fcats信息 {{ hostvars[‘db.example.com‘].ansible_eth0.ipv4.address }}
inventory_hostname 當前主機的名稱 {{ hostvars[inventory_hostname] }}
groups_name 當前主機所在組的主機列表 {% if ‘webserver‘ in group_names %}# some part of a configuration file that only applies to webservers{% endif %}
groups 包含設備清單組內的所有主機 {% for host in groups[‘db_servers’] %} {{ host }}{% endfor %}
play_hosts 在當前playbook中處於活動狀態的主機名列表 {{play_hosts}}
ansible_version ansible版本信息 {{ansible_version}}

變量優先級


最後的優先級最高

? role defaults
? inventory vars
? inventory group_vars
? inventory host_vars
? playbook group_vars
? playbook host_vars
? host facts
? play vars
? play vars_prompt
? play vars_files
? registered vars
? set_facts
? role and include vars
? block vars (only for tasks in block)
? task vars (only for the task)
? extra vars (always win precedence)

如果多個組具有相同的變量,則最後一個加載獲勝。

變量範圍


Ansible有3個主要範圍:

  • 全局:這是由config,環境變量和命令行設置的
  • play:每個play和包含的結構,vars條目,include_vars,角色默認和vars。
  • 主機:直接與主機相關聯的變量




Ansible 小手冊系列 十一(變量)