zoukankan      html  css  js  c++  java
  • ansble剧本--day04--变量使用

    ansible之变量简述

    变量存在的意义

    变量提供了便捷的方式来管理Ansible playbook的每一个项目中的动态值,比如nginx-1.6.3这个软件包的版本,在其它地方或许会反复使用,那么如果讲此值设置为变量,然后再在其他的playbook中调用,会方便许多。如此一来还方便维护,减少维护的成本。
    

    定义变量的方式

    1.通过命令行进行变量定义
    
    2.在playbook文件中进行变量定义
    
    3.通过Inventory主机信息文件中进行变量定义
    

    playbook文件定义变量

    #缺陷:
    	· 其他的playbook(也就是文中hosts主机)无法使用该变量
    
    ## 变量定义:
    - hosts: all
      vars:
        zls_anzhuangbao:
          - httpd
          - mariadb
    
      tasks:
        - name: Install httpd and mariadb
          yum:
    ## 调用变量
            name: "{{ zls_anzhuangbao }}"
            state: present
    
    
    - hosts: web_group
    ## 定义变量
      vars:
          - web_server: httpd
          - db_server: mariadb-server
          - php_server:
            - php
            - php-mysql
            - php-pdo
       tasks:
      - name: Install httpd  mariadb php Server
        yum:
          name:
    ## 调用变量
            - "{{ web_server }}"
            - "{{ db_server }}"
            - "{{ php_server }}"
    

    vars_files定义变量

    # 注意:
    	· 刚才在playbook中使用vars定义变量,有一个缺陷,就是其他的playbook无法使用该变量。所以我们可以采取第二种定义变量的方式,在vars_file中定义变量。 
    	
    ## 1.定义变量
    [root@m01 ~]# vim /root/vars_file.yml
    create_file: zls_vars_file
    
    
    ## 2.调用变量
    [root@m01 ~]# vim var1.yml 
    - hosts: web01
      vars_files: /root/vars_file.yml
      tasks:
        - name: Create file
          file:
            path: /root/{{ create_file }}
            state: touch
            
    ## 3.变量优先级
    命令行 > 剧本 > 主机清单
    

    intentory主机信息定义变量

    # 注意:
    	· 在Inventory中定义变量,主机的变量要高于主机组的变量,所以该方法不推荐使用,容易将环境弄乱。
    
    ## 1.定义变量
    [root@m01 ~]# vim /etc/ansible/hosts		
    [web_group:vars]
    create_file=zls_inventory
    
    ## 2.调用变量
    - hosts: web01
      tasks:
        - name: Create file
          file:
            path: /root/{{ create_file }}
            state: touch
    

    官方推荐定义变量

    ├── group_vars
    │   └── web_group		# 此处定义目录必须为主机清单文件中的主机组名
    ├── host_vars
    │   ├── web01			# 此处定义目录必须为主机清单文件中的主机名
    │   └── web02
    
    [root@m01 ansible]# cat host_vars/web01
    create_file: qqq
    [root@m01 ansible]# cat host_vars/web02
    create_file: www
    [root@m01 ansible]# cat group_vars/web_group 
    create_file: xxx
    
    ## 调用阶段
    [root@m01 ansible]# vim var3.yml 
    
    - hosts: web_group
      tasks:
        - name: Create f
          file:
            path: /root/{{ create_file }}
            state: touch
    

    注册变量

    # 什么是注册变量
    · 如在ansible剧本中直接使用shell模块,如查看磁盘信息,返回给ansible的结果其实并不是真正想要的信息,如无法直接显示信息,可调用显示。
    
    
    # 案例演示
    - hosts: web_group
      tasks:
        - name: jieya nginx
          unarchive:
            src: /usr/local/ansible/nginx_php.tgz
            dest: /root
    
        - name: panduan nginx zhuangmeizhuang
          shell: 'ls -l /etc/nginx'					# 使用shell模块查看web_group组中的主机目录信息
          register: nginx_info				        # 使用register调用结果,命名为nginx_info
          ignore_errors: yes                          
    
        - name: get nginx info
          debug:			                                # 配套语句
            msg: "{{ nginx_info.rc }}"	                        # 这里为调用结果显示,rc为子集变量,ls结果有为0,没有则为非零
    
        - name: install nginx
          shell: "cd /root/nginx_php && rpm -Uvh *rpm"
          when: nginx_info.rc != 0					# 可通过变量判断,如不等于0就,进行安装nginx
    

    facts变量

    # 关闭的意义
    	· 默认为开启,开启后每次都需进行信息采集,导致ansible执行速度特别慢,可采用关闭方式
    
    # fasts缓存
          · Ansible facts是在被管理追击上通过Ansible自动采集发现的变量。facts包含每台特定的主机信息。比如:被控端的主机名、IP地址、系统版本、CPU数量、内存状态、磁盘状态等等。
    
    # fasts使用场景
          · 1.通过facts缓存检查CPU,来生成对应的nginx配置文件
          · 2.通过facts缓存检查主机名,生成不同的zabbix配置文件
          · 3.通过facts缓存检索物理机的内存大小来生成不通的mysql配置文件
    
    综上所述的Ansible facts类似于saltstack中的grains对于做自动化的小伙伴是非常有用滴。
    
    ## 关闭facts
    [root@m01 ~]# vim facts.yml
    - hosts: web_group
      gather_facts: no #关闭信息采集
      tasks:
    
    ## facts生成zabbix配置文件
    - hosts: web_group
      vars:
        - zabbix_server: 172.16.1.71
      tasks:
        - name: copy zabbix agent conf
          template:
            src: ./zabbix_agentd.conf
            dest: /tmp/zabbix_agentd.conf
    
    
    ## facts生成mysql配置文件
    - hosts: db_group
      tasks:
        - name: Install mysql server
          yum:
            name: mariadb-server
            state: present
    
        - name: copy mysql  conf
          template:
            src: ./my.cnf
            dest: /etc/my.cnf
    
    
    [root@m01 ~]# vim /etc/my.cnf
    [mysqld]
    basedir=/usr
    datadir=/var/lib/mysql/
    socket=/var/lib/mysql/mysql.sock
    log_error=/var/log/mariadb/mariadb.log
    innodb_buffer_pool_size={{ ansible_memtotal_mb * 0.8 }}
    

    层级变量

    # 编辑变量文件
    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
    
    ## 官方推荐写法
    #官方推荐写法
    [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'] }}"
    
  • 相关阅读:
    Redis的高可用详解:Redis哨兵、复制、集群的设计原理,以及区别
    高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解
    Docker安装Zookeeper并进行操作
    org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
    SpringBoot启动加载yml配置文件出现编码格式错误
    log4j:WARN No appenders could be found for logger ().解决方案
    SpringBoot&Dubbo&Zookeeper远程调用项目搭建
    Postman下载与安装
    echart 饼图图例legend支持滑动
    web app 开发必不可少的滑动插件 Flipsnap
  • 原文地址:https://www.cnblogs.com/tcy1/p/13121621.html
Copyright © 2011-2022 走看看