正文

hosts: list1
 tasks:
 - name: hostname command
 shell:
 hostname
 register: info
 - name: show messages
 debug:
 msg: {{info[‘stdout’]}}"
![]()

#9.事实变量#
事实变量是ansible在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息

当需要使用主机相关信息时不需要采集赋值,直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被成为事实变量


    • name: test
     hosts: list1
     tasks:   • name: show
     debug:
     msg: “{{ansible_facts[‘fqdn’]}}”
     …
    ![]()
    
    
     练习脚本:
    
    
    采集主机的ip 和主机名并以
    
    
    hostname:
    
    
    ip:
    
    
    形式输出到/etc/motd


    • name: test
     hosts: list1
     tasks:   • name: info
     copy:
     content: “hostname: {{ansible_facts[‘fqdn’]}}\nip: {{ansible_facts[‘enp1s0’][‘ipv4’][‘address’]}}\n”
     dest: /etc/motd

    **测试:**
    
    
    ![]()
    
    
    ![]()

    #10.魔法便变量#
    hostvars: ##ansible软件的内部信息

    group_names: ##当前受管主机所在组
    groups: ##列出清单中所有的组和主机
    inventory_hostname: ##包含清单中配置的当前授管主机的名称

    ####  四、JINJA2模板
    
    
    #介绍  
     Jinja2是Python下一个被广泛应用的模版引擎  
     他的设计思想来源于Django的模板引擎,  
     并扩展了其语法和一系列强大的功能。  
     其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能
    
    
    #### 五、j2模板书写规则
    {# /etc/hosts line #}
     127.0.0.1 localhost
     {{ ansible_facts[‘all_ipv4_addresses’] }} {{ansible_facts[‘fqdn’]}}#for循环#
     vim users.yml
     users:• westos
    • linux
    • ansible
    vim test.j2
     {% for NAME in users %}
     {{ NAME }}
     {%endfor%}#if 判定#
     {% for NAME in users if not NAME == “ansible” %}
     User number {{loop.index}} - {{ NAME }}
     {%endfor%}loop.index ##循环迭代记数从1开始
     loop.index0 ##循环迭代计数从0开始{% for user in students %}
     name: {{user[‘name’]}}
     {%if user[‘age’] is defined%}
     age: {{user[‘age’]}}
     {%endif%}
     {% if user[‘age’] is not defined %}
     age: null
     {% endif%}
     obj: {{user[‘obj’]}}
     {%endfor%}

    #j2模板在playbook中的应用#

    - name: student2
      age: 18
      obj: linux
    - name: student2
      age: 18
      obj: linux
    #playbook1
    • name: test register
     hosts: xxxx
     tasks:   • name: create hosts
     template:
     src: ./xxxx.j2
     dest: /mnt/hosts#playbook2
    • name: test.j2
     hosts: 172.25.0.254
     vars:
     students:
     - name: student1
     obj: linux

    tasks:

    • template:
      src: ./test.j2
      dest: /mnt/list
    练习脚本  
     create web vhost  
     www.westos.com  80    ------ > /var/www/html
    
    
    linux.westos.com 80 ------> /var/www/virtual/westos.com/linux
    
    
     
    
    
    #### 六、Ansible的加密控制

    #创建建立文件

    1.
     ansible-vault create westos 
    vim westos-vault
     123456ansible-vault create --vault-password-file=westos-vault westos
    #加密现有文件
     ansible-vault encrypt test#查看加密文件
     ansible-vault view westos
     ansible-vault view --vault-password-file=westos-valut westos#编辑加密文件
    ansible-vault edit westos1
     ansible-vault edit --vault-password-file=westos-valut westos##解密文件
     ansible-vault decrypt westos ##文件永久解密
     ansible-vault decrypt westos --output=linux ##文件解密保存为linux##更改密码
     ansible-vault rekey westos1
     ansible-vault rekey westos1 --new-vault-password-file=key1#playbook#
     ansible-playbook apache_install.yml --ask-vault-pass