day32(8/20)——playbook剧本安装nginx、roles

目录

[一、playbook 剧本安装nginx](#一、playbook 剧本安装nginx)

二、roles(难点)

1、roles介绍

2、创建roles的目录结构

3、案例

4、练习:


一、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、练习:

1.创建roles⽬录及⽂件,并确认⽬录结构

root@m0 \~# cd /etc/ansible/roles/

root@m0 roles# tree

.

└── httpd

├── files

├── handlers

│ └── main.yml

├── meta

│ └── main.yml

├── tasks

│ └── main.yml

├── templates

└── vars

└── main.yml

2.准备httpd服务器的主⻚⽂件,php测试⻚和配置⽂件等

root@m0 \~# yum -y install httpd

root@m0 roles# echo "<?php\n\tphpinfo();\n?>" > /etc/ansible/roles/httpd/files/test.php

root@m0 roles# echo "test main page" > /etc/ansible/roles/httpd/files/index.html

root@m0 roles# cp /etc/httpd/conf/httpd.conf /etc/ansible/roles/httpd/files/

3.编写httpd⻆⾊的main.yml⽂件

root@m0 roles# vim /etc/ansible/roles/httpd/tasks/main.yml


  • name: 安装httpd

yum: name=httpd,httpd-devel state=present

  • name: 同步httpd配置文件

copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf

notify: restart httpd

  • name: 同步主页文件

copy: src=/etc/ansible/roles/httpd/files/index.html dest=/var/www/html/index.html

  • name: 同步php测试页

copy: src=/etc/ansible/roles/httpd/files/test.php dest=/var/www/html/test.php

  • name: 启动httpd并开机自启动

service: name=httpd state=started enabled=yes

4.编写httpd⻆⾊⾥的handler

root@m0 ansible# vim /etc/ansible/roles/httpd/handlers/main.yml


  • name: restart httpd

service: name=httpd state=restarted

5.将两台主机添加到组

root@m0 \~# vim /etc/ansible/hosts

s1 ansible_ssh_host=192.168.1.68 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=q

s2 ansible_ssh_host=192.168.1.69 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=q

s

s1

s2

6.编写httpd的playbook⽂件调⽤前⾯定义好的⻆⾊

root@m0 roles# vim /etc/ansible/playbook/httpd.yaml


  • hosts: s

remote_user: root

roles:

  • httpd

7.执行playbook文件

root@m0 roles# ansible-playbook /etc/ansible/playbook/httpd.yaml //执行

相关推荐
极客先躯4 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java面试题总结4 小时前
Linux-Ubantu-贴士-apt的地盘
linux·运维·服务器
志栋智能4 小时前
超自动化巡检:提升MTTR,缩短业务影响时间
运维·自动化
kong@react5 小时前
Rocky Linux 10.2 全面解析:企业级 CentOS 替代方案及保姆级docker安装
java·linux·运维·docker
睡不醒男孩0308235 小时前
第八篇:如何构建一站式 PostgreSQL 性能优化与智能管控平台?从盲目排查到 CLup 自动化运维演进
运维·postgresql·性能优化
某林2125 小时前
Isaac Sim 5.1.0 无头服务器部署与 RTX 显存段错误排障全记录
运维·服务器·docker·容器·isaac
m0_738120726 小时前
Docker 环境下 Vulfocus 靶场搭建全流程(附镜像源问题解决方案)
运维·服务器·网络·安全·docker·容器
二等饼干~za8986686 小时前
2026 主流 GEO 源码厂商实测:云罗 GEO、摘星智能、棋引科技技术与落地能力对比
大数据·运维·科技
Championship.23.246 小时前
Linux 3.0 音频机制深度解析:ALSA基础架构与传统音频驱动模型
linux·运维·音视频·alsa
无证驾驶梁嗖嗖7 小时前
ubuntu下测试nvme带宽和健康度
运维