在文档中调用变量 使用 vars_files

  • vi xxx.yml 首先编写一个yum格式的文档 注意不是写playbook

    test1: abc
    test2: xyz   
    加入此内容保存退出文档
    
  • vi test4.yml 编写playbook

    ---
    - hosts: node1                         主机对象
      vars_files: /root/ansible/xxx.yml    使用文档模块定义文档的路径
      tasks:                               任务
        - debug:                           变量模块
            msg: "{{test1}} {{test2}}"     需要喊出的变量
    #这样就可以喊出之前用yml格式的文档编写的变量信息。
    

通过交互式定义变量 使用 vars_prompt

  • vi zxc.yml 编写playbook 这种是没有在playbook里面定义变量的值,什么时候跑这个playbook什么时候定义 临时定义

    ---
    - hosts: node1         主机对象
      vars_prompt:         定义变量的模块
        - name: test03     定义名称
          prompt: "hello"  定义提示(执行时会提示hello做提示信息,可自定义)可不加
          private: no      定义不隐藏(输入定义的变量时,不隐藏) 可不加
      tasks:                    
        - debug:
            msg: "{{test03}}"
    # 这种方法是什么时候喊出定义的这个test03时,什么时候去输入需要定义的内容。类似于切换用户填写密码。        
    

    — hosts : node1 主机对象
    gather_facts: no 加入该行可以关闭系统变量的收集,yes 收集,no 不收集

魔法变量(特殊变量)ansible内置的特殊变量

下列是msg 的内容

  • inventory_hostname 被控主机清单的名字

  • hostvars 显示被控主机所有变量 hostvars.node1 显示node1主机的变量

    ---
    - hosts: node2                      主机对象
    - hosts: node1                      主机对象 
      tasks:                            任务
        - debug:                        变量模块
            msg: "{{hostvars.node2}}"   喊出信息 需要前面加上需要喊出的主机名称(收集变量信息,不加的话是没有变量信息来喊出的)
    #表示用node1主机喊出node2主机的变量信息,(加上node2主机 执行时系统默认执行setup模块收集node2主机的变量信息,收集之后然后再使用node1主机才能喊出node2主机的变量信息)
    
  • hostvars.node1.group_names 显示node1主机的所在组名

  • groups 所有主机以及组信息

  • groups.all 显示所有主机名

  • groups.test01 显示test01组的主机的名字

  • group_names 显示当前正在运行任务的主机所在的组名(就是我的哪个组)

template 模块 类似copy模块

  • src 源文件

  • dest 存储目标

  • vi qwe.j2 写一个以 .j2 结尾的文件名, 里面写的是动态的变量信息

    {{ansible_hostname}}         写入此内容
    
  • vi qqq.yml 写playbook

    ---
    - hosts: node1
      tasks:  
        - template:                     任务模块
            src: /root/ansible/qwe.j2   源文件路径
            dest: /opt/xxx.j2           拷贝过去的路径(改了名字)
    #切换到node1 里面查看xxx.j2文件会显示node1,因为 动态文件写的变量是 ansible_hostname (主机名)  第一行的 - hosts 后面可以写多个主机,切换到对应的主机下去查看就会得到对应的主机名称信息。
    

魔法变量高级玩法,使用node2主机收集其他主机的变量(ansible_hostname)

  • vi qwe.j2 写一个以 .j2 结尾的文件名,(代表jinjia2 模板文件) 里面写的是动态的变量信息

    {{hostvars.node1.ansible_hostname}}         写入此内容
    {{hostvars.node2.ansible_hostname}} 
    {{hostvars.node3.ansible_hostname}} 
    {{hostvars.node4.ansible_hostname}} 
    {{hostvars.node5.ansible_hostname}}  
    
  • vi qqq.yml 写playbook

    ---
    - hosts: node1,node3,node4,node5  加上需要收集的主机的变量
    - hosts: node2                    主机对象
      tasks:
        - template:
            src: /root/ansible/qwe.j2
            dest: /opt/xxx.j2
    #  先跑一边需要收集的主机的变量信息 然后在使用模块去拷贝动态文件        
    

    关于ansible的其他模块及playbook和其他变量的使用介绍请参考下方链接 https://blog.51cto.com/u_15148274/5044967 https://blog.51cto.com/u_15148274/5044924