12.23Ansible定义变量

一、Ansible定义变量

1.设置变量的方法

在主机清单中配置变量
在命令行定义变量
在playbook中定义变量
使用内置变量
通过vars_file定义变量
通过host_vars和group_vars定义变量

2.变量优先级测试

1)在playbook中定义变量

[root@m01 project]# vim test.yml 
- hosts: web_group
  vars:
    file: playbook_vars
  tasks:
    - name: Touch File
      file:
        path: /tmp/{{ file }}
        state: touch

2)在vars_file中定义变量

#1.定义变量文件
[root@m01 project]# vim vars.yml
file: vars_file

#2.剧本调用
[root@m01 project]# vim test.yml 
- hosts: web_group
  vars:
    file: playbook_vars
  vars_files: /project/vars.yml
  tasks:
    - name: Touch File
      file:
        path: /tmp/{{ file }}
        state: touch

3)主机清单定义变量

[root@m01 project]# vim /etc/ansible/hosts 
[web_group:vars]
file=inventory_vars

4)host_vars 定义变量

[root@m01 project]# vim host_vars/web01
file: host_vars

5)group_vars定义变量

[root@m01 project]# vim group_vars/web_group 
file: group_vars

6)命令行定义变量

[root@m01 project]# ansible-playbook test.yml -e "file=command"

7)测试优先级结果

命令行优先级 > vars_file优先级 > playbook_vars优先级 > host_vars优先级 > group_vars优先级 > 主机清单中主机组的优先级 > 主机清单中整合组的优先级

3.层级定义变量

#编辑变量文件
[root@m01 ~]# vim vars_file.yml
lamp:
  framework:
    web_package: httpd
    db_package: mariadb-server
    php_package: php

lnmp:
  framework:
    web_package: nginx
    db_package: mysql
    php_package: php

lnmt:
  framework:
    web_package: nginx
    db_package: mysql
    java_package: tomcat

#编辑playbook文件
[root@m01 ~]# vim test.yml
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install LAMP httpd
      yum:
        name: "{{ lamp.framework.web_package }}"

    - name: Install LAMP mariadb-server
      yum:
        name: "{{ lamp.framework.db_package }}"

    - name: Install LAMP php
      yum:
        name: "{{ lamp.framework.php_package }}"
        
#官方推荐写法
[root@m01 ~]# vim test.yml
- hosts: web_group
  vars_files: ./vars_file.yml
  tasks:
    - name: Install LAMP httpd
      yum:
        name: "{{ lamp['framework']['web_package'] }}"

    - name: Install LAMP mariadb-server
      yum:
        name: "{{ lamp['framework']['db_package'] }}"

    - name: Install LAMP php
      yum:
        name: "{{ lamp['framework']['php_package'] }}"

#执行playbook
[root@m01 ~]# ansible-playbook test.yml

二、变量注册

当absible的模块在运行之后,其实都会返回一些result结果,就像是执行脚本,我们有的时候需要脚本给我们一些return返回值,我们才知道,上一步是否可以执行成功,但是…默认情况下,ansible的result并不会显示出来,所以,我们可以把这些返回值’存储’到变量中,这样我们就能通过’调用’对应的变量名,从而获取到这些result,这种将模块的返回值,写入到变量中的方法被称为变量注册

1.使用ad-hoc模式会得到返回结果
[root@m01 project]# ansible web01 -m shell -a 'ls -l /tmp'
web01 | CHANGED | rc=0 >>
total 0
drwx------. 2 root root 41 Dec 23 15:07 ansible_command_payload_Q9bnkr
-rw-r--r--. 1 root root  0 Dec 23 14:54 command
-rw-r--r--. 1 root root  0 Dec 23 14:57 host_vars
-rw-r--r--. 1 root root  0 Dec 23 14:56 playbook_vars
-rw-r--r--. 1 root root  0 Dec 23 14:55 vars_file
2.使用playbook执行同样的命令得不到结果
[root@m01 project]# cat test.yml 
- hosts: web_group
  tasks:
    - name: Touch File
      shell: "ls -l /tmp"
      
[root@m01 project]# ansible-playbook test.yml 
PLAY [web_group] *****************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [web01]
ok: [web02]

TASK [Touch File] ****************************************************************************************************
changed: [web01]
changed: [web02]

PLAY RECAP ***********************************************************************************************************
web01                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
3.使用注册变量的方式

1)注册一个变量

[root@m01 project]# vim test.yml 
- hosts: web_group
  tasks:
    - name: Touch File
      shell: "ls -l /tmp"
      register: get_dir_list

2)调用并输出变量

[root@m01 project]# vim test.yml 
- hosts: web_group
  tasks:
    - name: Touch File
      shell: "ls -l /tmp"
      register: get_dir_list

    - name: Get Register
      debug:
        msg: "{{ get_dir_list }}"

3)只输出想要的部分

[root@m01 project]# vim test.yml 
- hosts: web_group
  tasks:
    - name: Touch File
      shell: "ls -l /tmp"
      register: get_dir_list

    - name: Get Register
      debug:
        msg: "{{ get_dir_list['stdout_lines'] }}"
4.变量注册一般使用场景
[root@m01 project]# cat php.yml 
- hosts: web_group
  tasks:
    - name: Tar php Package
      unarchive:
        src: /project/package/php.tar.gz
        dest: /tmp/

    - name: Check php Install Status
      shell: "rpm -qa | grep php | wc -l"
      register: get_php_instll_status

    - name: Install php Server
      shell: "yum localinstall -y /tmp/*.rpm"
      when: get_php_instll_status.stdout_lines == 0

    - name: Config php Server
      copy:
        src: /project/conf/php.ini
        dest: /etc/

    - name: Config php Server
      copy:
        src: /project/conf/www.conf
        dest: /etc/php-fpm.d/

    - name: Start php Server
      systemd:
        name: php-fpm
        state: started
三、facts缓存

Ansible facts是在被管理主机上通过Ansible自动采集发现的变量。facts包含每台特定的主机信息。比如:被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等。

1.使用场景
1.通过facts缓存检查CPU,来生成对应的nginx配置文件
2.通过facts缓存检查主机名,生成不同的redis配置文件
3.通过facts缓存检索物理机的内存大小来生成不通的mysql配置文件

综上所述的Ansible facts类似于saltstack中的grains对于做自动化的小伙伴是非常有用滴。

2.关闭facts缓存
[root@m01 ~]# vim facts.yml
- hosts: web_group
  gather_facts: no   #关闭信息采集
  tasks:
  
#如果不使用内置变量,可以关闭会提高剧本的执行速度,如果使用内置变量,那么不能关闭facts缓存
3.一般使用
#1.配置redis配置文件
[root@m01 ~]# vim /etc/redis.conf
bind {{ ansible_eth1.ipv4.address }}

#2.编写剧本
- hosts: web_group
  tasks:
    - name: Install Redis Server
      yum:
        name: redis
        state: present

    - name: Config Redis Server
      template:
        src: /etc/redis.conf
        dest: /etc/
        
#3.查看受控端配置
[root@web01 ~]# vim /etc/redis.conf
bind 172.16.1.7
[root@web02 ~]# vim /etc/redis.conf
bind 172.16.1.8
### 回答1: icarus-3.3.12.23是一个版本号,通常用于软件开发或系统更新的标识。它表示某个软件、操作系统或系统组件的版本,其icarus可能是软件或项目的名称,3.3.12.23则代表该软件或项目的具体版本号。 版本号常用于区分不同版本的软件,以便用户能够追踪和了解软件的开发历程和功能更新。在软件开发过程,每个版本通常会修复一些已知的问题、提供一些新功能或改进现有功能。因此,通过版本号,用户可以知道当前软件所具备的功能和性能,并据此决定是否进行升级或更新。 icarus-3.3.12.23的版本号的每个数字可能代表特定含义。例如,3可能表示第三个主要版本,3.3可能表示该版本有三个次要更新,12表示该版本的第12个修复,23可能表示该版本的第23个小改进。 总之,icarus-3.3.12.23是一个版本号,用于表示某个软件或项目的具体版本,可以帮助用户识别软件的发展历程和了解软件的功能和性能。 ### 回答2: icarus-3.3.12.23是一个版本号。版本号通常用来标识软件、应用程序或系统的特定版本。在这个例子,icarus-3.3.12.23可能是一个软件或应用程序的版本号。 版本号通常由一串数字和点号组成,每个点号之间的数字代表不同的层级。以icarus-3.3.12.23为例,最左边的数字3可能代表主要版本号,表示该软件或应用程序经历了重大的改进或功能增加。接下来的3.12可能代表次要版本号,表示该版本引入了一些较小的更改或修复。最后的23可能代表修订版本号,表示对该软件或应用程序进行了一些小的修改或更新。 版本号的目的是为了帮助用户和开发人员追踪和识别软件的不同版本。通过版本号,用户可以了解到一个软件或应用程序的重要特点、功能和修复的问题。对于开发人员来说,版本号对于记录和追踪代码更改以及软件版本的发布也非常重要。 总之,icarus-3.3.12.23是一个标识某个软件或应用程序特定版本的版本号,它帮助用户和开发人员追踪软件版本、功能和修复的重要工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值