我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ansible--roles

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ansible--roles

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

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

目录结构示例:

[root@web02 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: class="lazy" data-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: class="lazy" data-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: class="lazy" data-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']}  ##只执行角色中定义的标签段




免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ansible--roles

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

ansible

用ansible在客户端上创建一个用户,用户名为test,脚本语言如下:[root@master ansible]# vim 1.yml ---- name: create_user               /说明代码的作用。可以省略 
2023-01-31
2024-04-02

ansible (2.4.2.0) A

转自 jumpserver 5.0 测试版本 下载地址https://github.com/hequan2017/zabbix-models/tree/master/ansible_run只是简单改了一下 能够单独使用。目录结构ansib
2023-01-31
2024-04-02

ansible python api 2

最近想利用python来调用anbile来实现一些功能,发现ansible的api已经升级到了2.0,使用上比以前复杂了许多。 这里我参考了官方文档的例子,做了一些整改,写了一个python调用ansible的函数,执行过程中输出执行结果。
2023-01-31

ansible一键安装mysql8.0

ansbile安装:# ansible在CentOS7中需要安装epel仓库yum install -y epel-releaseyum install -y ansible安装有好几种方法,yum安装是最简单的,安装ansible不是重点。我的版本如下:[r
ansible一键安装mysql8.0
2015-12-30

3,Ansible---动态Invent

动态 InventoryCobbler 外部 Inventory 脚本AWS EC2 外部 inventory 脚本其它 inventory 脚本使用多个 inventory 源动态组作为静态组的子组使用配置管理系统经常有一种需求,可能要在
2023-01-31

Ansible怎么部署Tomcat

这篇文章主要讲解了“Ansible怎么部署Tomcat”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ansible怎么部署Tomcat”吧!Ansible的特性:ansible基于Pytho
2023-06-27

Python之 ansible 动态In

1.Ansible Inventory  介绍;Ansible Inventory 是包含静态 Inventory 和动态 Inventory 两部分的,静态 Inventory 指的是在文件中指定的主机和组,动态 Inventory 指通
2023-01-31

使用kolla-ansible 部署OpenStack

步骤如下:1. 安装依赖:确保在部署节点上安装了git、ansible和sshpass。使用以下命令安装依赖:```$ sudo apt-get update$ sudo apt-get install -y git python3-dev
2023-10-11

yum如何安装ansible

这篇文章将为大家详细讲解有关yum如何安装ansible,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。os版本:[root@iz2zecm5evly3vhbie5ik4z ~]# cat /etc/red
2023-06-05

Ansible模块有哪些

本篇内容介绍了“Ansible模块有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!authorized_keySSH 是 Ansible
2023-06-05

Python ansible常用模块

import ansible.runnerimport ansible.playbookimport ansible.inventoryfrom ansible import callbacksfrom ansible import uti
2023-01-31

Linux下ansible如何安装

这篇文章给大家分享的是有关Linux下ansible如何安装的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、
2023-06-27

Linux下怎么安装Ansible

本篇内容主要讲解“Linux下怎么安装Ansible”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么安装Ansible”吧!1、yum源安装以centos为例,默认在源里没有ans
2023-06-28

3、Ansible配置文件和Invent

如果是用RPM包方式安装的Ansible,那么安装完成后会生成以下文件:/etc/ansible                              ###存放ansible配置文件的目录/etc/ansible/hosts    
2023-01-31

离线安装ansible的过程

本篇内容介绍了“离线安装ansible的过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、准备一台能连接互联网的相同OS服务器,使用yu
2023-06-05

编程热搜

目录