Ansible之Varialbes—3

作者: 静如止水yw | 来源:发表于2019-10-13 16:55 被阅读0次

    变量的基本概述
    变量的使用
    变量冲突
    变量注册
    facts变量


    一、变量的基本概述


    变量的含义

    以一个固定的字符串表示一个不固定的值


    二、变量的使用


    • 定义变量
      1.在playbook中定义变量
      vars:表示关键字
    root@manager~/project1]# cat f2.yml 
    - hosts: webservers
      vars: 
        - file_name: playbook_vars
      #调用共享var_file文件
      vars_files: ./vars_file.yml
      tasks:
        - name: Create New File
          file: 
            path: /tmp/{{ file_name }}
            state: touch
    
    传输完成后,会在web端生成一个playbook_vars
    [root@web~]# ls /tmp/
    playbook_vars
    

    2.vars_file 属于一种共享的方式

    [root@manager~/project1]# cat vars_file.yml 
    web_packages: httpd
    ftp_packages: vsftpd
    
    [root@manager~/project1]# cat f2.yml 
    - hosts: webservers
      vars: 
        - file_name: playbook_vars
      #调用共享var_file文件
      vars_files: ./vars_file.yml
      tasks:
        - name: Create New File
          file: 
            path: /tmp/{{ file_name }}
            state: touch
        - name: Installed Packages {{ web_packages }}
          yum:
            name: "{{ web_packages }}"
            state: present
    
    • 在inventory主机清单中定义变量
      1.清单文件中直接定义 hosts文件定义
    [root@manager~/project1]# cat hosts
    [webservers]
    172.16.1.7 
    172.16.1.8 
    [webservers:vars]
    file_name=hostsfile_group_vars
    
    [root@manager~/project1]# cat f3.yml 
    - hosts: webservers
      tasks:
        - name: Create New File
          file: 
            path: /tmp/{{ file_name }}
            state: touch
    [root@web~]# ls /tmp/
    hostsfile_group_vars
    

    2.创建hosts_vars group_vars 目录

    [root@manager~/project1]# mkdir host_vars
    [root@manager~/project1]# mkdir group_vars
    
    #1.单个主机定义和使用方式 (host_vars能分别对不同的主机定义变量)
    [root@manager project1]# cat host_vars/172.16.1.7 
    host_vars_name: 172.16.1.7
    [root@manager project1]# cat host_vars/172.16.1.8 
    host_vars_name: 172.16.1.8
    
     [root@manager project1]# cat f4.yml 
    - hosts: webservers
      tasks:
        - name: Create New File
          file:
            path: /opt/{{ host_vars_name }}
            state: touch
    
    #2.针对主机组定义的方式 
    #给指定的webserver组设定变量.其他组主机无法使用该变量
    [root@manager project1]# cat group_vars/webservers 
    group_host_vars: webservers
    
    [root@manager project1]# cat f5.yml 
    - hosts: webservers
      tasks:
        - name: Create New File {{ group_host_vars }}
          file:
            path:  /opt/{{ group_host_vars }}
            state: touch
    
    #3.针对主机组定义的方式  (给所有的主机和主机组设定变量)
    [root@manager project1]# cat group_vars/all 
    group_host_vars: all
    ①单个主机定义和使用方式 (host_vars能分别对不同的主机定义变量)
    [root@manager project1]# cat host_vars/172.16.1.7 
    host_vars_name: 172.16.1.7
    [root@manager project1]# cat host_vars/172.16.1.8 
    host_vars_name: 172.16.1.8
    [root@manager project1]# cat f4.yml 
    - hosts: webservers
      tasks:
        - name: Create New File
          file:
            path: /opt/{{ host_vars_name }}
            state: touch
    ② 针对主机组定义的方式(给指定的webserver组设定变量,其他组无法使用该变量)
    [root@manager~/project1]#  cat group_vars/webservers 
    group_host_vars: webservers
    
    [root@manager~/project1]# cat f5.yml 
    - hosts: web
      tasks:
        - name: Create New File {{ group_host_vars}}
          file:
            path: /opt/{{ group_host_vars }}
            state: touch
    ③ 针对主机组定义的方式 (给所有的主机和主机组设定变量)
    [root@manager~/project1]#  cat group_vars/all
    group_host_vars: all
    
    [root@manager~/project1]# cat f5.yml 
    - hosts: web
      tasks:
        - name: Create New File {{ group_host_vars}}
          file:
            path: /opt/{{ group_host_vars }}
            state: touch
    
    • 通过外置传参定义变量 -e
    [root@manager~/project1]# cat f6.yml 
    - hosts: web
      tasks:
        - name: Create New File {{ web_vars}}
          file:
            path: /opt/{{ web_vars }}
            state: touch
    [root@manager~/project1]#  ansibe-palybook -i hosts f6.yml -e "web_vars=123"
    [root@backup~]# ls /opt/   #(172.16.1.41)
    123  webservers
    

    三、变量冲突


    定义相同的变量不同的值,来测试变量的优先级,操作步骤:
    ① 在playbook中定义vars变量
    ② 在playbook中定义vars_files变量
    ③ 在inventory主机定义变量
    ④ 在inventory主机组定义变量
    ⑤ 在host_vars中定义变量
    ⑥ 在group_vars中定义变量组
    ⑦ 通过执行命令传递变量
    
    优先级测试:
    外置传入参数优先级最高 ---> playbook ( vars_files(共享)--->vars(私有) )  
    ---> host_vars  --> group_vars/group_name ---> group_vars/all
    

    四、变量注册


    [root@manager project1]# cat f8.yml 
    - hosts: webservers
      tasks:
            # System_Status=$(netstat -lntp)
        - name: Get Network Status
          shell: netstat -lntp | grep "nginx"
          register: System_Status
            # echo "$System_Status"
        - name: Debug output Variables
          debug:
            msg: "{{ System_Status.stdout_lines }}"
    

    五、facts变量


    Ansible facts是在被管理主机上通过ansible自动采集发现的变量。facts包含每台特定的主机信息。如被控端主机的主机名、ip地址、系统版本、CPU数量、内存状态、磁盘状态……
    facts使用场景
    1)通过facts变量检查被控端硬件CPU信息,从而生成不同的Nginx配置文件
    2)通过facts变量检查被控端主机名称信息,从而生成不同的Zabbix配置文件
    3)通过facts变量检查被控端内存状态信息,从而生成不同的memcached的配置文件
    4)通过facts变量……

    #1.根据主机的cpu信息,生成不同的配置.
        A: 1核心    work_process 1;
        B: 2核心    work_process 2;   
    [root@manager~/project1]# cat f10.yml 
    - hosts: webservers
      tasks:  
        - name: Configure Nginx.conf
          template:
            src: ./file/nginx.conf.j2
            dest: /etc/nginx/nginx.conf
    [root@manager~/project1]# cat file/nginx.conf.j2 
    user www;
    worker_processes  {{ ansible_processor_vcpus }};
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    events {
        worker_connections  {{ansible_processor_vcpus * 1024 }};
    }
    #2.根据主机名称设定不同配置文件
        zabbix_agent
            Server:   ===> 指向172.16.1.61
            Hostname:      web01   web02
    [root@manager project1]# cat ./file/zabbix_agent.conf.j2 
    Server={{ zabbix_server_ip }}
    ServerActive={{ zabbix_server_ip }}
    Hostname={{ ansible_hostname }}
    [root@manager project1]# cat f11.yml 
    - hosts: webservers
      vars:
        - zabbix_server_ip: 172.16.1.61
      tasks:
        - name: Configure zabbix-agent.conf
          template:
            src: ./file/zabbix_agent.conf.j2
            dest: /tmp/zabbix-agent.conf
            
    #3.根据主机的内存生成不同的配置文件,memcached
    [root@manager project1]# cat f12.yml 
    - hosts: webservers
      tasks:
        - name: Installed Memcached Server
          yum:
            name: memcached
            state: present
        - name: Configure Memcached Server
          template:
            src: ./file/memcached.j2
            dest: /etc/sysconfig/memcached
          notify: Restart Memcached Server
        - name: System Memcached Server
          systemd:
            name: memcached
            state: started
            enabled: yes
      handlers:
        - name: Restart Memcached Server
          systemd:
            name: memcached
            state: restarted
    
    [root@manager project1]# cat file/memcached.j2 
    PORT="11211"
    USER="memcached"
    MAXCONN="1024"
    CACHESIZE="{{ ansible_memtotal_mb //2 }}"
    OPTIONS=""
    

    相关文章

      网友评论

        本文标题:Ansible之Varialbes—3

        本文链接:https://www.haomeiwen.com/subject/aswxmctx.html