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

相关推荐
寻道模式1 小时前
【运维心得】三步10分钟拆装笔记本键盘
运维·计算机外设·笔记本
焄塰3 小时前
Ansible 管理变量和事实
学习·centos·ansible
炫友呀3 小时前
Centos 更新/修改宝塔版本
linux·运维·centos
闻道且行之3 小时前
嵌入式|VNC实现开发板远程Debian桌面
运维·debian·嵌入式
IT成长日记4 小时前
【自动化运维神器Ansible】Playbook中的when条件判断:精细化控制任务执行
运维·自动化·ansible·playbook·when·条件判断
HYI7 小时前
小公司前端多分支测试太痛苦?我自己写了个轻量 CLI
nginx·vite
key_Go7 小时前
4.Ansible自动化之-部署文件到主机
ansible
杭州泽沃电子科技有限公司8 小时前
告别翻山越岭!智能监拍远程守护输电线路安全
运维·人工智能·科技·安全
长臂人猿9 小时前
JVM常用工具:jstat、jmap、jstack
linux·运维·jvm
timeweaver11 小时前
深度解析 Nginx 前端 location 配置与优先级:你真的用对了吗?
前端·nginx·前端工程化