Ansible进阶之roles详解

迭代写法: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即可实现

  ·一般的角色都会写在/etc/ansible/roles下对应服务创建相应的服务文件夹

 

roles目录结构示例:

 

 

 

实例:通过角色实现nginx的安装到运行

  1.创建nginx用户并创建nginx用户组然后加到组里

  2.yum这个Nginx包

  3.通过template使用Nginx的配置文件模板

  4.启动Nginx

创建tasks文件夹内写具体的小功能

1.vim group.yml

  - name: create group
  group: name=nginx gid=80

2.vim user.yml

  - name: create user

    user: name=nginx grounp=nginx shell=/sbin/nologin uid=80

3.vim yum.yml

  - name: install package

    yum: name=nginx

4.vim start.yml

  - name:start nginx

    service: name=nginx state=started enabled=yes

5.cp /etc/nginx/nginx.conf /etc/ansible/templates/nginx.conf.j2

6.vim templ.yml

  - name: copy conf

    template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

7.创建总的剧本调用任务剧本

vim main.yml

- include: group.yml

- include: user.yml

- include: yum.yml

- include: templ.yml

- include: start.yml

8.创建调用角色的剧本

cd /etc/ansble

vim nginx_roles.yml

- hosts: 106.12.39

  remote_user: root

  roles:

  - role: nginx
posted @ 2019-11-06 21:49  caibutou  阅读(666)  评论(0编辑  收藏  举报