ansible--playbook用法与自己的yml范例总结

介绍

命令用法

  • 运行playbook的方式

    ansible-playbook <filename.yml> ... [options]
  • 常见选项
    --check -C 只检测可能会发生的改变,但不真正执行操作
    --list-hosts 列出运行任务的主机
    --list-tags 列出tag
    --list-tasks 列出task
    --limit 主机列表 只针对主机列表中的主机执行
    -v -vv -vvv 显示过程
  • 示例
    ansible-playbook file.yml --check 只检测
    ansible-playbook file.yml
    ansible-playbook file.yml --limit websrvs

    Playbook核心元素

  • Hosts 执行的远程主机列表
  • Tasks 任务集
  • Varniables 内置变量或自定义变量在playbook中调用
  • Templates 模板,可替换模板文件中的变量并实现一些简单逻辑的文件
  • Handlers 和 notity 结合使用,由特定条件触发的操作,满足条件方才执行,
    否则不执行
  • tags 标签 指定某条任务执行,用于选择运行playbook中的部分代码。ansible
    具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其
    确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可
    以通过tags跳过此些代码片断

playbook执行的文件为yml格式

  • 此为范例
---
- hosts: all    # 代表在所有主机执行
  remote_user: root #以root身份执行
  tasks:
    - name: hello world #标签名
      command: /usr/bin/wall hello world #执行的命令

与shell脚本对比

SHELL脚本

#!/bin/bash
# 安装Apache
yum install --quiet -y httpd
# 复制配置文件
cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
cp/tmp/vhosts.conf /etc/httpd/conf.d/
# 启动Apache,并设置开机启动
service httpd start
chkconfig httpd on

Playbook定义


---
- hosts: all
 tasks:
 - name: "安装Apache"
 yum: name=httpd
 - name: "复制配置文件"
 copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/
 - name: "复制配置文件"
 copy: src=/tmp/vhosts.conf dest=/etc/httpd/conf.cd/
 - name: "启动Apache,并设置开机启动"
 service: name=httpd state=started enabled=yes

handlers和notify结合使用触发条件

  • Handlers
    是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生
    变化时,才会采取一定的操作
  • Notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生
    时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。
    在notify中列出的操作称为handler,也即notify中调用handler中定义的操作

自己的yml范例

#install httpd
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install package
      yum: name=httpd
    - name: config file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
      tags: config
    - name: service
      service: name=httpd state=started enabled=yes
      tags: service
    - name: restart service
      service: name=httpd state=restarted
      tags: service
  handlers:
    - name: restart service
      service: name=httpd state=restarted

item和变量使用

---
# file var
- hosts: app
  remote_user: root

  tasks:
    - name: file
      file: name=/data/{{item}}{{mark}}{{ansible_hostname}}.log state=touch
      with_items:
        - abc
        - xyz
        - 123

  • item 组
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: create group
      group: name={{item}}
      with_items:
        - agroup
        - bgroup
        - cgroup

    - name: create user
      user: name={{item.name}}  group={{item.group}}
      with_items:
        - {name: "aaa",group: "agroup"}
        - {name: "bbb",group: "bgroup"}
        - {name: "ccc",group: "cgroup"}

templates使用

---
  - hosts: all
  - vars:
    test_ports:
      - 81
      - 82
      - 83
    tasks:
      - name: test
        template: src=test.conf.j2 dest=/data/test.conf

{%for i in test_ports %}
server {
    listen  {{i}}
    server_name www.a.com
    root   /app/websitea/
}
{%endfor%}
---
# file var
- hosts: appsrvs
  remote_user: root
  vars_files:
    - vars.yml
  vars:
    - port: 1234

  tasks:
    - name: file
      file: name=/data/{{ansible_hostname}}{{mark}}{{port}}.log state=touch 

原文地址:https://blog.51cto.com/9019400/2385520

时间: 2024-10-19 05:25:38

ansible--playbook用法与自己的yml范例总结的相关文章

Ansible高级用法

Ansible playbook的核心元素: tasks: 任务 variables: 变量 templates: 模板 handlers: 处理器 roles: 角色 变量: facts --extra-vars "name=value name=value" role定义 Inventory中的变量: 主机变量 hostname name=value name=value 组变量 [groupname:vars] name=value name=value Inventory的高级

Ansible PlayBook语法(4)

title: Ansible PlayBook语法(4) date: 2018-12-02 10:53:24 tags: Ansible categories: Ansible copyright: true --- Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署

运维自动化之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 playbook安装mysql

上次介绍了如何使用ansible playbook安装zabbix客户端(http://dl528888.blog.51cto.com/2382721/1436745),这次介绍一下如何使用playbook安装mysql. 下面是安装mysql的信息: mysql_basedir: /data/mysql/basedir                    源码目录 mysql_datadir: /data/mysql/datadir                    数据目录 mysql

Ansible playbook API 开发 调用测试

Ansible是Agentless的轻量级批量配置管理工具,由于出现的比较晚(13年)基于Ansible进行开发的相关文档较少,因此,这里通过一些小的实验,结合现有资料以及源码,探索一下Ansible的二次开发. 随笔的内容分为三个部分 playbook编辑执行 python 调用API执行playbook java调用python程序进行playbook的执行 实验的环境是centos6,ansible版本是1.9.4,python版本是2.6.6,jdk版本是1.7U79 一.playboo

运维自动化之ansible playbook安装ruby环境

本来不想打算写安装ruby的,但看几个puppet的群里有人对安装ruby比较茫然,所以这里简单介绍一下如何安装ruby. ps:话说现在也就gitlab.capistrano.puppet等软件使用ruby,最新2010年的软件好的都是python了,比如ansible.salt等. 下面是安装ruby的信息: ruby_version: 1.9.3 ruby_dir: /usr/local gem_version: 1.8.23 bundle_version: 1.6.3 可以看到ruby的

自动化运维工具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安装node环境

现在介绍如何使用ansible安装node. 下面是安装node的信息: node_dir: /data node_version: 0.10.21 node_port: 3301 可以看到node的版本是0.10.21,测试的node应用服务监听3301端口 备注:此playbook仅能对centos或者redhat的6.x版本进行安装. 下面是安装node的playbook结构 09:33:16 # tree node_* node_delete ├── files ├── handlers

ansible playbook使用总结

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