Python自动化运维之playbook介绍

一 点睛

playbook是一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主 机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。

playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步及异步方式。

官方提供了大量的例子,可以在 https://github.com/ansible/ansible-examples找到。

playbook是通过YAML格式来进行描述定义的,可以实现多台主机应用的部署,定义在webservers及dbservers组上执行特定指令步骤。

二 实例

1 代码

---
# list嵌套map,hosts是列表下面各个map的老板
- hosts: webservers
  vars:
    worker_processes: 4
    num_cpus: 4
    max_open_file: 65535
    root: /data
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: pkg=nginx state=latest
  - name: write the nginx config file
    template: src=/srv/salt/nginx/nginx2.conf dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
  - name: ensure nginx is running
    service: name=nginx state=started
  handlers:
    - include: handlers.yml

2 Yaml语法

https://blog.csdn.net/kwy15732621629/article/details/81104685?utm_source=blogxgwz8

3 说明

以上playbook定制了一个简单的Nginx软件包管理,内容包括安装、配置模板、状态管理等。

三 定义主机和用户

1 点睛

在playbook执行时,可以为主机或组定义变量,比如指定远程登录用户。以下为webservers组定义的相关变量,变量的作用域只限于

webservers组下的主机。

2 实例

- hosts: webservers
  vars:
    worker_processes: 4    
    num_cpus: 4    
    max_open_file: 65506    
    root: /data  
  remote_user: root

3 说明

hosts参数的作用为定义操作的对象,可以是主机或组。

本示例定义操作主机为webservers组,同时通过vars参数定义了4个变量(配置模板用到),其中remote_user为指定远程操作的用户名,默认为root账号。

四 任务列表

1 点睛

所有定义的任务列表(tasks list),playbook将按定义的配置文件自上而下的顺序执行,定义的主机都将得到相同的任务,但执行的返回结果不一定保持一致,取决于主机的环境及程序包状态。建议每个任务事件都要定义一个name标签,好处是增强可读性,也便于观察结果输出时了解运行的位置,默认使用action(具体的执行动作)来替换name作为输出。

2 实例

# map嵌套list,该任务组含有3个任务
tasks:
- name: ensure apache is at the latest version
  yum: pkg=nginx state=latest
# 在playbook可通过template模块对本地配置模板文件进行渲染并同步到目标主机。
- name: write the nginx config file
# 其中,“src=/home/test/ansible/nginx/nginx2.conf”为管理端模板文件存放位置,
# “dest=/etc/nginx/nginx.conf”为目标主机nginx配置文件位置,
  template: src=/srv/salt/nginx/nginx2.conf dest=/etc/nginx/nginx.conf
  notify:
  - restart nginx
# 功能是检测Nginx服务是否为运行状态,如没有则启动。其中name标签对下面的action(动作)进行描述;
# action(动作)部分可以是 Ansible的任意模块,本例为services模块,参数使用key=value的格式,如“name=nginx”,
- name: ensure nginx is running
  service: name=nginx state=started
# 在定义任务时也可以引用变量,格式如下,vhost为定义的变量
- name: create a virtual host file for {{ vhost }}    
  template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}

五 模板文件

1 示例

user nginx;
worker_processes {{ worker_processes }};
{% if num_cpus == 2 %}
worker_cpu_affinity 01 10;
{% elif num_cpus == 4 %}
worker_cpu_affinity 1000 0100 0010 0001;
{% elif num_cpus >= 8 %}
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
{% else %}
worker_cpu_affinity 1000 0100 0010 0001;
{% endif %}
worker_rlimit_nofile {{ max_open_file }};

2 说明

Ansible会根据定义好的模板渲染成真实的配置文件,模板使用YAML语法,最终生成的nginx.conf配置如下:

Ansible会根据定义好的模板渲染成真实的配置文件,模板使用YAML语法,最终生成的nginx.conf配置如下:
user              nginx; 
worker_processes  4; 
worker_cpu_affinity 1000 0100 0010 0001; 
worker_rlimit_nofile 65506;

六 处理程序

1 点睛

当目标主机配置文件发生变化后,通知处理程序(Handlers)来触发后续的动作,比如重启nginx服务。Handlers中定义的处理程序在没 通知触发时是不会执行的,触发后也只会运行一次。触发是通过Handlers定义的name标签来识别的,比如下面notify中的“restart nginx”与 handlers中的“name:restart nginx”保持一致。

    notify:
    - restart nginx
    handlers:    
      - name: restart nginx      
        service: name=nginx state=restarted

七 执行playbook

1 点睛

执行playbook,可以通过ansible-playbook命令实现,格式:ansibleplaybook playbook file(.yml)[参数],如启用10个并行进程数执行playbook:

#ansible-playbook /home/test/ansible/playbooks/nginx.yml -f 10,

2 参数说明

  • -u REMOTE_USER:手工指定远程执行playbook的系统用户; 
  • --syntax-check:检查playbook的语法; 
  • --list-hosts playbooks:匹配到的主机列表; 
  • -T TIMEOUT:定义playbook执行超时时间; 
  • --step:以单任务分步骤运行,方便做每一步的确认工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值