(1)变量类型

    1.1在playbook文件中的play使用变量

      [root@m01 project1]# cat vars_1.yml

        - hosts: oldboy

         vars:

          - web_packages: httpd-2.4.6

          - ftp_packages: vsftpd-3.0.2

        tasks:

        - name: Installed {{ web_packages }} {{ ftp_packages }}

           yum:

          name:

           - "{{ web_packages }}"

            - "{{ ftp_packages }}"

          state: present

     1.2.通过定义一个变量文件,然后使用playbook进行调用

        [root@m01 project1]# cat vars_public.yml

          web_packages: httpd-2.4.6

          ftp_packages: vsftpd-3.0.2

        [root@m01 project1]# cat vars_1.yml

          - hosts: oldboy

           vars_files: ./vars_public.yml

          tasks:

           - name: Installed {{ web_packages }} {{ ftp_packages }}

          yum:

          name:

          - "{{ web_packages }}"

           - "{{ ftp_packages }}"

          state: present

-------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------

    2.通过inventory主机清单进行变量定义

      在项目目录下创建两个变量的目录,host_vars group_vars

      #1)在当前的项目目录中创建两个变量的目录

        [root@ansible project1]# mkdir host_vars

        [root@ansible project1]# mkdir group_vars

      #2)在group_vars目录中创建一个文件,文件名与inventory清单中的组名称要保持完全一致。

        [root@ansible project1]# cat group_vars/oldboy

          web_packages: wget

          ftp_packages: tree

      #3)编写playbook,只需在playbook文件中使用变量即可。

        [root@ansible project1]# cat f4.yml

          - hosts: oldboy

          tasks:

          - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"

          yum:

          name:

          - "{{ web_packages }}"

          - "{{ ftp_packages }}"

             state: present

注意: 默认情况下,group_vars目录中文件名与hosts清单中的组名保持一致.

比如在group_vars目录中创建了oldboy组的变量,其他组是无法使用oldboy组的变量

系统提供了一个特殊组,all,只需要在group_vars目录下建立一个all文件,编写好变量,所有组都可使用.

#---------------------hosts_vars----------------       

      #1)在host_vars目录中创建一个文件,文件名与inventory清单中的主机名称要保持完全一致

        [root@ansible project1]# cat hosts

          [oldboy]

          172.16.1.7

          172.16.1.8

      #2)在host_vars目录中创建文件,给172.16.1.7主机定义变量

        [root@ansible project1]# cat host_vars/172.16.1.7

          web_packages: zlib-static

          ftp_packages: zmap

      #3)准备一个playbook文件调用host主机变量

        [root@ansible project1]# cat f4.yml

          - hosts: 172.16.1.7

          tasks:

          - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"

          yum:

          name:

          - "{{ web_packages }}"

          - "{{ ftp_packages }}"

          state: present

          - hosts: 172.16.1.8

          tasks:

          - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"

          yum:

          name:

          - "{{ web_packages }}"

          - "{{ ftp_packages }}"

          state: present

      host_vars 特殊的变量目录,针对单个主机进行变量.

      group_vars 特殊的变量目录,针对inventory主机清单中的组进行变量定义. 对A组定义的变量 B组无法调用

      group_vars/all 特殊的变量文件,可以针对所有的主机组定义变量.

--------------------------------------------------------------------------------

      3.通过执行playbook时使用-e参数指定变量

        [root@m01 project1]# cat vars_7.yml

          - hosts: "{{ hosts }}"   #注意:这是一个变量名称

          tasks:

          - name: Install Rpm Packages "{{ web_packages }}" "{{ ftp_packages }}"

          yum:

          name:

          - "{{ web_packages }}"

          - "{{ ftp_packages }}"

          state: present

        [root@m01 project1]# #ansible-playbook -i hosts  vars_7.yml -e "hosts=oldboy"

--------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------

    (2)变量优先级

        外置传参--->playbook(vars_files--->vars)--->inventory(host_vars-->group_vars/group_name--->group_vars-all)

    (3)register注册(输出shell的结果用debug模块)

        - hosts: oldboy

        tasks:

        - name: Installed Httpd Server

        yum: name=httpd state=present

        - name: Service Httpd Server

        service: name=httpd state=started

        - name: Check Httpd Server

              shell: ps aux|grep httpd

              register: check_httpd

 

            - name: OutPut Variables

              debug:

                msg: "{{ check_httpd.stdout_lines }}"

    (4)ansible facts变量

用来采集被控端的状态指标,比如: IP地址  主机名称  cpu信息  内存  等等

默认情况的facts变量名都已经预先定义好了, 只需要采集被控端的信息,然后传递至facts变量即可.

  # ansible 172.16.1.8 -m setup -a "filter=ansible_memtotal_mb" -i hosts

最新文章

  1. PV与并发之间换算的算法换算公式
  2. 解决ie6 fixed 定位以及抖动问题
  3. du 使用详解 linux查看目录大小 linux统计目录大小并排序 查看目录下所有一级子目录文件夹大小 du -h --max-depth=1 |grep [
  4. log_format为Nginx设置日志格式
  5. [资料]mysql实现地理位置搜索
  6. httpclient提示Cookie rejected: violates RFC 2109: domain must start with a dot
  7. 2015 Multi-University Training Contest 1 - 1002 Assignment
  8. java + jquery + ajax + json 交互
  9. NetworkComms框架介绍 完美支持TCP/UDP协议
  10. 想直接用Windows API开发程序,你真的应该知道这些!
  11. (转)mongoDB 禁用大内存页面 transparent_hugepage=never
  12. jdk-tomcat环境变量设置
  13. Alamofire源码解读系列(一)之概述和使用
  14. Android 带你玩转实现游戏2048 其实2048只是个普通的控件
  15. 【爆料】-《英博夏尔大学毕业证书》BPP一模一样原件
  16. No grammar constraints (DTD or XML Schema) referenced in the document.
  17. 51nod 1615 跳跃的杰克
  18. OpenStack 图形化服务 Horizon使用(十三)
  19. 2014年第五届蓝桥杯C/C++B组省赛题目解析
  20. (转)ffmpeg 从mp4上提取H264的nalu

热门文章

  1. Qt-FFmpeg开发-视频播放【软解码】(1)
  2. Spring构造函数
  3. 将视图直接转换成表的SQL语句
  4. codeforce A. Many Equal Substrings
  5. FTP传大文件又慢又麻烦,有没有更好的替代传输方案?
  6. Java面向对象之static关键字详解
  7. layui富文本编辑器提交时无法获取到值
  8. 前端使用xlsx file-saver xlsx-style导出
  9. Pytest之生成allure报告
  10. cookie是什么?有什么用?