您在这里:

目录

Ansible中的变量(Variables)

变量定义

合法变量命名

以字母开头,包含字母、数字和下划线
合法 test,test_12
不合法
12_test,test-12,test#12,test.12

全局变量

定义在配置文件或者命令行中的变量

Play变量

定义在play当中

主机变量

定义在主机或者主机组

Playbook中的变量

定义变量

• 在vars中定义

- hosts: all
    vars: 
    user: test
    home: /home/test

• 在vars_files文件中定义

- hosts: all
    vars_file: 
    - vars/users.yml

users.yml文件中定义的变量改内容
user: test
home: /home/test

变量引用

在playbook中引用变量时,使用双大括号“{{ }}”包围变量名称,而且要在前后括号建保留空格

- name: add user test 
  hosts: [node1,node2,node3]
  vars:
    username: test
  tasks:
    - name: add user {{ username }}
      user:
        name: "{{ username }}"
        uid: 1001
        state: present

...    

注意:行6和行8的区别,当变量放置在赋值的首位时,需要双引号包围

字典变量

字典变量是由key:value方式构成
一个简单的字典:
name:tesla
复杂一点的字典:

users:
    alice:
    name: alice
    sex: female
  bob:
    name: bob
    sex: male
users:
    user_a:
    first_name: user
    last_name: a
    home_dir: /home/user_a
``````yaml
users:
    user_a:
    first_name: user
    last_name: a
    home_dir: /home/user_a
``````yaml
users:
    user_a:
    first_name: user
    last_name: a
    home_dir: /home/user_a
``````yaml
users:
    user_a:
    first_name: user
    last_name: a
    home_dir: /home/user_a
```引用方式:
• 如果需要获取bob的性别,表达式:
users.bob.sex或者users['bob']['sex']
以下是一个字典变量引用列子
```yaml
vars:
  users:
    alice:
      name: Alice Appleworth
      telephone: 123-456-7890
    bob:
      name: Bob Bananarama
      telephone: 987-654-3210
tasks:
  # with predefined vars
  - name: Print phone records
    debug:
      msg: "User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
    loop: "{{ lookup('dict', users) }}"

列表变量

如下是一个列表变量的定义,列表变量显著特征是通过破折号“-”或者通过中括号"[ ]"标识,要获得name的值,引用方式:employee1[0];同理,要获得employed的值,引用方式:employee1[3]
employee1:

  • name: Martin D'vloper
  • job: Developer
  • skill: Elite
  • employed: True
    employee1[name: Martin D'vloper,job: Developer,skill: Elite,employed: True]

    字典和列表混合

    如下employee2就是一个包含字典的单项列表,而employees就是一个包含字典的多项列表

    
    ```yaml
    employee2:
  • name: Martin D'vloper
    job: Developer
    skill: Elite
    employed: True
    employees:
  • name: Martin D'vloper
    job: Developer
    skill: Elite
    employed: True
  • name: bob
    job: Developer
    skill: Elite
    employed: True

    字典和列表变量的引用

    ansible 使用缩进来分割,如果有多行前面带有 – 的话,那就是 list , 如果不是则是 dict 。如果是多个 dict 并列组成一个 list , 那每个 dict 的第一对 key:value 需要有一个 – ,请参考最后这个例子里的变量内容。下面看看列表和字典如何引用:
    `ok: [localhost] => {
    "msg": {
    "changed": false,
    "datastores": [
    {
    "accessible": true,
    "capacity": 23289061703680,
    "datastore_cluster": "N/A",
    "freeSpace": 7484953591808,
    "maintenanceMode": "normal",
    "multipleHostAccess": true,
    "name": "vsanDatastore",
    "provisioned": 30259182717392,
    "type": "vsan",
    "uncommitted": 14455074605520,
    "url": "ds:///vmfs/volumes/vsan:52afb8b6b48c7f0c-6044a2809bb85992/"
    }
    ],
    "failed": false
    }
    }`
    如果要获取"freeSpace"数值,首先我们知道datastores是一个列表变量,因为datastores后面是[],而且该变量中只有一个列表项(只有一个[]).
    那么引用第一个列表项的表达式为:datastores[0]
    "datastores": [
    {

    }
    ],
    而在这个列表项中有嵌套一个字典(显示在{}中部分内容):
    字典变量的引用方式是:key.dict或者key['dict'],注意,如果dict包含“.”时候,使用后一种引用方式,如key['192.168.10.5']。
    {
    "accessible": true,
    "capacity": 23289061703680,
    "datastore_cluster": "N/A",
    "freeSpace": 7484953591808,
    "maintenanceMode": "normal",
    "multipleHostAccess": true,
    "name": "vsanDatastore",
    "provisioned": 30259182717392,
    "type": "vsan",
    "uncommitted": 14455074605520,
    "url": "ds:///vmfs/volumes/vsan:52afb8b6b48c7f0c-6044a2809bb85992/"
    }
    那么,在以上字典和列表嵌套的情形下,需要引用到“FreeSpace”的值,写法应该是:
    datastores[0].freeSpace或者datastores[0]['freeSpace']

    主机和主机组变量

    变量定义

    在清单文件中定义
    因为不方便管理,该种方法已经不推荐使用

    [servers]
    servera remote_user=test  # 为主机定义变量
    [webserver]
    web1
    web2
    [webserver:vars]
    remote_user=test # 为主机组定义变量

    使用变量文件夹

    在inventory文件同级别目录下,创建host_vars和group_vars文件夹
    如果需要为“servera”创建变量,那么,创建yaml格式文件host_vars/servera,文件内容为:
    remote_user: test
    如果需要为主机组“webserver”创建变量,那么创建yaml格式文件group_vars/webserver,文件内容为:
    remote_user: test
    此时是的目录结构类似如下:

    project
    |
    |--ansible.cfg
    |--group_vars
    |       |--webserver
    |
    |--host_vars
    |       |--servera
    |
    |--inventory
    |
    |--playbook.yml

    数据变量

    定义

    users:
    user_a:
    first_name: user
    last_name: a
    home_dir: /home/user_a

    引用变量

    users.user_a.home_dir #返回/home/user_a
    或者
    users[‘user_a’][‘home_dir’]

    变量优先级别

    命令行变量>>playbook变量>>主机和主机组变量

发表回复

你的电子邮件地址不会被公开 * 为必填字段

提交评论

FLOWEVER

相关文章

双认证加持!江苏川流信息以国际标准引领IT服务新标杆

我们怀着无比自豪的心情向您宣布,江苏川流信息技术有限公司正式通过ISO20000信息技术服务管理体系认证和ISO27001信息安全管理体系认证!这两项国际权威认证的获得,不仅是对我们专业能力的认可,更标志着我们在IT服务集成领域的信息安全和服务管理水平已跻身行业先进行列!

当好看门狗

防火墙作为网络边界的第一道防线,扮演着至关重要的角色,特别是近两年随着AI技术的广泛应用,为生活带来了便利同时,也让网络攻击变的更容易,新型威胁迭代更迅速、智能化、隐蔽化。

远亲不如近邻

在芯片的世界里,数据的处理和存储就像是一场紧张刺激的接力赛。传统的数据处理模式下,数据在存储器和处理器之间的传输,就如同接力选手在赛道上绕了一个大圈,耗时又费力,极大地影响了数据处理的效率。

真香定律

如今,企业数字化转型就像一场冒险,IT 基础设施得稳得强,深信服超融合这个国产品牌,正成为众多企业的“秘密武器”,凭啥?