当前位置: 首页 > article >正文

playbook剧本安装nginx、roles

一、playbook 剧本安装nginx
[root@m0 ~]# mkdir /etc/ansible/playbook
[root@m0 ~]# vim /etc/ansible/playbook/nginx.yml
---
-       hosts:          group02
        remote_user:    root
        tasks:
        -       name:   卸载httpd
                yum:    name=httpd      state=absent
        -       name:   安装epel
                yum:    name=epel-release       state=present
        -       name:   安装nginx
                yum:    name=nginx      state=present
        -       name:   修改资源文件
                shell:  echo 'i am nginx,port is 80' > /usr/share/nginx/html/index.html
        -       name:   修改端口
                command:        sed -i '/listen/s/80/8080/g' /etc/nginx/nginx.conf
                notify:
                -       restart nginx
        -       name:   启动服务
                service:        name=nginx   state=started  enabled=yes
        handlers:
                -       name:   restart nginx
                        service:        name=nginx    state=restarted
[root@m0 ~]# ansible-playbook /etc/ansible/playbook/nginx.yml  

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

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

2、创建roles的目录结构
files:用来存放由copy模块或script模块调用的文件。
tasks:至少有一个main.yml文件,定义各tasks。
handlers:有一个main.yml文件,定义各handlers。
templates:用来存放jinjia2模板。
vars:有一个main.yml文件,定义变量。
meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

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

3、案例

[root@m0 ~]# cd /etc/ansible/roles/
[root@m0 roles]# ls
[root@m0 roles]# mkdir nginx
[root@m0 roles]# ls
nginx
[root@m0 roles]# cd nginx/
[root@m0 nginx]# mkdir files
[root@m0 nginx]# mkdir tasks
[root@m0 nginx]# mkdir handlers
[root@m0 nginx]# mkdir templates
[root@m0 nginx]# mkdir vars
[root@m0 nginx]# mkdir meta
[root@m0 nginx]# tree
.
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
[root@m0 nginx]# touch handlers/main.yml
[root@m0 nginx]# touch tasks/main.yml
[root@m0 nginx]# touch vars/main.yml
[root@m0 nginx]# touch meta/main.yml
[root@m0 nginx]# tree
.
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
[root@m0 ~]# vim /etc/ansible/playbook/test002.yml
---
-       hosts:          s
        remote_user:    root
        roles:
                -       nginx
[root@m0 ~]# ansible-playbook /etc/ansible/playbook/test002.yml
[root@m0 ~]# ansible s -m yum -a 'name=nginx state=absent'
[root@m0 ~]# vim /etc/ansible/roles/nginx/tasks/main.yml
---
-       name:   卸载httpd
        yum:    name=httpd      state=absent
-       name:   卸载nginx
        yum:    name=nginx      state=absent
-       name:   安装nginx
        yum:    name=nginx      state=present
-       name:   启动服务
        service:        name=nginx      state=started   enabled=yes
...
[root@m0 ~]# ansible-playbook /etc/ansible/playbook/test002.yml
[root@m0 ~]# vim /etc/ansible/playbook/test002.yml
---
-       hosts:          s
        remote_user:    root
        roles:
                -       nginx
                -       mysql  
[root@m0 ~]# cp /etc/ansible/roles/nginx/ /etc/ansible/roles/mysql -r
[root@m0 ~]# ansible-playbook /etc/ansible/playbook/test002.yml

4、练习:
请使用role来实现Inmp

mariadb中创建eleme数据库

创建表t_user

id        int        主键约束,自增        编号

username        varchar        非空约束        账号

password        varchar        非空约束        密码

remark        Ivarchar        没有约束        账号权限说明

[root@m0 ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@m0 ~]# yum -y remove *mariadb*
[root@m0 ~]# yum -y install mariadb
[root@m0 ~]# yum -y install mariadb-server.x86_64
[root@m0 ~]# systemctl start mariadb.service 
[root@m0 ~]# mysql
 
[root@m0 ~]# mysql << EOF
 
> create database if not exists eleme charset utf8mb4;
Query OK, 1 row affected (0.00 sec)
 
> use eleme;
MariaDB [eleme]> create table user(id int primary key auto_increment,username varchar(45) not null,password varchar(45) not null,remark varchar(45));
 
> exit
Bye
 
[root@m0 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| eleme              |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
 
MariaDB [(none)]> use eleme;
 
Database changed
MariaDB [eleme]> show tables;
+-----------------+
| Tables_in_eleme |
+-----------------+
| user            |
+-----------------+
1 row in set (0.00 sec)
 
MariaDB [eleme]> select * from user;
Empty set (0.00 sec)
 
MariaDB [eleme]> exit
Bye

[root@m0 ~]# cd /etc/ansible/roles/
[root@m0 ~]# cd /etc/ansible/roles/
[root@m0 roles]# mkdir mariadb
[root@m0 roles]# cd mariadb/
[root@m0 mariadb]# mkdir tasks
[root@m0 mariadb]# touch tasks/main.yml
[root@m0 ~]# vim /etc/ansible/roles/mariadb/tasks/main.yml
---
-       name:       卸载mariadb
        yum:        name=mariadb,mariadb-server,mariadb-devel    state=absent
 
-       name:       安装mariadb
        yum:        name=mariadb,mariadb-server,mariadb-devel    state=present
 
-       name:       启动mariadb服务
        service:    name=mariadb    state=started    enabled=yes
 
-       name:       执行脚本,创建数据库和数据表
        script:     /etc/ansible/script/dbtable.sh
...

[root@m0 mariadb]# cd /etc/ansible/
[root@m0 mariadb]# mkdir script
[root@m0 mariadb]# cd script/
[root@m0 script]# vim dbtable.sh
#!/bin/bash
mysql << EOF
 
create database if not exists eleme charset utf8mb4;
use eleme;
create table user(id int primary key auto_increment,username varchar(45) not null,password varchar(45) not null,remark varchar(45));
quit
EOF
[root@m0 script]# vim /etc/ansible/playbook/test003.yml
---
-    hosts:    s
     remote_user:    root
     roles:    
        -    mariadb
[root@m0 script]# ansible-playbook /etc/ansible/playbook/test003.yml 
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.csdn.net/m0_71589190/article/details/141435322


http://www.kler.cn/a/289679.html

相关文章:

  • 基于海思soc的智能产品开发(两个图像处理来源)
  • 认识一下Unicorn
  • 建筑施工特种作业人员安全生产知识试题
  • 2024-11-13 学习人工智能的Day26 sklearn(2)
  • DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能
  • JVM详解:JVM的系统架构
  • 代理模式 JAVA
  • 同物种,不同版本之间的坐标转化
  • 基于SSM+Vue+MySQL的高校课程评价管理系统
  • YUM配置文件开启缓存
  • Java 基于微信小程序的小区服务管理系统,附源码
  • 【STM32+HAL库】---- 通用定时器实现外部脉冲计数
  • 力扣45-跳跃游戏II (java详细题解)
  • 图文解析保姆级教程: IDEA里面创建SpringBoot工程、SpringBoot项目的运行和测试、实现浏览器返回字符串
  • git查看代码提交记录
  • 【C++题解】1002 - 编程求解1+2+3+...+n
  • 【系统架构设计师】论文:论面向服务的架构设计及其应用
  • Vue3其他Api
  • 2024.9.3 Python,二分查找解决在D天内送达包裹的能力,dfs二叉树的层平均值,动态规划二分查找贪心算法解决最长增长子序列和马戏团人塔
  • 第66期 | GPTSecurity周报
  • 无线信道中ph和ph^2的场景
  • gitee 简单使用
  • Storm AI : 最佳长文写作工具
  • 精准设计与高效开发:用六西格玛设计DFSS实现新能源汽车开发突破
  • 解除本地Git仓库与远程仓库关联
  • 【系统架构设计师-2021年】综合知识-答案及详解