Ansible学习笔记15

1、roles:(难点)

roles介绍:

roles(角色):就是通过分别将variables,tasks及handlers等放置于单独的目录中,并可以便捷地调用他们的一种机制。

假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分,分成apache管理、php管理、mysql管理,然后在需要使用的时候直接调用就可以了,避免重复写。类似编程里的模块化的概念,已达到代码复用的效果。

创建roles的目录结构:

1、files:用来存放由copy模块或者scripts模块调用的模板;

2)tasks:至少有一个main.yml文件,定义各个tasks;

3)handlers:有一个main.yml文件,定义各handlers;

4)templates:用来存放jinja2模板;

5)vars:有一个main.yml,定义变量的;

6)meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

注意:在每个角色的目录中分别创建files,tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录。

通过roles实现lamp:

需要定制三个角色:apache、mysql、php

Ansible学习笔记15_第1张图片

[root@localhost roles]# tree
.
├── httpd
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
└── php
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    └── vars
        └── main.yml

21 directories, 12 files

Ansible学习笔记15_第2张图片

这个roles,就并列写了三个roles。类似于调用了函数。

Ansible学习笔记15_第3张图片

检查agent的文件:

[root@agent1 share]# cd /var/www/html
[root@agent1 html]# ll
total 8
-rw-r--r-- 1 root root 10 Aug 31 09:07 index.html
-rw-r--r-- 1 root root 22 Aug 31 09:07 test.php
[root@localhost httpd]# cat tasks/main.yml
- name: install apache etc packages
  yum: name=httpd,httpd-devel state=latest

- name: sync configure file
  copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf

  notify: restart httpd

- name: copy data files
  copy: src=/etc/ansible/roles/httpd/files/httpd_doc/ dest=/var/www/html/

#  notify: restart httpd

- name: start httpd and enabled in boot
  service: name=httpd state=started enabled=on
[root@localhost httpd]# cat handlers/main.yml
- name: restart httpd
  service: name=httpd state=restarted
[root@localhost roles]# cat mysql/tasks/main.yml
- name: Install mariadb
  yum: name=mariadb-server,mariadb-devel state=latest

- name: Start mariadb and enabled=yes
  service: name=mariadb state=started enabled=on
[root@localhost roles]# cat php/tasks/main.yml
- name: install php packages
  yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath state=present

  notify: restart httpd

你可能感兴趣的:(Ansible,ansible)