Ansible进阶之roles详解

孤街浪徒 提交于 2019-12-03 21:04:08

迭代写法:with_items

  迭代:当需要重复性执行的任务时,可以使用迭代机制

    ·对迭代选项的引用,固定变量名为“item”

    ·要在task中使用with_items给定要迭代的元素列表

    ·列表格式:字符串、浮点

使用字符串

---
- host: webservs
   remote_user: root

   tasks:
     - name: create some files
       file: name=/data/{{ item }} start=touch
       with_itmes:
          - file1
          - file2
          - file3

迭代嵌套子变量

使用字典

---
- host: webservs
   remote_user: root

   tasks:
     - name: create some files
       group: name={{item}}
       when: ansible_distribution_major_version == "7"#是版本7才执行下面的
       with_items:
          - g1
          - g2
          - g3
     - name: create some users
       user: name={{itme.name}} group={{item.group}}
        with_items:
           - { name: 'user1', group: 'g1'}
           - { name: 'user2', group: 'g2'}
           - { name: 'user3', group: 'g3'}

Playbook中template for if

for循环的运用

---- hosts: websrvs  remote_user: root  vars:    ports:#定义变量列表      - 81      - 82      - 83  tasks:    - name: copy conf      template: src=for1.conf.j2 dest+/data/for1.conf#使用模板将src作为模板需要创建for1.conf.j2这个模板文件vim for1.conf.j2#在里面写下面的内容
{% for port in ports%}
server {
      listen {{ port }}}{%endfor%}###############################使用键值对的时候将81、82、83改为listen_port: 81这样的格式类推,然后在模板文件里将调用的变量port改为port.listen_port

 

使用键值对实例

 

 说明:一个web属于一个变量

模板文件的创建:

 

 

 说明:p.port是变量的调用

if的运用

{% if vhost.server_ name is defined %}
server_ name {{ vhost.server_ name }};
{% endif %}

for和if配合使用

 

 

 if语句的说明:如果p.name是被定义的则执行下面的语句

roles

  ansilbe自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。 要使用roles只需要在playbook中使用include指令即可。简单来讲, roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色-般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中

  复杂场景:建议使用roles,代码复用度高

  ·变更指定主机或主机组

  ·如命名不规范维护和传承成本大

  ·某些功能需要多个playbook,通过inscudes即可实现

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!