ansible--roles

role类似于salt-stack里面的state,state有一定的组织架构。

而role则是ansible中playbook的目录组织架构,如果把所有内容都写到playbooks里,可能会导致playbooks臃肿,难读。而模块化之后,有效解决了上述的问题。

目录结构示例:

[[email protected] web]# tree

.

├── group_vars

│   └── salt

├── hosts

├── roles

│   ├── mysql

│   │   ├── handlers

│   │   │   └── main.yml

│   │   ├── tasks

│   │   │   ├── configure.yml

│   │   │   └── main.yml

│   │   ├── templates

│   │   │   └── my.cnf

│   │   └── vars

│   │        └── main.yml

│   └── webserver

│       ├── files

│       │   └── index.html

│       ├── handlers

│       │   └── main.yml

│       ├── meta

│       │   └── main.yml

│       ├── tasks

│       │   └── main.yml

│       └── templates

│            └── httpd.conf

└── site.yml

第一级目录下有俩文件夹,俩文件

group_vars这里面存的组变量,定义规则等同于/etc/ansible/group_vars里面的组变量

group_vars下的salt文件里的变量只对salt组有效,如果文件名为all,则对所有主机组有效,而相对于roles这里面的变量则是全局的。

web]# cat group_vars/salt

http_port: 80

hosts存放主机及组信息:

web]# cat hosts

[salt]

192.168.137.130

roles下有两个role,分别为mysql,webserver

mysql和webserver目录下可以有下面这些目录:

files:存文件的,文件放此目录,ansible默认就会到这个目录去找文件,对应task里面的copy模块

tasks:显然是存放tasks的

handlers:存放handlers

templates:存放模板,对应task里面的模块template

vars:这里面定义的变量,只对当前role有作用

meta:定义role和role直接的依赖关系。

查看webserver目录下文件内容:

webserver]# for dir in {‘tasks‘,‘handlers‘,‘meta‘};do echo -e "\033[31m${dir}\033[0m";for file in `ls ${dir}/*`;do echo -e "\033[32m${file}\033[0m";cat -n ${file};done;done

tasks

tasks/main.yml

1 ---

2 - name: installed httpd

3  yum: name=httpd state=latest

4  tags: install

5

6 - name: keep httpd running

7  service: name=httpd state=started

8  tags: install

9

10 - name: transfer index file

11  copy: src=/index.html dest=/var/www/index.html   ##到file中查找

12  tags: install

13

14 - name: wait for httpd to start

15  wait_for: port={{http_port}}            ##http_port为group_vars/salt中全局变量

16  tags: install

17

18 - name:transfer httpd configure file

19  template: src=httpd.conf dest=/etc/httpd/httpd.conf  ##httpd.conf模板中查找

20  tags: conf

21  notify:

22    - restart httpd

handlers

handlers/main.yml

1 ---

2 - name: restart httpd

3  service: name=httpd state=restarted

meta

meta/main.yml

1 ---

2 dependencies:

3  - {role: mysql,echo_vars: hello mysql}

##meta定义依赖关系,webserver运行前,必须先运行mysql这个role,并传递变量echo_vars给mysql

查看mysql目录下文件内容:

mysql]# for dir in {‘tasks‘,‘handlers‘,‘vars‘};do echo -e "\033[31m${dir}\033[0m";for file in `ls ${dir}/*`;do echo -e "\033[32m${file}\033[0m";cat -n ${file};done;done

tasks

tasks/configure.yml

1 ---

2 - name: transfer mysql configure file

3  template: src=my.cnf dest=/etc/mysql/my.cnf

4  notify:

5    - restart mysql

6  tags: configure

tasks/main.yml

1 ---

2 - name: install mysql-server

3  yum: name={{item}} state=latest

4  with_items:

5    - ‘{{software}}‘

6  tags: install

7

8 - name: keep mysql is running

9  service: name=mysql state=started

10  tags: install

11

12 - name: echo_vars

13  shell: echo ‘{{echo_vars}}‘    ##webserver的meta传过来的变量

14  register: result

15 - debug: msg=‘{{result.stdout}}‘

16  tags: install

17

18 - include: configure.yml        ##include进来

handlers

handlers/main.yml

1 ---

2 - name: restart mysql

3  service: name=mysql state=restarted

vars

vars/main.yml

1 ---

2 software:                   ##role内变量

3  - mysql-server

4  - lrzsz

site.yml,我们要调用的文件。

web]# cat site.yml

---

- hosts: salt

remote_user: ‘{{uservar}}‘

roles:

- webserver

执行结果:

web]# ansible-playbook -i hosts site.yml -e ‘uservar=root‘

PLAY [salt] ************************************************************************

TASK [Gathering Facts] *************************************************************

ok: [192.168.137.146]

TASK [mysql : install mysql-server] ************************************************

ok: [192.168.137.146] => (item=[u‘mysql-server‘, u‘lrzsz‘])

TASK [mysql : keep mysql is running] ***********************************************

ok: [192.168.137.146]

TASK [mysql : echo_vars] ***********************************************************

changed: [192.168.137.146]

TASK [mysql : debug] ***************************************************************

ok: [192.168.137.146] => {

"msg": "hello mysql"         ##webserver传给mysql的变量

}

TASK [mysql : transfer mysql configure file] ***************************************

ok: [192.168.137.146]

TASK [webserver : installed httpd] *************************************************

ok: [192.168.137.146]

TASK [webserver : keep httpd running] **********************************************

ok: [192.168.137.146]

TASK [webserver : transfer index file] *********************************************

changed: [192.168.137.146]

TASK [webserver : wait for httpd to start] *****************************************

ok: [192.168.137.146]

TASK [webserver : transfer httpd configure file] ***********************************

changed: [192.168.137.146]

RUNNING HANDLER [webserver : restart httpd] ****************************************

changed: [192.168.137.146]

PLAY RECAP *************************************************************************

192.168.137.146            : ok=12   changed=4    unreachable=0    failed=0

如何在roles里调用tags标签:

在命令行中可用参数调用tags,

--tags="test1,test3"   :只执行test1,test3标签段

--skip-tags="test2"    :跳过test2,执行其它tags为非test2标签的字段

web]# cat site.yml

---

- hosts: salt

remote_user: ‘{{uservar}}‘

roles:

- {role: webserver,tags: [‘install‘]}  ##只执行角色中定义的标签段

时间: 2024-11-29 01:49:22

ansible--roles的相关文章

Ansible roles实现LAMP部署wordpress

ansible lamp ansible roles实现lamp安装wordpress 整个role目录的结构: .├── ansible.cfg├── hosts├── httpd-php_roles.retry├── httpd-php_roles.yml├── roles│   ├── httpd│   │   ├── files│   │   │   ├── mysql_wp.sh│   │   │   ├── wordpress-4.7.4-zh_CN.tar.gz│   │   │

详解Ansible(Roles)自动化部署配置LAMP架构

Roles简介Ansible为了层次化.结构化地组织Playbook,使用了角色(roles).Roles能够根据层次型结构自动装载变量文件.task以及handlers等.简单来讲,roles就是通过分别将变量.文件.任务.模块及处理器放置于单独的目录中,并可以便捷地include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中.? 创建Roles 创建roles时一般需要以下步骤:首先创建以roles命名的目录.然后在roles目标下分别创建以个角色名称命令

ansible roles 自动化安装

例:  ansible roles 自动化安装memcached 文件目录结构如下: cat memcached_role.yml - hosts: memcached remote_user: root roles: - memcached cat roles/memcached/vars/main.yml username: memcached groupname: memcached memcached_port: 11211 cat roles/memcached/templates/m

五:Ansible Roles

五:Ansible Roles 一:Ansible Roles目录结构 1. 官方推荐最佳实践目录结构定义方式 roles/ common/ # this hierarchy represents a "role" tasks/ # main.yml # <-- tasks file can include smaller files if warranted handlers/ # main.yml # <-- handlers file templates/ # <

运维自动化-Ansible roles

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

Ansible Roles和最佳实践

角色(roles):把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色. Roles目录可以是ansible.cfg中roles_path定义的路径,也可以和入口Playbook文件存放在同级目录.建议使用roles_path,方便统一管理.这篇的示例使用和入口Playbook文件存放在同级目录. Roles are ways of automatically loading certain vars_files, tasks, an

ansible roles实践——安装java

1.tasks/main.yml ---- name: mkdir necessary directory file: path=/usr/java/ state=directory mode=0755 - name: unzip jdk unarchive: src={{ jdk_package_name }} dest=/usr/java/ - name: set env lineinfile: dest={{ env_file }} insertafter={{ item.position

一些ansible roles例子

#理解 changed_when failed_when become become_user ansible_become ansible_become_user static #检查group_vars中某组是否存在主机 - name: ensure only one monitoring host exists fail: msg="One, or no monitoring host may be specified." when: "groups.get('moni

Ansible自动化部署之ROLES

一.ROLES 角色 1.目录层级结构 2.角色调用 3.层级结构展示 示例1:利用ansible角色安装nginx 示例2:变量调用 示例3:在playbook调用角色方法:传递变量给角色 示例4:条件测试角色调用 示例5:角色安装 示例6:角色变量调整memcached内存大小 一.ROLES 角色 对于以上所有的方式有个弊端就是无法实现复用假设在同时部署Web.db.ha 时或不同服务器组合不同的应用就需要写多个yml文件.很难实现灵活的调用.. roles 用于层次性.结构化地组织pla

Ansible的roles功能(五)

针对大型项目使用Roles进行编排,更便利 目录结构编排 一键安装httpd并提供服务 创建目录结构 [[email protected] ansible]# mkdir -p roles/httpd/{tasks,files,vars} [[email protected] ansible]# cd roles/httpd/tasks [[email protected] roles]#touch httpd/{files/main.yml,tasks/{groupadd.yml,instal