ansible变量

变量规则

ansible的变量规则和python差不多:

  • 不能以数字和特殊符号开头,可以以字母,下划线开头
  • 不能含有空格和特殊字符,可以含有下线线

变量优先级

!!! 变量的优先级: https://www.jianshu.com/p/db7f3dece8d1

cmd > playbook > inventoy

  • 命令行值(eg “-u user”)
  • plabook
  • inventoy

定义变量

在这里插入图片描述

使用变量

使用变量时需要使用{{ 变量名 }},括号内的变量名要有前后一个空格.
如果使用debug的msg使用变量时,要以""(双引号)将msg的字符串引起来.
使用debug模块中的var调用变量时,直接输入变量名.

---
- name: debug模块演示
  hosts: serverc.lab.example.com
  tasks:
    - name: msg演示
      debug:
        msg: "主机名是:{{ ansible_hostname }}"
    - name: var演示
      debug:
        var: ansible_hostname

在主机清单中定义和使用变量

[internetweb]
serverb.lab.example.com user=tgb

[intranetweb]
servera.lab.example.com user=lxs
serverc.lab.example.com user=hzz
serverd.lab.example.com user=hfq

指定客户端的python路径
# 编辑主机清单,指定对应组的python路径
[all:vars]
ansible_python_interpreter=/usr/bin/python3

示例:主机清单中定义user变量

在这里插入图片描述

命令行指定变量值—优先级是最高的

ansible命令行指定变量值的优先级是最高的

[student@workstation deploy-review]$ ansible-playbook vartest.yml -e user="李老师"

PLAY [var变量测试] *********************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [serverc.lab.example.com]
ok: [servera.lab.example.com]
ok: [serverb.lab.example.com]
ok: [serverd.lab.example.com]

TASK [debug模块演示] *******************************************************************************************************
ok: [serverb.lab.example.com] => {
    "msg": "李老师你好"
}
ok: [servera.lab.example.com] => {
    "msg": "李老师你好"
}
ok: [serverc.lab.example.com] => {
    "msg": "李老师你好"
}
ok: [serverd.lab.example.com] => {
    "msg": "李老师你好"
}

示例:plabook中使用主机清单的变量
---
- name: var变量测试
  hosts: all
  tasks:
    - name: debug模块演示
      debug:
        msg: "{{ user }}你好"

执行结果
在这里插入图片描述


在playbook中使用变量


示例1
---
- name: var变量测试
  hosts: all
  vars:
    user: 庚老师
  tasks:
    - name: debug模块演示
      debug:
        msg: "{{ user }}你好"

执行结果
在这里插入图片描述


示例2
---
- name: copy模块示例1
  hosts: node1
  tasks:
    - name: 将变量中的内容添加到文件中
      copy:
        content:  "主机名是:{{ ansible_hostname }}\nbios版本是:{{ ansible_bios_version }}\n"
        dest: /tmp/facts.txt
        
- name: 打印myvar变量和myvar2变量
  hosts: node1
  tasks:
    - name: 打印node1主机清单中的变量
      debug:
        msg: "{{ myvar }},{{ myvar2 }}"

- name: copy模块示例2
  hosts: node2
  tasks:
    - name: 将变量中的内容添加到node2的文本中
      copy:
        content: "{{ yourname }}\n"
        dest: /tmp/facts.txt

- name: playbook中定义变量示例
  hosts: node1
  tasks:
    - name: playbook中定义变量
      shell: hostname
      # register表示将shell输出的信息存到myvar变量中
      register: myvar


    - name: 打印上面定义的myvar变量(也就是hostname的信息)
      debug:
        msg:  "{{ myvar }}"

    - name: 显示myvar的指定key的数据(子变量)
      debug:
        msg: "运行的节点是{{ myvar.stdout }}"

矩阵变量的定义和调用

在这里插入图片描述

矩阵变量文件定义

[student@workstation deploy-review]$ cat vars_file1.yml
users:
  tgb:
    name: tangguobin
    money: 1
    home: none
  hzz:
    name: hanzhuangzhuang
    money: 10
    home: hanjiacun

plabook导入矩阵变量文件

导入矩阵变量文件需要使用vars_files:
矩阵文件前要加-
可以导入多个矩阵变量文件

在这里插入图片描述

---
- name: 矩阵变量示例
  hosts: serverd.lab.example.com
  vars_files:
    - vars_file1.yml
  tasks:
    - name: debug模块打印矩阵变量
      debug:
        var: users.tgb.name
    - debug:
        var: users.tgb.money
    - debug:
        var: users.tgb.home
    - debug:
        var: users.hzz.name
    - debug:
        var: users.hzz.money
    - debug:
        var: users.hzz.name

在这里插入图片描述

矩阵变量示例2

单独定义个变量文件,在playbook中用vars_files调用该变量文件

  • 变量文件
---
iname: cloud
ipass: '123456'

  • palybook中导入变量文件
    在这里插入图片描述
---
- name: 在剧本中导入变量文件
  hosts: all
  vars_files: variables.yml
  tasks:
    - name: 创建用户
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"

  • 执行结果
    在这里插入图片描述

  • 引用变量文件删除刚才创建的用户

---
- name: 引用变量文件删除用户
  hosts: all
  vars_files: variables.yml
  tasks:
    - name: 删除用户
      user:
        name: "{{ iname }}"
        state: absent
        remove: yes

在这里插入图片描述

变量作用域


剧本中定义变量


剧本中定义变量来创建和删除用户
---
- name: 剧本文件中定义变量来创建和删除用户
  hosts: all
  vars:
    iname: omaidb
    ipass: '123456'

  tasks:
    - name: 使用剧本中定义的变量来创建用户
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"

  tasks:
    - name: 使用剧本中定义的变量来删除用户
      user:
        name: "{{ iname }}"
        state: absent
        remove: yes

剧本中定义提示变量创建用户
---
- name: 剧本中的提示变量
  hosts: all
  vars_prompt:      # 定义提示变量
    - name: iname              # 定义iname空变量
      prompt: "请输入用户名"    # 提示输入用户名
      private: no              # 是否隐私信息,no将回显输入内容
    - name: ipass              # 定义ipass空变量
      prompt: "请输入密码"      # 提示输入密码
      private: yes             # 是否隐私信息,yes将不显示输入内容
  tasks:
    - name: 从提示变量中创建用户
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512')}}"

执行ansible-playbook命令时使用-e参数定义变量


  • 编写剧本
---
- name: 演示ansible-playbook命令执行时-e参数定义变量
  hosts: all
  tasks: 
    - name: 创建用户
      user:
        name: "{{ iname }}"
        password: "{{ ipass | password_hash('sha512') }}"

  • 执行ansible-play变量
# 执行剧本
[rhel8 root ~/ansible/play]# ansible-playbook -C var_local.yml -e iname="omaidb" -e ipass="123456"

# 查看node1执行结果
[node1 root ~]# id omaidb
uid=1000(omaidb) gid=1000(omaidb)=1000(omaidb)

# 查看node2执行结果
[node2 root ~]# id omaidb
uid=1000(omaidb) gid=1000(omaidb)=1000(omaidb)

  • 演示自定义变量删除用户
---
- name: 演示ansible-playbook命令执行时-e参数定义变量
  hosts: all
  tasks: 
    - name: 删除用户
      user:
        name: "{{ iname }}"
        state: absent
        remove: yes

  • 执行结果
    在这里插入图片描述

ansible管理变量基础练习

---
- name: test use var
  hosts: webserver
  vars:
    web_pkg: httpd
    firewall_pkg: firewalld
    python_pkg: python3-PyMySQL
    web_service: httpd
    firewall_servcie: firewalld
    rule: http
  tasks:
    - name: install pkg
      yum:
        name:
          - "{{ web_pkg }}"
          - "{{ firewall_pkg }}"
          - "{{ python_pkg }}"
    - name: service
      service:
        name: "{{ firewall_servcie }}"
        enabled: true
        state: started
    - name: service
      service:
        name: "{{ web_service }}"
        enabled: true
        state: started

    - copy:
        content: "test"
        dest: /var/www/html/index.html

    - firewalld:
        service: "{{ rule }}"
        immediate: yes
        permanent: yes
        state: enabled

- name: check_web
  hosts: localhost
  tasks:
    - name: check_web_page_status_code
      uri:
        url: http://servera.lab.example.com
        status_code: 200

总结:

一个tasks下不能有多个-name,否则会提示警告: 发现重复的 dict 键(任务)。 仅使用最后定义的值。
且只运行最后一个任务.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值