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

變量名約束


  • 變量名稱應(yīng)為字母,數(shù)字和下劃線。
  • 變量應(yīng)始終以字母開頭。
  • 變量名不應(yīng)與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格式的數(shù)據(jù)。

以交互方式獲取變量值

---
- 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

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

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

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

內(nèi)置變量

變量名稱 說明 使用
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 包含設(shè)備清單組內(nèi)的所有主機 {% for host in groups[‘db_servers’] %} {{ host }}{% endfor %}
play_hosts 在當前playbook中處于活動狀態(tài)的主機名列表 {{play_hosts}}
ansible_version ansible版本信息 {{ansible_version}}

變量優(yōu)先級


最后的優(yōu)先級最高

? 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,環(huán)境變量和命令行設(shè)置的
  • play:每個play和包含的結(jié)構(gòu),vars條目,include_vars,角色默認和vars。
  • 主機:直接與主機相關(guān)聯(lián)的變量

更多文章請看 Ansible 專題文章總覽

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容