ansible——组织变量-创新互联

在ansible中有很多种定义变量的方式,我们没必要去关注太多,只需要掌握几个常用的变量定义和应用方式即可,这篇文章记录的是将变量定义在外部文件中,然后去引入这些外部文件中的变量。

创新互联主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务田家庵,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

引入保存了变量的文件有两种方式:include_vars和vars_files。此外,还可以在命令行中使用“-e”或“--extra-vars”选项来引入。

1、vars_files

vars_files是一个play级别的指令,可用于在解析playbook的截断引入一个或多个保存了变量的外部文件。

例如,pb.yml文件如下:

---
- name: play1
  hosts: node
  gather_facts: false
  vars_files:
    - varfile1.yml
    - varfile2.yml
  tasks:
    - debug:
        msg: "var in varfile1: {{var1}}"
    - debug:
        msg: "var in varfile2: {{var2}}"

pb.yml文件通过vars_files引入了两个变量文件,变量文件的语法格式如下:

[root@ansible roles]# cat varfile1.yml         #第一个变量文件内容如下
---
var1: "value1"
var11: "value11"
[root@ansible roles]# cat varfile2.yml         #第二个变量文件内容如下
---
var2: "value2"
var22: "value22"

注意:vars_files指令是play级别的指令,且是在解析playbook的时候加载并解析的,所以所引入的变量是play范围内可用的,其他play不可使用这些变量。

2、include_vars

include_vars指令也可用于引入外部变量文件,它和vars_files不同,一方面,include_vars是模块提供的功能,它是一个实实在在的任务,所以在这个任务执行之后才会创建变量。另一方面,既然include_vars是一个任务,他就可以被一些task级别的指令控制,如when指令。

栗子如下:

[root@ansible roles]# cat include_vars.yml 
---
- name: play1
  hosts: localhost
  gather_facts: false
  tasks:
    - name: include vars from files
      include_vars: varfile1.yml
     when: 3 > 2
    - debug:
        msg: "var in varfile1:{{var1}}"

上面的栗子中引入变量文件的方式是直接指定文件名,include_vars: varfile1.yml,也可以明确使用file参数来指定路径,如下:

- name: include vars from files
      include_vars:
        file: varfile1.yml

如果想要引入多个文件,可以使用循环的方式,例如:

- name: include vars from files
      include_vars:
        file: "{{item}}"
      loop:
        - varfile1.yml
        - varfile2.yml

需要注意的是,include_vars在引入文件的时候要求已经存在,如果有多个可能的文件但不确定文件是否已经存在,可以使用with_first_found指令或者lookup的first_found插件,他们的作用相同,都用于从文件列表中找出存在的文件,找到后立即停止。

栗子如下:

  tasks:
    - name: include vars from files
      include_vars:
        file: "{{item}}"
     with_first_found:
        - varfile1.yml
        - varfile2.yml
        - default.yml
#等价于

  tasks:
    - name: include vars from files
      include_vars:
        file: "{{ lookup('first_found',any_files) }}"
      vars:
        any_files:
          - varfile1.yml
          - varfile2.yml
          - default.yml

此外,include_vars还能从目录中导入多个文件,默认会递归到子目录中,例如:

- name: include vars from files
      include_vars:
        dir: vars/all

3、--extra-vars选项

ansible-playbook命令的-e选项或者--extra-vars选项也可以用来定义变量或引入变量文件

栗子:

#定义单个变量
ansible-playbook -e 'var1="value1"'  xxx.yml
#定义多个变量
ansible-playbook -e 'var1="value1" var2="value2"'  xxx.yml
#引入单个变量文件
ansible-playbook -e '@varfile1.yml'  xxx.yml
#引入多个变量文件
ansible-playbook -e '@varfile1.yml' -e '@varfile2.yml'  xxx.yml

因为是通过选项的方式来定义变量的,所以它所定义的变量是全局的,对所有play都有效。

通常来说,不建议使用-e选项,因为这样既不透明,也不友好,要求我们记住要定义哪些变量。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:ansible——组织变量-创新互联
标题路径:http://csdahua.cn/article/coopjp.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流