自动化运维工具:ansidle playbook剧本

1、作用

将ansible一条一条需要执行的命令(任务),编排到一个文件里,统一的有序的执行。这个文件就叫playbook。playbook是ansible的脚本文件
playbook是Ansible的配置,部署和编排的语言。他们可以描述你所希望的远程系统强制执行的政策,或者在一般的IT流程的一组步骤;形象点的说就是:如果ansible的各模块(能实现各种功能)是车间里的各工具;playbook就是指导手册,目标远程主机就是库存和原料对象.

playbook是基于YAML语言格式配置

2、使用shell脚本去批量完成工作和使用ansible去批量完成工作的区别在哪里?

1.shell脚本: 脚本需要自己编写、要求写脚本的能力比较强、shell脚本的执行的并发性、多线程和多进程的方面是否有优势。通过免密通道+scp+ssh
2.ansible: 模块使用更加简单、很多模块可以使用、节约了很多脚本开发的工作、多线程和多进程、web界面管理
从运维的方便和简单、可替代性方面考虑,ansible有优势

3、playbook的核心元素

hosts : playbook配置文件作用的主机
tasks: 任务列表
variables: 变量 

vars: 变量
templates:包含模板语法的文本文件
handlers :由特定条件触发的任务
roles :用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等

4、playbook运行方式

ansible-playbook --check 只检测可能会发生的改变,但不真执行操作
ansible-playbook --list-hosts 列出运行任务的主机
ansible-playbook --syntax-check playbook.yaml 语法检测
-C:效果一样
ansible-playbook -t TAGS_NAME playbook.yaml 只执行TAGS_NAME任务
ansible-playbook playbook.yaml 运行

5、template: 模板

template模板可以使用ansible里的内置变量和yaml文件里自定义的变量

如何获取ansible里的内置变量?
ansible all -m setup
all 是主机清单里代表所有的主机
ansible web -m setup
web 是主机清单里代表web组的主机

 {{ ansible_facts["ens33"]["ipv4"]["address"] }}  -->jinja2模板里调用ansible里的内置的变量

示例
示例:给web组的机器安装管理redis服务

[root@ansible ~]# mkdir playbooks
[root@ansible ~]# cd playbooks/
[root@ansible playbooks]# vim redis.yaml
- hosts: all 
  remote_user: root
  tasks:
  - name: install redis
    yum: name=redis  state=latest

  - name: start redis
    service:  name=redis state=started

更加的复杂的操作
由于上面的操作是直接安装redis服务并启动,并没有配置文件,这还不能往生产环境中使用,生产环境中的redis肯定有不同的配置项,因此需要在安装时提供配置文件

[root@ansible playbooks]# yum install redis -y
[root@ansible playbooks]# cp /etc/redis.conf .
[root@ansible playbooks]# pwd
/root/playbooks
[root@ansible playbooks]# ls
redis.conf  redis.yaml
[root@ansible playbooks]# vim redis.conf 
 bind 0.0.0.0   添加配置

[root@ansible playbooks]# cp redis.yaml redis2.yaml
[root@ansible playbooks]# vim redis2.yaml 

- hosts: all                   #所有远程主机
  remote_user: root      #以远程主机上root用户执行
  tasks:                        #任务
  - name: remove redis
    yum: name=redis  state=absent
  - name: install redis      #任务之安装
    yum: name=redis state=latest        #动作调用yum模块安装
  - name: copy config file     #任务之复制同步配置文件到远程目标主机
    copy: src=/root/playbooks/redis.conf dest=/etc/redis.conf owner=redis       #动作copy模块执行
    notify: restart redis      #触发的动作的名字,发通知给handlers
    tags: configfile         #任务标记名configfile
  - name: start redis      #任务之启动redis
    service: name=redis state=started    #动作调用sevice模块
  handlers:              #特定情况下,接收到其他任务的通知时被触发
  - name: restart redis
    service: name=redis state=restarted

1.你使用的ansible什么版本?
2.任务:使用playbook完成
0.卸载nginx
1.yum安装nginx
2.修改nginx的配置的端口号9900
4.启动nginx
5.卸载tree命令软件
6.在所有的node节点服务器上新建/backup目录
7.编写一个脚本实现备份/etc/passwd和/etc/shadow文件到/backup下,文件名里包含当天的日期,例如2019-7-10-passwd_shadow.tar.gz 添加一个计划任务,每天的3:30去执行,在所有的node节点服务器上实施。

[root@ansible playbooks]# cat nginx_cron_backup.yaml 
- hosts: all
  remote_user: root
  tasks:
  - name: install nginx
    yum: name=nginx state=latest
  - name: modify port
    shell: sed -i '39,40 s/80/8080/g' /etc/nginx/nginx.conf
  - name: start nginx
    service: name=nginx state=restarted
  - name: absent tree
    yum: name=tree state=absent
  - name: send file
    copy: src=/test/bf.sh dest=/root/sanchuang
    notify: run shell
  handlers:
  - name: run shell
    cron: minute=30 hour=3 job='bash /root/sanchuang/bf.sh' name=backup_file

猜你喜欢

转载自blog.csdn.net/weixin_44321163/article/details/107898021
今日推荐