AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
[TOC] ## 变量 #### Facts 变量 在执行`ansible-playbook`命令的时候,`ansible`才会默认采集`fact`信息 ![](https://img.kancloud.cn/a1/87/a187790f823e24cb7bbddb1b85a18506_546x129.png) 直接使用`ansible`就不会生效 ![](https://img.kancloud.cn/c7/1d/c71dd6d2d3c705eed9c377b8d2811a37_861x118.png) #### 判断变量是都存在 使用关键字 `defind` 判断变量是否存在的方式来避免某些变量未定义的报错 ``` tasks: - name: XXX shell: XXX {{ someone }} when: someone is defined - name: XXX shell: XXX {{ someone }} when: someone is not defined ``` #### 获取内置变量 Facts 在ansible中会内置一些默认采集的变量,比如远端系统的IP、系统版本、主机名等,可以通过下面的命令来获取远端所有的内置变量: ``` ansible XXX.XXX.XXX.XXX -m setup ``` 会得到很多变量值的返回 ![](https://img.kancloud.cn/c8/6e/c86ea0119613c5129b8edeb1a5f83ee6_493x608.png) > 关闭 Facts > ``` > - host:all > gather_facts: no > ``` #### 引用内置变量 ![](https://img.kancloud.cn/7e/4f/7e4f71c6c00042b579b9ae7ae0e101b1_448x175.png) ![](https://img.kancloud.cn/5c/ed/5cedaed039130714da31fc0aeedd76de_742x285.png) > **引用变量需要注意** > 如果引用变量的时候,是直接以 {{ XXX }} is something 开头的 > 需要在引用变量的时候给这句话添加引号:“ {{ XXX }} is something ” ## 注册变量 #### 在 playbook 中使用 register 注册变量 ``` - hosts: all tasks: - shell: /usr/bin/foo register: var_1 # register 将shell 语句返回的结果赋值给 var_1 - shell: /usr/bin/bar when: var_1 == 5 ``` ## 预留变量 hostvars’,’group_names’,‘groups’ #### 本台主机使用另外一台主机的变量 ``` {{ hostvars['some_host'][some_vars] }} ``` #### 循环与判断主机组中的组员 ``` # 判断 {% if 'server' in group_names %} XXXXXXXXXXX {% endif %} ``` ``` #循环 {% for host in groups['group_name'] %} XXXXX {{ host }} {% endfor %} ``` ## 其他方式定义变量 #### 在文件中定义变量 定义变量文件 `/pwd/var_file.yaml` ``` --- key_1: var_1 key_2: var_2 ``` 使用文件变量 ``` --- - host: all vars_files: - /pwd/var_file.yaml tasks: - name: XXXXX shell: echo {{ key_1 }} ``` #### 命令行中定义变量 定义变量 ``` ansible-playbook release.yml --extra-vars "hosts=XXXX user=XXXXX" ``` 使用变量 ``` --- - hosts: '{{ hosts }}' remote_user: '{{ user }}' tasks: ``` ## 变量的优先级 - 在命令行中使用 -e 优先级最高 - 在inventory中定义的连接变量(比如ansible_ssh_user) - 大多数的其它变量(命令行转换,play中的变量,included的变量,role中的变量等) - 在inventory定义的其它变量 - 由系统发现的facts - 最是 "role默认变量", 这个是最默认的值