zoukankan      html  css  js  c++  java
  • Ansible 变量

    1. 变量来源

    • inventoryfile中定义
    • playbook中定义
    • include文件和角色中定义变量
    • 系统facts  ansible hostname -m setup
    • local facts

    2. 变量的使用

      {{ ansible_eth0["ipv4"]["address"] }}  或者 {{ ansible_eth0.ipv4.address }}.  复杂变量可以像字典或者熟悉一样访问. 效果一样

    3. 本地变量

      ansible hostname -m setup 可以获取固定的系统facts,  在playbook中设置gather_fact:yes, playbook会自动获取远程机器的facts.  但是ansible也支持用户自定义facts

      如果目标机器上有/etc/ansible/facts.d/目录, 在该目录下有.fact结尾的json ini 或者可执行并返回json过的脚本, 都可以作为本地便变量

      例如

     /etc/ansible/facts.d/preferences.fact:
    
    [general]
    asdf=1
    bar=2

       使用变量  {{ ansible_local.preferences.general.asdf }}

    4. 魔法变量

    • hostvars 可以让你调用其他host的变量和facts,  即使你没有在这个机器上执行过playbook, 你仍然可以访问变量, 但是不能访问facts. 例如: {{ hostvars['test.example.com']['ansible_distribution'] }}
    • group_names 当前host所在的group的组名列表.   包括其父组
    • groups 所有组包括组中的hosts
    • inventory_hostname 配置在inventory文件中当前机器的hostname
    • play_hosts 执行当前playbook的所有机器的列表
    • inventory_dir inventory文件的路径
    • inventory_file inventory文件的路径和文件名
    • role_path 当前role的路径

    5. 变量作用域

    • 全局作用域:  设置在config, 环境变量, 和命令行中的变量
    • play:  作用于play和包含的structure, 变量, role中的default和vars
    • host:  inventory, facts和register产生的变量, 只作用于某个host

      Note 1:  子组的变量会覆盖父组的变量,  host的变量会覆盖其组的变量

      Note 2:  变量优先级

          roles/x/defaults/main.yml -> inventory file  ->  roles/x/vars/main.yml -> 调用role时的参数 ->  role play 中的变量 -> 执行命令-e 传入的变量.

    6. fact缓存

      如果想在一个host上访问另一个host的fact 必须设置gathering setting to smart, 否则,如果你想访问另一个机器的fact, 那你必须在另外一台机器上执行过gather_fact.

      inventory 里面声明的变量是否和上面有同样的要求, 待验证-???

  • 相关阅读:
    wm
    usual
    itk_option remove
    Label Options
    imosflm controller
    set font
    namespace code
    git 之五分钟教程
    git 之五分钟教程
    学习perl正则表达式
  • 原文地址:https://www.cnblogs.com/v394435982/p/5594585.html
Copyright © 2011-2022 走看看