ansible笔记第二章(ansible-varable变量)

 

 

(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模块)

    将shell:ps aux|grep httpd  的结果值赋予给check_httpd,再用debug模块获取check_httpd里想要的值赋予给msg进行输出,示例如下:

        - 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

posted on 2022-09-01 19:19  leiyunfeng  阅读(75)  评论(0编辑  收藏  举报