ansible playbook相关

playbook(剧本)

格式

playbook的编写应遵循yaml格式的语法

列表 -
字典 k:v
后缀名为 .yaml 或 .yml

# 简单示例
- hosts: web  # 主机ip/分组名
  remote_user: root  # 用户身份
  tasks:
  - name: installlxml   # 任务名
    pip: name=lxml  # 使用的模块: 参数

# 注: 执行时使用ansible-playbook  xx.yml

传参

# 1. 直接给playbook传参
- hosts: web
  remote_user: root
  tasks:
  - name: installl{{ module_name }}
    pip: name={{ module_name }}

# 2. 在playbook中以vars方式传参
- hosts: web
  remote_user: root
  vars:
  - module_name: requests
  tasks:
  - name: installl{{ module_name }}
    pip: name={{ module_name }}

# 注: 执行时使用ansible-playbook -e module_name xx.yml

# 3. 在/etc/ansible/hosts 文件中传参
[web]
192.168.80.128 module_name=requests
192.168.80.129 module_name=flask

# 注: 执行时使用ansible-playbook  xx.yml

# 4. 在/etc/ansible/hosts 文件中以[分组名:vars]方式传参
[web]
192.168.80.128
192.168.80.129
[web:vars]
module_name=requests

# 5. 利用上次任务的结果传值
- hosts: web
  remote_user: root
  tasks:
  - name: sum
    shell: echo 2+2|bc
    register: user

  - name: create{{ user }}
    user: name=nihao{{ user.stdout }}

# 注: 执行时使用ansible-playbook  xx.yml
# 需要先进行 yum -y install bc 操作

# 五种传参方式的优先级
-e > vars > hosts

标签

# 只执行playbook中部分内容

- hosts: web  # 主机ip/分组名
  remote_user: root  # 用户身份 tasks:
  tasks:
  - name: installlxml   # 任务名
    pip: name=lxml  # 使用的模块: 参数
    tags: 标签名

# 注: 执行时使用ansible-playbook -t   标签名 xx.yml

模板

- hosts: web
  remote_user: root
  tasks:
  - name: install
    yum: name=reids
    tags: install
  - name: copyfile
    template: src=redis.conf.j2 dest=/etc/redis.conf
    tags: copyfile
  - name: startredis
    service: name=redis state=started
    tags: start

# 注:redis.conf.j2文件是一个包含jinja2语法的redis.conf文件,通过配合template完成根据主机ip, 动态设置redis.conf中bind ip
# redis.conf.j2
bind {{ ansible_default_ipv4.address }}

条件判断

- hosts: web  # 主机ip/分组名
  remote_user: root  # 用户身份 tasks:
  tasks:
  - name: installlxml   # 任务名
    pip: name=lxml  # 使用的模块: 参数
    when: num==1  # 条件判断,因为when语法原因不需要写成{{ num }} == 1

# 注: 执行时使用ansible-playbook  xx.yml

循环

# 循环创建nihao, hello, hah三个用户
- hosts: web  # 主机ip/分组名
  remote_user: root # 用户身份 tasks:
  tasks:
  - name: createUser # 任务名
    user: name={{ item }}
    with_items:
    - nihao
    - hello
    - hah

# 注: 执行时使用ansible-playbook  xx.yml

# 创建用户并指定组
- hosts: web  # 主机ip/分组名
  remote_user: root # 用户身份 tasks:
  tasks:
  - name: creategroup
    group: name={{ item.group }}
  - name: createUser # 任务名
    user: name={{ item.name }} group={{ item.group }}
    with_items:
    - { name: nihao, group: niao}
    - { name: hello, group: hello}
    - { name: hah, group: hah}

handler

- hosts: cache
  remote_user: root
  tasks:
  - name: install
    yum: name=redis
    tags: install
  - name: copyfile
    template: dest=/etc/redis.conf src=redis.conf.j2
    tags: copyfile
    notify: restart redis  # 此任务执行完后,执行handler
  - name: startredis
    service: name=redis state=started
    tags: start
  handlers:
  - name: restart redis
    service: name=redis state=restarted

原文地址:https://www.cnblogs.com/tmdhhl/p/11135616.html

时间: 2024-08-29 19:14:03

ansible playbook相关的相关文章

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和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 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 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

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

要想用Ansible操作复杂的任务,就必须要学会YAML语法的书写,不光是Ansible,连他的竞争对手saltstack也使用了YAML,下面来学习一下YAML语法的格式,省得到要你写个Playbook的时候手忙脚乱的要好. 引用一下维基:YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递回缩写.在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语