Ansible-playbook管理复杂任务

一、 playbook

部署环境、搭建服务、修改配置过程中,对于需反复执行的、较为复杂的任务,我们可以用Playbook完成。playbook通过YAML格式进行描述定义,可以实现多台主机应用的部署。

二、yml文件

# cd /etc/ansible
# vim copy.yml

文件内容:

---                           //文档标志符
- hosts: server1     //指定主机
  remote_user: root  //指定在被管理的主机上执行任务的用户
  tasks:      //任务列表
  - name: create user    //任务名
    user: name=wang_06    //调用user模块
  - name: create directory
    command: mkdir /wh_k/wang_06     //调用command模块
  - name: chmod
    command: chown wang_06:wang_06 /wh_k/wang_06  //调用command模块
  - name: copy file
    copy: src=/wh_k/test1.txt dest=/wh_k/wang_06/  //调用copy模块

# ansible-playbook --check copy.yml
# ansible-playbook  copy.yml        

备注

 1.第一行中,文件开头为 ---;这是YAML将文件解释为正确的文档的要求。YAML一个文件支持多个文档,每个“文档”由 --- 符号分割,Ansible只需要一个文件存在一个文档即可。

 2.YAML对空格非常敏感,空格和缩进要注意

 3.任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行,完成第一个任务后再开始第二个。在自上而下运行某playbook时如果中途发生错误,所有该主机上已执行任务都将回滚。

三、示例详解

# vim copy.yml
---                      //文档标志符
- hosts: server1     //定义组和主机
  remote_user: root  // 管理机上执行任务的用户
  gather_facts: false   // 获取主机相关信息 true|false

  vars:
   - user: "wang_06"  //定义变量

  tasks:
  - name: create user
    command: grep {{user}} /etc/passwd
    ignore_errors: True
    register: result      //查看用户是否存在

  - shell: echo `date +%Y-%m-%d_%H:%M:%S` ":User exit.">>/wh_k/ansible.log
    when: result|succeeded   //用户存在,输出信息

  - user: name="{{user}}"
    when: result|failed          //用户不存在,新建用户

  - name: create directory
    shell: ls /wh_k/{{user}}
    ignore_errors: True
    register: result            //目录是否存在

  - command: mkdir /wh_k/{{user}}     //command可换成shell
    when: result|failed     //目录不存在,新建目录

  - shell: echo `date +%Y-%m-%d_%H:%M:%S`":File is exit,create file failed." >>/wh_k/ansible.log
    when: result|succeeded  //目录存在,输出信息

  - name: chmod
    command: chown {{user}}:{{user}} /wh_k/{{user}}   //赋权

  - name: copy file
    copy: src=/wh_k/test1.txt dest=/wh_k/{{user}}/        //拷贝文件
    notify: insert messages     //当拷贝文件执行正确时,执行调用的操作

  handlers:
  - name: insert messages
    shell: echo `date +%Y-%m-%d_%H:%M:%S`"Ansible  done.">>/wh_k/{{user}}/test1.txt         //定义被调用的操作

说明:

1.gather_facts

gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息
gather_facts: no 或者是false是关闭,gather_facts:yes 或者是true都是开启

如:

...
gather_facts: true       //开启facts模块
...
- name: test
  shell: touch /tmp/test.txt
  when: facter_ipaddress == "192.168.61.128"    // 主机地址是xxx时,执行操作
        //  facter_ipaddress调用的是facts模块的值,当facts模块开启时,任务才能执行

2.vars

定义变量需要用引号引起来,调用变量需要用大括号引用

如:

vars:
- user: "wang_06"
....
  shell: ls /wh_k/{{user}}

3.检测是否存在

执行相关命令,返回succeeded表示存在,返回false表示不存在

如:

 ...
shell: ls /wh_k/{{user}}
ignore_errors: True
register: result

4.notify

当我们执行 tasks 后,服务器发生变化之后我们要执行一些操作。
上面示例中,只有 copy 模块真正执行后,才会去调用下面的 handlers 相关的操作。
也就是说如果 src 和 dest 内容是一样的,并不会去执行 handlers 里面的 shell 相关命令。
所以这种比较适合配置文件发生更改后,需要重启服务的操作。

5.handlers

定义追加执行的操作,由notify调用。

6.循环执行

某台主机上批量执行任务,比如修改text1.txt 和 test2.txt ...文件属性

如:

 ...
 tasks:
 - name: change mode
    shell: chmod 755 /tmp/{{item}}
    with_items:
     - test1.txt
     - test2.txt
 ...

原文地址:http://blog.51cto.com/13689359/2333338

时间: 2024-09-30 21:05:56

Ansible-playbook管理复杂任务的相关文章

自动化运维工具ansible playbook和roles的使用

ansible的结构: Inventory 用来定义被控制端 Modules 定义被控制端可用的操作 Ad Hoc Commands 定义被控制端可以执行命令的 Playbook 批量运行的方式 Tasks: 任务:由各模块所支持执行的特定操作:可以通过ansible-doc module_name来查看帮助文档,非常详细 -m  user -a 'name= password=' Variables: 变量 Templates: 模板:(如执行httpd服务时,各节点上httpd的配置文件内容

ansible playbook使用总结

Ansible playbook的使用 playbooks概念 task: 任务:使用各模块所执行的特性操作任务,比如:-m user -a 'name= password=' Variables: 变量: Templates: 模板 在定义模板后可以实现各节点对应的变量来取代,表达式自身会根据当前节点所赋值做运算,之后生成的值则赋予这个参数,用于生产不同配置的配置文件,所以模板主要实现配置不同场景文本文件 而且这种使用模板语言来定义 模板语言中可以根据定义替换成特定主机的某些值 handler

ansible自动化管理windows系统实战

一.简述 1.说明日常系统自动化运维过程中难免会有windows系列服务器,就开源软件来说目前大多的对windows批量管理兼容性不太好;不像Linux系统便捷,但现实中确实有些业务需要跑在windows上;搜索查找折腾一番后,发现python开发的ansible(已经被redhat收购)有比较好的解决方案,通过一番折腾,整理出来,以备忘交流; 2.实验环境服务器端:CentOS7.4_x64 自带python 2.7.5 ip:172.16.3.167源码安装ansible 被管理window

ansible应用管理

实验环境: 主控机:192.168.1.9(centos 7.5)被控机:192.168.1.8(centos 7.5);192.168.1.7(centos 7.4);192.168.1.6(cnetos 6.9)虚拟机:vmware 14做ansible实验前,必须做好主控机的基于被控机的key验证登录具体参照前面的博文中的基于key验证.http://blog.51cto.com/13698281/2118972 安装ansible rpm包安装: EPEL源 yum install an

Python+Django+Ansible Playbook自动化运维项目实战

Python+Django+Ansible Playbook自动化运维项目实战网盘地址:https://pan.baidu.com/s/1bZ1Ju0mld3KLZawdxZ7m6Q 密码: 5k9x备用地址(腾讯微云):https://share.weiyun.com/5E7aUWv 密码:wzfdrn 本课程将带你从项目实践角度出发,围绕自动化资产扫描和发现.Ansible自动化任务执行的内容展开,让运维更简单.更高效,Hold住高薪! 适合人群:如果你是一位运维党,对Python运维自动化

Django + Ansible 主机管理

本文分享内容如下: 内容目录 Django 基础 MVC ORM COMMAND AuthenticationAnsible 基础 配置 ad-hoc 命令集 python api代码解读 演示 创建虚拟化环境并进入python3/python -m venv venv(linux)source venv\bin\active(win) venv\Scripts\active 安装第三方库pip install -r requirements.txt 初始化python manage.py ma

ansible使用二(ansible playbook)

ansible playbook ansible playbooks 是使用ansible简单的配置管理部署系统的基础,使用YAML语法格式的配置文件.每一个playbook中包含一系列的任务.使用ansible playbook可以更方便的管理.维护多态主机. 1.yaml语法    yaml是”YAML Ain't a Markup Language”的缩写,即不是一种标记性语言,它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料

运维自动化之ansible playbook一键化解决大量主机bash更新问题

今天发现有bash漏洞,但我这里近1000台服务器,为了方便.省时间,觉得使用ansible安装bash更新包,下面分享一下我的安装方法. 1.安装的playbook的内容 19:00:03 # cd /etc/ansible [email protected]:/etc/ansible 19:00:06 # cat update_bash.yml  --- - hosts: "{{ host }}"   remote_user: "{{ user }}"   ga

ansible批量管理远程服务器

使用ansible批量管理远程服务器 背景 本地需要管理远程的一批服务器,主要执行以下任务: 1) 将本地的文件复制到远端所有服务器:  2) 需要在远程服务器中执行一个个命令: 远端服务器路径并非完全一致,一般访问通过环境变量中定义的变量路径访问:  比如在.bashrc中定义$app_path=/opt/app/bin 最终选择ansible,使用这个自动化运维工具可以满足我的需求:  下面介绍下对于我这种场景需要使用的ansible的主要模块:  关于ansible是什么以及安装配置请自行

ansible playbook yummodule error

ansible playbookweb.yaml[[email protected] Desktop]# cat web.yaml- name: web servers  remote_user: root  hosts: webservers tasks:  - name: install httpd    yum: name=httpd state=present  - name: httpd service     service: name=httpd enabled=yes state