ansible playbook使用、安装nginx、管理配置文件

Asnfy 2020-11-13 12:25:43
安装 nginx 使用 ansible playbook


ansible playbook使用

playbook与ansible命令行执行命令的区别就是将要执行的操作定义到配置文件中,直接执行配置文件即可

创建playbook配置文件:

[root@linux01 ~]# vim /etc/ansible/test.yml

配置文件内容:

---
- hosts: 192.168.234.130
user: root
tasks:
- name: test_playbook
shell: touch /tmp/test_playbook

说明: 第一行需要有三个杠,hosts参数指定了对哪些主机进行操作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义;user参数指定了使用什么用户登录远程主机操作;tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来,shell是ansible模块名字,该配置文件需要执行的操作就是在指定的192.168.234.130机器/tmp目录下创建test_playbook文件

执行playbook配置文件:

[root@linux01 ~]# ansible-playbook /etc/ansible/test.yml
PLAY [192.168.234.130] **************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.234.130]
TASK [test_playbook] ****************************************************************************************************************************************
[WARNING]: Consider using file module with state=touch rather than running touch
changed: [192.168.234.130]
PLAY RECAP **************************************************************************************************************************************************
192.168.234.130 : ok=2 changed=1 unreachable=0 failed=0

在192.168.234.130机器上查看文件是否被创建:

[root@linux02 ~]# ll /tmp/test_playbook
-rw-r--r-- 1 root root 0 1月 2 16:39 /tmp/test_playbook

playbook变量的用法

创建playbook配置文件:

[root@linux01 ~]# vim /etc/ansible/create_test.yml

配置文件内容:

---
- name: create_test
hosts: 192.168.234.130
user: root
gather_facts: false
vars:
- c: "pb_user"
tasks:
- name: create test
user: name="{
{ c }}"

说明:gather_facts: false表示不收集系统信息(ip地址、系统版本等等),当机器过多,不关闭gather_facts会比较影响性能,获取gather_facts收集的信息使用命令:ansible 192.168.234.130 -m setup;c是变量,变量值pb_user,tasks中user模块表示创建用户,用户名pb_user

执行配置文件:

[root@linux01 ~]# ansible-playbook /etc/ansible/create_test.yml
PLAY [create_test] ******************************************************************************************************************************************
TASK [create test] ******************************************************************************************************************************************
changed: [192.168.234.130]
PLAY RECAP **************************************************************************************************************************************************
192.168.234.130 : ok=1 changed=1 unreachable=0 failed=0

#如果指定的机器该用户已存在,changed的值会是0

在192.168.234.130机器查看新创建的用户:

[root@linux02 ~]# tail -1 /etc/passwd
pb_user:x:1003:1003::/home/pb_user:/bin/bash

playbook循环的用法

当前客户机有3个文件,权限644:

[root@linux02 ~]# ls -l /tmp/111.log /tmp/222.log /tmp/333.log
-rw-r--r-- 1 root root 0 1月 2 18:47 /tmp/111.log
-rw-r--r-- 1 root root 0 1月 2 18:47 /tmp/222.log
-rw-r--r-- 1 root root 0 1月 2 18:47 /tmp/333.log

#需要通过ansible playbook将3个文件权限变更为600

创建配置文件:

[root@linux01 ~]# vim /etc/ansible/while.yml

配置文件内容:

---
- hosts: 192.168.234.130
user: root
tasks:
- name: change mode for files
file: path=/tmp/{
{ item }} mode=600
with_items:
- 111.log
- 222.log
- 333.log

#循环更改客户机3个文件的权限为600

执行配置文件:

[root@linux01 ~]# ansible-playbook /etc/ansible/while.yml
PLAY [192.168.234.130] **************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.234.130]
TASK [change mode for files] ********************************************************************************************************************************
changed: [192.168.234.130] => (item=111.log)
changed: [192.168.234.130] => (item=222.log)
changed: [192.168.234.130] => (item=333.log)
PLAY RECAP **************************************************************************************************************************************************
192.168.234.130 : ok=2 changed=1 unreachable=0 failed=0

在客户机查看权限变更结果:

[root@linux02 ~]# ls -l /tmp/111.log /tmp/222.log /tmp/333.log
-rw------- 1 root root 0 1月 2 18:47 /tmp/111.log
-rw------- 1 root root 0 1月 2 18:47 /tmp/222.log
-rw------- 1 root root 0 1月 2 18:47 /tmp/333.log

playbook条件判断的用法

playbook中条件判断使用when模块,创建配置文件:

[root@linux01 ~]# vim /etc/ansible/when.yml

配置文件内容:

---
- hosts: web
user: root
tasks:
- name: use when
shell: touch /tmp/when.txt
when: ansible_ens33.ipv4.address == "192.168.234.130"

说明:针对web主机组中的所有机器,对ip为192.168.234.130的机器创建文件when.txt,gather_facts不能关闭,ansible_ens33.ipv4.address以及ip是从gather_facts中获取

执行配置文件:

[root@linux01 ~]# ansible-playbook /etc/ansible/when.yml
PLAY [web] **************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.234.130]
ok: [127.0.0.1]
TASK [use when] *********************************************************************************************************************************************
skipping: [127.0.0.1]
[WARNING]: Consider using file module with state=touch rather than running touch
changed: [192.168.234.130]
PLAY RECAP **************************************************************************************************************************************************
127.0.0.1 : ok=1 changed=0 unreachable=0 failed=0
192.168.234.130 : ok=2 changed=1 unreachable=0 failed=0

在192.168.234.130客户机查看文件是否创建:

[root@linux02 ~]# ls -l /tmp/when.txt
-rw-r--r-- 1 root root 0 1月 2 19:49 /tmp/when.txt

playbook handlers用法

handlers的作用与shell中的&&用法相同,表示前一个命令执行成功,再执行后面的命令

创建配置文件:

[root@linux01 ~]# vim /etc/ansible/handlers.yml

配置文件内容:

---
- name: handlers_test
hosts: 192.168.234.130
user: root
tasks:
- name: copy file
copy: src=/etc/passwd dest=/tmp/aaa.sh
notify: test handlers
handlers:
- name: test handlers
shell: echo "111111" >> /tmp/aaa.sh

#当tasks中的内容执行成功时,才执行notify指定的handlers,通过handlers中name定义的名称指定,可以定义多个handlers,notify也可以指定多个handlers

执行配置文件:

[root@linux01 ~]# ansible-playbook /etc/ansible/handlers.yml
PLAY [handlers_test] ****************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.234.130]
TASK [copy file] ********************************************************************************************************************************************
changed: [192.168.234.130]
RUNNING HANDLER [test handlers] *****************************************************************************************************************************
changed: [192.168.234.130]
PLAY RECAP **************************************************************************************************************************************************
192.168.234.130 : ok=3 changed=2 unreachable=0 failed=0

在客户机查看handlers中的内容是否被写入文件:

[root@linux02 ~]# tail -1 /tmp/aaa.sh
111111

playbook安装nginx

当nginx被编译安装增加了配置模块的时候,其他客户机yum安装的就会就差异,接下来即可使用ansible playbook批量安装服务端已编译安装好的nginx

nginx编译安装目录:/usr/local/nginx/

nginx配置文件目录:/usr/local/nginx/conf/nginx.conf

nginx启动脚本目录:/usr/local/nginx/sbin/nginx

创建配置文件目录:

[root@linux01 ~]# mkdir /etc/ansible/nginx_install

创建角色目录(子配置文件目录):

[root@linux01 ~]# cd /etc/ansible/nginx_install/
[root@linux01 nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}

目录结构:

[root@linux01 nginx_install]# tree roles/
roles/
├── common
│ ├── files
│ ├── handlers
│ ├── meta
│ ├── tasks
│ ├── templates
│ └── vars
└── install
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars

说明:roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作;每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务;files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件以及启动脚本等模板文件,vars下为定义的变量

打包nginx安装目录到/roles/install/files:

[root@linux01 nginx_install]# cd /usr/local/
[root@linux01 local]# tar zcvf nginx.tar.gz nginx/
[root@linux01 local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/

在common的tasks下创建配置文件,用于安装nginx的依赖包:

[root@linux01 roles]# vim common/tasks/main.yml

配置文件内容:

- name: Install initializtion require software
yum: name="zlib-devel,pcre-devel" state=installed

在install的vars下创建配置文件,用于定义变量:

[root@linux01 roles]# vim install/vars/main.yml

配置文件内容:

nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx

在install的tasks下创建配置文件,用于拷贝nginx安装目录到目标机器:

[root@linux01 roles]# vim install/tasks/copy.yml

配置文件内容:

- name: Copy Nginx Software
copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software
shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/

继续在install的tasks下创建配置文件,用于在客户机创建用户,启动nginx服务,删除压缩包:

[root@linux01 roles]# vim install/tasks/install.yml

配置文件内容:

- name: Create Nginx User
user: name={
{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service
shell: /usr/local/nginx/sbin/nginx
- name: Delete Nginx compression files
shell: rm -rf /tmp/nginx.tar.gz

再次在install的tasks下创建配置文件,用于引用install.yml和copy.yml配置文件:

[root@linux01 roles]# vim install/tasks/main.yml

配置文件内容:

- include: copy.yml
- include: install.yml

到此两个roles:common和install就定义完成了,接下来要定义一个入口配置文件:

[root@linux01 nginx_install]# vim install.yml

配置文件内容:

---
- hosts: 192.168.234.130
remote_user: root
gather_facts: True
roles:
- common
- install

#指定客户机为192.168.234.130,当需要在多台机器操作时,可以定义主机组

执行配置文件:

[root@linux01 nginx_install]# ansible-playbook install.yml
[DEPRECATION WARNING]: The use of 'include' for tasks has been deprecated. Use 'import_tasks' for static inclusions or 'include_tasks' for dynamic
inclusions. This feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[DEPRECATION WARNING]: include is kept for backwards compatibility but usage is discouraged. The module documentation details page may explain more about
this rationale.. This feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in
ansible.cfg.
PLAY [192.168.234.130] **************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.234.130]
TASK [common : Install initializtion require software] ******************************************************************************************************
ok: [192.168.234.130]
TASK [install : Copy Nginx Software] ************************************************************************************************************************
ok: [192.168.234.130]
TASK [install : Uncompression Nginx Software] ***************************************************************************************************************
[WARNING]: Consider using unarchive module rather than running tar
changed: [192.168.234.130]
TASK [install : Create Nginx User] **************************************************************************************************************************
ok: [192.168.234.130]
TASK [install : Start Nginx Service] ************************************************************************************************************************
changed: [192.168.234.130]
TASK [install : Delete Nginx compression files] *************************************************************************************************************
[WARNING]: Consider using file module with state=absent rather than running rm
changed: [192.168.234.130]
PLAY RECAP **************************************************************************************************************************************************
192.168.234.130 : ok=7 changed=3 unreachable=0 failed=0

在客户机查看nginx服务已启动:

[root@linux02 ~]# ps aux|grep nginx
root 43798 0.0 0.1 45856 1128 ? Ss 22:09 0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 43799 0.0 0.1 46312 1892 ? S 22:09 0:00 nginx: worker process
root 43860 0.0 0.0 112728 972 pts/0 S+ 22:10 0:00 grep --color=auto nginx

命令执行流程图:
在这里插入图片描述
#红框部分已忽略,因为编译安装的nginx,nginx.conf配置文件和启动脚本都在nginx安装目录中,拷贝nginx安装目录时,已经包含了启动脚本与nginx.conf配置文件

playbook更新/回滚配置文件

更新

创建目录:

[root@linux01 ~]# mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}

说明:其中new为更新时用到的,old为回滚时用到的,files下面为更新文件存放目录,handlers为重启nginx服务的命令

将需要更新的配置文件或目录拷贝到roles/new/files下:

[root@linux01 ~]# cd /usr/local/nginx/conf/
[root@linux01 conf]# cp -r nginx.conf vhost/ /etc/ansible/nginx_config/roles/new/files/

在roles/new/vars下创建配置文件,用于定义变量:

[root@linux01 conf]# cd /etc/ansible/nginx_config/
[root@linux01 nginx_config]# vim roles/new/vars/main.yml

配置文件内容:

nginx_basedir: /usr/local/nginx

在roles/new/handlers下创建配置文件,用于更新配置文件后重装nginx:

[root@linux01 nginx_config]# vim roles/new/handlers/main.yml

配置文件内容:

- name: restart nginx
shell: /usr/local/nginx/sbin/nginx -s reload

在roles/new/tasks下创建配置文件,用于更新配置文件:

[root@linux01 nginx_config]# vim roles/new/tasks/main.yml

配置文件内容:

- name: copy conf file
copy: src={
{ item.src }} dest={
{ nginx_basedir }}/{
{ item.dest }} backup=yes owner=root group=root mode=0644
with_items:
- { src: nginx.conf, dest: conf/nginx.conf }
- { src: vhost, dest: conf/ }
notify: restart nginx

定义入口配置文件:

[root@linux01 nginx_config]# vim update.yml

配置文件内容:

---
- hosts: 192.168.234.130
user: root
roles:
- new

执行配置文件即可更新指定主机:

[root@linux01 nginx_config]# ansible-playbook update.yml
PLAY [192.168.234.130] **************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************
ok: [192.168.234.130]
TASK [new : copy conf file] *********************************************************************************************************************************
changed: [192.168.234.130] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})
changed: [192.168.234.130] => (item={u'dest': u'conf/', u'src': u'vhost'})
RUNNING HANDLER [new : restart nginx] ***********************************************************************************************************************
changed: [192.168.234.130]
PLAY RECAP **************************************************************************************************************************************************
192.168.234.130 : ok=3 changed=2 unreachable=0 failed=0

回滚

创建回滚配置文件:

[root@linux01 nginx_config]# vim backup.yml

配置文件内容:

---
- hosts: 192.168.234.130
user: root
roles:
- old

同步new目录下的文件到old目录:

[root@linux01 nginx_config]# rsync -av roles/new/ roles/old/

在每次变更new/files目录下的文件时,先将当前使用的配置文件同步到old/files:rsync -av roles/new/files/ roles/old/files

当更新的配置文件有问题需要回滚时,执行回滚配置文件即可:ansible-playbook backup.yml

版权声明
本文为[Asnfy]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Powerful_Fy/article/details/103806621

  1. [front end -- JavaScript] knowledge point (IV) -- memory leakage in the project (I)
  2. This mechanism in JS
  3. Vue 3.0 source code learning 1 --- rendering process of components
  4. Learning the realization of canvas and simple drawing
  5. gin里获取http请求过来的参数
  6. vue3的新特性
  7. Get the parameters from HTTP request in gin
  8. New features of vue3
  9. vue-cli 引入腾讯地图(最新 api,rocketmq原理面试
  10. Vue 学习笔记(3,免费Java高级工程师学习资源
  11. Vue 学习笔记(2,Java编程视频教程
  12. Vue cli introduces Tencent maps (the latest API, rocketmq)
  13. Vue learning notes (3, free Java senior engineer learning resources)
  14. Vue learning notes (2, Java programming video tutorial)
  15. 【Vue】—props属性
  16. 【Vue】—创建组件
  17. [Vue] - props attribute
  18. [Vue] - create component
  19. 浅谈vue响应式原理及发布订阅模式和观察者模式
  20. On Vue responsive principle, publish subscribe mode and observer mode
  21. 浅谈vue响应式原理及发布订阅模式和观察者模式
  22. On Vue responsive principle, publish subscribe mode and observer mode
  23. Xiaobai can understand it. It only takes 4 steps to solve the problem of Vue keep alive cache component
  24. Publish, subscribe and observer of design patterns
  25. Summary of common content added in ES6 + (II)
  26. No.8 Vue element admin learning (III) vuex learning and login method analysis
  27. Write a mini webpack project construction tool
  28. Shopping cart (front-end static page preparation)
  29. Introduction to the fluent platform
  30. Webpack5 cache
  31. The difference between drop-down box select option and datalist
  32. CSS review (III)
  33. Node.js学习笔记【七】
  34. Node.js learning notes [VII]
  35. Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
  36. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  37. 【JQuery框架,Java编程教程视频下载
  38. [jQuery framework, Java programming tutorial video download
  39. Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)
  40. Vue router loads different components according to background data (thinking - & gt; Implementation - & gt; (more than implementation)
  41. 【Vue,阿里P8大佬亲自教你
  42. 【Vue基础知识总结 5,字节跳动算法工程师面试经验
  43. [Vue, Ali P8 teaches you personally
  44. [Vue basic knowledge summary 5. Interview experience of byte beating Algorithm Engineer
  45. 【问题记录】- 谷歌浏览器 Html生成PDF
  46. [problem record] - PDF generated by Google browser HTML
  47. 【问题记录】- 谷歌浏览器 Html生成PDF
  48. [problem record] - PDF generated by Google browser HTML
  49. 【JavaScript】查漏补缺 —数组中reduce()方法
  50. [JavaScript] leak checking and defect filling - reduce() method in array
  51. 【重识 HTML (3),350道Java面试真题分享
  52. 【重识 HTML (2),Java并发编程必会的多线程你竟然还不会
  53. 【重识 HTML (1),二本Java小菜鸟4面字节跳动被秒成渣渣
  54. [re recognize HTML (3) and share 350 real Java interview questions
  55. [re recognize HTML (2). Multithreading is a must for Java Concurrent Programming. How dare you not
  56. [re recognize HTML (1), two Java rookies' 4-sided bytes beat and become slag in seconds
  57. 【重识 HTML ,nginx面试题阿里
  58. 【重识 HTML (4),ELK原来这么简单
  59. [re recognize HTML, nginx interview questions]
  60. [re recognize HTML (4). Elk is so simple