ansible——roles 角色

这篇具有很好参考价值的文章主要介绍了ansible——roles 角色。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

1.roles角色简介

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

2.roles 角色的作用

把playbook剧本里的各个play看作为角色,将各个角色的tasks任务、vars变量、templates模板、files文章来源地址https://www.toymoban.com/news/detail-626804.html

3.roles内各目录含义解释

  • files:用来存放由 copy 模块或 script 模块调用的文件。
  • templates:用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
  • tasks:此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。
  • handlers:此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
  • vars:此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
  • defaults:此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。 这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量
  • meta:此目录应当包含一个 main.yml 文件,用于定义此角色的元数据信息及其依赖关系。

二、 在playbook中使用roles创建lnmp

1.准备工作

1.1创建以roles命名的目录

mkdir /etc/ansible/roles/ -p    #yum装完默认就有

1.2在 roles 目录中分别创建以各角色名称命名的目录

mkdir /etc/ansible/roles/nginx
mkdir /etc/ansible/roles/mysql
mkdir /etc/ansible/roles/php

1.3在每个角色命名的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建

mkdir /etc/ansible/roles/nginx/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta}

1.4在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名

touch /etc/ansible/roles/nginx/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

2.利用roles创建nginx

2.1编辑nginx任务

cd /etc/ansible/roles/nginx/tasks
vim main.yml
#引用该目录下的init.yml
- include: init.yml

- name: nginx.repo
  copy: src=nginx.repo dest=/etc/yum.repos.d/

- name: install nginx
  yum: name={{pkg}} state=latest

- name: nginx congrustion file
  template: src=default.conf.j2 dest=/etc/nginx/conf.d/default.conf
  notify: "reload nginx"         #以上操作后为changed的状态时,会通过notify指定的名称触发对应名称的handlers操作

- name: index.php
  copy: src=index.php dest={{root_dir}}

- name: start nginx
  service: name={{svc}} state=started enabled=yes

#编写关闭防火墙任务
vim init.yml
- name: disable firewalld
  service: name=firewalld state=started enabled=no

- name: stop selinux
  shell: "/usr/sbin/setenforce 0"
  ignore_errors: true

2.2定义触发条件时执行的动作

#handlers目录用于定义此角色中触发条件时执行的动作。
cd /etc/ansible/roles/nginx/handlers
vim main.yml
- name: reload nginx
  service: name={{svc}} state=reloaded

2.3编辑nginx模板文件

准备default.conf文件
cp default.conf /etc/ansible/roles/nginx/templates/default.conf.j2
cd /etc/ansible/roles/nginx/templates
vim default.conf.j2
--2行--
listen       {{nginxip_port}};
--8行--
root   {{root_dir}};
--29行--
 location ~ \.php$ {
          root           {{root_dir}};
          fastcgi_pass   {{passip_port}};
          fastcgi_index  index.php;
          fastcgi_param  SCRIPT_FILENAME  {{root_dir}}$fastcgi_script_name;
          include        fastcgi_params;
      }

2.4定义变量

#变量放在vars目录下
cd /etc/ansible/roles/nginx/vars
vim main.yml
pkg: nginx
svc: nginx
nginxip_port: 192.168.88.20:80
nginx_servername: www.web.com
root_dir: /usr/share/nginx/html
passip_port: 192.168.88.30:9000

2.5准备复制文件

#files目录存放由 copy 模块或 script 模块调用的文件
cd /etc/ansible/roles/nginx/files
vim index.php
<?php
phpinfo();
?>

vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

3.利用roles创建php

3.1编辑php任务

cd /etc/ansible/roles/php/tasks
vim main.yml
- name: rpm -Uvh php
  shell: rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm && rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

- name: install php
  yum: name={{pkg}} state=latest

- name: create user
  user: name=php shell=/sbin/nologin create_home=no

- name: create directory
  file: name=/usr/share/nginx/html state=directory

- name: copy index.php
  copy: src=index.php dest=/usr/share/nginx/html

- name: php.ini
  replace: path=/etc/php.ini regexp=";date.timezone =" replace="date.timezone = Asia/Shanghai"
  notify: "reload php"

- name: user group
  replace: path=/etc/php-fpm.d/www.conf regexp="apache" replace="php"
  notify: "reload php"

- name: listen
  replace: path=/etc/php-fpm.d/www.conf regexp="listen = 127.0.0.1:9000" replace="listen = 192.168.88.30:9000"
  notify: "reload php"

- name:  allow_clients
  replace: path=/etc/php-fpm.d/www.conf regexp="listen.allowed_clients = 127.0.0.1" replace="listen.allowed_clients = 192.168.88.20"
  notify: "reload php"

- name: start php-fpm
  service: name=php-fpm state=started enabled=yes

3.2定义触发条件时执行的动作

vim /etc/ansible/roles/php/handlers/main.yml
- name: reload php
  service: name=php-fpm state=reloaded

4.利用roles创建mysql

4.1编辑mysql剧本

vim /etc/ansible/roles/mysql/tasks/main.yml
- name: remove mariadb*
  yum: name=mariadb* state=absent

- name: rpm -ivh mysql
  shell: rpm -ivh https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm
  ignore_errors: true

- name: mysql.repo
  shell: sed -i 's/gpgcheck=1/gpgcheck=0/' /etc/yum.repos.d/mysql-community.repo

- name: install mysql
  yum: name=mysql-server

- name: start mysql
  service: name=mysqld.service state=started enabled=yes

- name: password.sh
  script: password.sh

- name: remove mysql57
  yum: name=mysql57-community-release-el7-10.noarch state=absent

4.2编辑脚本

vim /etc/ansible/roles/mysql/files/password.sh

passd=$(grep "password" /var/log/mysqld.log | awk '{print $NF}')
mysql -uroot -p"$passd" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin@123';"
mysql -uroot -pAdmin@123 -e "grant all privileges on *.* to root@'%' identified by 'Admin@123' with grant option;"

chmod +x roles/mysql/files/password.sh

5.修改hosts文件

vim /etc/ansible/hosts
[webservers]
192.168.88.20

[dbservers]
192.168.88.30

[mysql]
192.168.88.40

6.编辑lnmp的playbook并执行

cd /etc/ansible
vim lnmp2.yml
- name: nginx
  hosts: webservers
  roles:
  - nginx

- name: php
  hosts: dbservers
  roles:
  - php

- name: mysql
  hosts: mysql
  roles:
  - mysql

ansible-playbook lnmp2.yml

到了这里,关于ansible——roles 角色的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ansible 使用roles简单部署LAMP平台

    目录 一、了解roles目录 二、基于构建LAMP平台创建roles目录 1、在192.168.115.148创建目录 2、书写php的测试页面 3、编写httpd角色的main.yml文件 4、编写mysql角色的main.yml文件 6、编写lamp的playbook 7、启动剧本 8、访问 在Ansible中,roles是一种组织和复用任务和变量的方式。Roles是一种可

    2024年02月09日
    浏览(31)
  • Ansible上通过roles简化playbook演示介绍

    目录 一.roles介绍 1.作用 2.role的目录结构 3.role和tasks的执行优先级顺序 二.自定义一个httpd的角色 1.完整目录结构展示 2.主要的各个目录配置 (1)vars目录和templates目录 (2)tasks目录和handlers目录 (3)运行playbook测试 三.ansible galaxy安装roles 1.在线网站 2.配置roles_path 3.ansible-ga

    2024年02月08日
    浏览(36)
  • ansible-playbook roles编写lnmp剧本

    目录 集中式编写lnmp剧本 执行 分布式编写lnmp剧本 一定要设置ssh免交互  nginx mysql php  执行

    2024年02月14日
    浏览(42)
  • 基于角色访问控制-RBAC(Role-Based Access Control)

    RBAC(Role-Based Access Control)是一种基于角色的访问控制模型,它是一种安全策略,用于限制系统中用户对资源的访问权限。RBAC模型的核心概念是用户角色和资源访问权限。 在角色访问控制中,首先需要定义系统中的角色以及每个角色对应的权限。角色通常根据用户在组织中的

    2024年02月10日
    浏览(42)
  • 07_ansible, 条件选择、加载客户事件、在roles和includes上面应用’when’语句、条件导入、基于变量选择文件和模版、注册变量

    10.条件选择 10.1.When语句 10.2.加载客户事件 10.3.在roles和includes上面应用’when’语句 10.4.条件导入 10.5.基于变量选择文件和模版 10.6.注册变量 转自:http://www.ansible.com.cn/docs/playbooks_conditionals.html#id3 常常来说,一个play的结果经常取决于一个变量的值,事件(从远端系统得到事件)

    2024年02月13日
    浏览(45)
  • [ansible] playbook角色

    Roles又称为角色,playbook被称为剧本。Roles角色是自1.2版本之后引入的新特性,用于层次性、结构化的组织剧本   roles能够根据层次型结构自动装载变量文件、任务集、以及触发的动作等,要使用roles只需要在剧本中使用include命令引入即可 简单的来说,roles就是分别将变量、文

    2024年02月21日
    浏览(44)
  • Ansible 创建使用角色

    使用 Ansible Galaxy 和要求文件 /ansible/roles/requirements.yml 。从以下 URL 下载角色并安装到 /ansible/roles : http://materials/haproxy.tar 此角色的名称应当为 balancer http://materials/phpinfo.tar 此角色的名称应当为 phpinfo 创建成功  

    2024年02月11日
    浏览(36)
  • ansible剧本中的角色

    1.1 roles角色的作用? 可以把playbook剧本里的各个play看作为一个角色,将各个角色打的tasks任务、vars变量、template模版和copy、script模块使用的相关文件等内容放置在指定角色的目录里统一管理,在需要的时候可在playbook中使用roles角色直接调用即可。 1.2 roles的目录格式 1.3 调用

    2024年02月21日
    浏览(39)
  • 从 Ansible Galaxy 使用角色

    根据下列要求,创建一个名为 /home/curtis/ansible/roles.yml 的 playbook :     playbook 中包含一个 play, 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。         此角色配置一项服务,以在 webservers 主机组中的主机之间平衡 Web 服务器请求的负载。         浏览到

    2024年02月12日
    浏览(32)
  • Ansible 使用 RHEL 系统角色

    安装 RHEL 系统角色软件包,并创建符合以下条件的 playbook /home/greg/ansible/timesync.yml      在所有受管节点上运行     使用 timesync 角色     配置该角色,以使用当前有效的 NTP 提供商     配置该角色,以使用时间服务器 172.25.254.254     配置该角色,以启用 iburst 参数  

    2024年02月11日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包