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

相关推荐
_.Switch2 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410832 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.2 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代3 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方4 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘4 小时前
NFS服务器
运维·服务器
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰5 小时前
[linux]docker基础
linux·运维·docker
Jason-河山5 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
雨雪飘零5 小时前
Windows系统使用OpenSSL生成自签名证书
nginx·证书·openssl