ansible 自动化运维工具 5 (Ansible中的变量设定和使用方式、 练习)

一、ansible中的变量

  • 变量命名
    只能包含数字,下划线,字母
    只能用下划线或字母开头
  • 变量级别
    全局: 从命令行或配置文件中设定的
    paly: 在play和相关结构中设定的
    主机: 由清单,事实收集或注册的任务
  • 变量优先级设定:
    狭窄范围有限与广域范围

1.示例

如下,变量命名有误,运行失败
请添加图片描述
成功运行
请添加图片描述

二、变量设定和使用方式

1.在playbook中直接定义变量

请添加图片描述

使用变量#
 tasks:
 - name: create user
 user:
 name: "{{ USER }}"

2.在文件中定义变量

变量westos在westos.yml文件中
请添加图片描述
设定两个变量文件,msg输出信息
请添加图片描述
请添加图片描述
请添加图片描述

3.使用循环定义

接下来使用循环定义的方式,使用loop和item实现循环执行
1、在playbook中直接定义变量

---
- name: test
  hosts: 172.25.254.170
  vars:
    user:
      - ttt
      - qqq  
  tasks:          
    - name: user
      user:
        name: "{{ item }}"              代表循环的每一个变量(上面定义的)
        state: present
      loop:                             定义循环
        "{{ user }}"

直接定义变量user,测试创建指定用户;
执行playbook过程如下
请添加图片描述
用户成功建立
请添加图片描述
2、在playbook中指定变量文件 westos.yml

[lr@ansible ansible]$ cat test1.yml 
---
- name: test
  hosts: 172.25.254.170
  vars_files:                                
    - ./westos.yml                     定义文件位置
  tasks:          
    - name: user
      user:
        name: "{{ item }}"             每次执行一个westos的值
        state: absent
      loop:                            循环定义语句,定义westos的值为多个个
        "{{ westos }}"  

删除指定用户
请添加图片描述
nodezz主机查看,用户已被删除
请添加图片描述
编写yml文件
请添加图片描述
执行playbook为node主机安装指定服务,开启并设置开机自启
请添加图片描述
安装成功
请添加图片描述

4.设定主机变量和清单变量

在定义主机变量和清单变量时使用,清单中直接给出变量,yml文件直接执行清单即可引用清单中的变量
清单:定义了westos组里面的USER变量为test

[westos]
172.25.254.170

[westos:vars]
USER=test                 直接给予变量

请添加图片描述
执行playbook如下:
请添加图片描述
test用户成功建立
请添加图片描述

5.目录设定变量

1、针对清单生效

group_vars  **清单变量**,目录中的文件名称与主机清单名称一致
host_vars 	**主机变量**,目录中的文件名称与主机名称一致

建立清单、设定清单变量;
westos 文件名需要和主机清单名一致
请添加图片描述
虽然user.yml目前没有定义USER的变量,但我们已经新建了特定名称的group_vars文件,系统会自动识别此目录。在文件里设定了执行清单westos里的变量USER;
执行playbook,删除指定用户
请添加图片描述
2、针对主机生效
可以针对特定的主机设定特定变量
建立特定的host_vars文件,ansible会自动读取。注意目录中的文件名称与主机名称一致;
执行playbook,建立指定的用户linux
请添加图片描述
用户建立成功
请添加图片描述

6.用命令覆盖变量

原来的USER的变量值为linux
请添加图片描述
使用命令覆盖变量值
请添加图片描述

7.使用数组设定变量

单独建立列表,使用数组设定变量

在这里插入图片描述在这里插入图片描述

内容如下
请添加图片描述
执行playbook
请添加图片描述

8.注册变量

register :把模块输出注册到指定字符串中

---
- name: test play
  hosts: westos
  tasks: 
    - name: shell
      shell: echo hello world
      register: westos               将输出全部注册给变量westos
      
    - name: show                     
      debug:                         debug输出模块
        msg: "{{westos}}"            msg展示返回的变量westos

请添加图片描述
执行playbook
请添加图片描述
当需要输出某个具体的参数时:需要具体指定输出变量
请添加图片描述
shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试;
-e 文件名 :如果文件存在则为真;
由于node主机/mnt目录下不存在hello文件,因此rc=1(返回值)
请添加图片描述
设定忽略错误
请添加图片描述
执行playbook成功
请添加图片描述
继续优化yml文件
请添加图片描述

9.事实变量

事实变量是ansible在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息,当需要使用主机相关信息时不需要采集赋值,直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被称为事实变量。

我们可以使用setup模块获取被管理主机的所有facts信息,可以使用filter来查看指定的信息。setup模块获取的整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最外层的值。我们可以通过以下Ansible Ad-Hoc命令查看facts信息:

查看nodez主机的事实变量
请添加图片描述
过滤所需变量
请添加图片描述
也可以使用yml文件查看具体值;
msg:后面是受控机的hostname
请添加图片描述
facts组件是Ansible用于采集被管理主机设备信息的一个功能,采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac 地址,时间/日期相关数据,硬件信息等。当设定为no,在playbook中关闭事实变量收集,则会报错
请添加图片描述
请添加图片描述

10.魔法变量

1、hostvars: ansible软件的内部信息
eg:
ansible localhost -m debug -m "var=hostvars"
2、group_names: 当前受管主机所在组
eg:
ansible localhost -m debug -m "var=group_names"
3、groups: 列出清单中所有的组和主机
eg:
ansible localhost -m debug -m "var=groups"
4、inventory_hostname: 包含清单中配置的当前授管主机的名称
eg:
ansible localhost -m debug -m "var=inventory_hostname"

示例如下,查看 ansible软件的内部信息
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

三、练习

建立两个虚拟主机及设置默认发布测试页
create web vhost
www.westos.com 80 ------ > /var/www/html
linux.westos.com 80 ------> /var/www/virtual/westos.com/linux

数组变量:
请添加图片描述
playbook

---
- name:
  gather_facts: no 
  vars_files: ./vhost_list.yaml
  hosts: westos
  tasks:
    - name: install web
      dnf:
        name: httpd
        state: latest

    - name: create index doc
      file:
        path: "{{ item.doc }}"
        state: directory
      loop:
        "{{ WEBS }}"

    - name: create index file
      copy:
        content: "{{ item.index }}"
        dest: "{{ item.doc }}/index.html"
      loop:
        "{{ WEBS }}"

    - name: clear config
      file:
        name: /etc/httpd/conf.d/vhost.conf
        state: absent

    - name: configure vhost
      lineinfile:
        path: /etc/httpd/conf.d/vhost.conf
        create: yes
        line: |+
          <VirtualHost *:80>
            DocumentRoot "{{ item.doc }}"
            ServerName "{{ item.webname }}"
          </VirtualHost>
      loop:
        "{{ WEBS }}"
    - lineinfile:
        path: /etc/httpd/conf.d/vhost.conf
        line: |+
          <VirtualHost _default_:80>
            DocumentRoot /var/www/html
          </VirtualHost>
        insertbefore: BOF
    - name: start service
      service:
        name: httpd
        state: restarted
        enabled: yes

    - name: configure firewalld
      firewalld:
        service: http
        state: enabled
        permanent: yes
        immediate: yes

请添加图片描述
请添加图片描述
执行

[lr@ansible ansible]$ ansible-playbook web.yaml

在node主机可以看到Apache虚拟主机vhosts.conf配置文件
请添加图片描述
请添加图片描述
以及虚拟主机对应的默认发布目录和页面
请添加图片描述
在真机做好本地解析,就可以在网页或者curl测试访问啦~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值