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 //执行

相关推荐
vvw&9 分钟前
如何在 Ubuntu 22.04 上安装 Graylog 开源日志管理平台
linux·运维·服务器·ubuntu·开源·github·graylog
o(╥﹏╥)29 分钟前
在 Ubuntu 上安装 VS Code
linux·运维·vscode·ubuntu·vs
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
不爱学英文的码字机器1 小时前
[Linux] Shell 命令及运行原理
linux·运维·服务器
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
qq_433618441 小时前
shell 编程(三)
linux·运维·服务器
苹果醋31 小时前
2020重新出发,MySql基础,MySql表数据操作
java·运维·spring boot·mysql·nginx
两张不够花1 小时前
Jenkins 持续集成部署
运维·jenkins
Hacker_xingchen2 小时前
天融信Linux系统安全问题
linux·运维·系统安全
丘狸尾2 小时前
[cisco 模拟器] ftp服务器配置
android·运维·服务器