Ansible Playbooks学习

Ansible的Playbooks是Ansible用于配置,部署应用的结构化语言。Ansible的模块就好比shell命令,那么playbooks就好比shell脚本,在脚本中指定怎么使用哪些命令再加上一些判断语句等等。

Playbooks使用YAML文件来表示执行步骤。

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum: name=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running (and enable it at boot)
    service: name=httpd state=started enabled=yes
  handlers:
    - name: restart apache
      service: name=httpd state=restarted

也可以写成这样:

---
- hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    template:
      src=\‘#\‘" /srv/httpd.j2
      dest: /etc/httpd.conf
    notify:
    - restart apache
  - name: ensure apache is running
    service:
      name: httpd
      state: started
  handlers:
    - name: restart apache
      service:
        name: httpd
        state: restarted

Playbooks中也可以包含多个plays。

---
- hosts: webservers
  remote_user: root

  tasks:
  - name: ensure apache is at the latest version
    yum: name=httpd state=latest
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    
    
- hosts: databases
  remote_user: root

  tasks:
  - name: ensure postgresql is at the latest version
    yum: name=postgresql state=latest
  - name: ensure that postgresql is started
    service: name=postgresql state=running

hosts 行指定匹配的主机组或者主机,以逗号","分隔

remote_user 指定远程执行task步骤的用户

remote_user在Ansible1.4之前被叫做user

也可以为每个task单独指定远程执行用户

---
- hosts: webservers
  remote_user: root
  tasks:
    - name: test connection
      ping:
      remote_user: yourname

使用提权用户执行

---
- hosts: webservers
  remote_user: yourname
  become: yes

为单个task指定become

---
- hosts: webservers
  remote_user: yourname
  tasks:
    - service: name=nginx state=started
      become: yes
      become_method: sudo

以自身用户登录然后以root意外的用户执行

---
- hosts: webservers
  remote_user: yourname
  become: yes
  become_user: postgres
---
- hosts: webservers
  remote_user: yourname
  become: yes
  become_method: su

任务列表 Task lists

tasks:
  - name: make sure apache is running
    service: name=httpd state=running

每个play都包含了一系列tasks。command和shell模块可以只带几个参数,不必写成key=value的形式

tasks:
  - name: disable selinux
    command: /sbin/setenforce 0

每个需要执行的task都必须要有一个name用于表示执行步骤

command和shell模块关系返回码,如果有命令执行成功退出码不是0,可以这样:

tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand || /bin/true

或者:

tasks:
  - name: run this command and ignore the result
    shell: /usr/bin/somecommand
    ignore_errors: True

如果执行行太长可以分行写:

tasks:
  - name: Copy ansible inventory file to client
    copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts
            owner=root group=root mode=0644

执行可以使用变量。假设定义了一个vhost的变量:

tasks:
  - name: create a virtual host file for {{ vhost }}
    template: src=somefile.j2 dest=/etc/httpd/conf.d/{{ vhost }}

Handlers: Running Operations On Change

- name: template configuration file
  template: src=template.j2 dest=/etc/foo.conf
  notify:
     - restart memcached
     - restart apache

notify行列出的区域就叫做handlers

Handlers are lists of tasks,not really any different from regular tasks,that are refercenced by a globaly unique name.Handlers are what notifiers notify.

如果没有通知handler,notify区域将不会执行。

handlers:
    - name: restart memcached
      service: name=memcached state=restarted
    - name: restart apache
      service: name=apache state=restarted

Handlers最适用于重启服务和触发重启服务。

参考文档:

http://docs.ansible.com/ansible/playbooks.html

https://github.com/ansible/ansible-examples/blob/master/windows/deploy-site.yml

http://docs.ansible.com/ansible/intro_patterns.html

时间: 06-17

Ansible Playbooks学习的相关文章

Ansible Playbooks 介绍 和 使用 二

目录 handlers playbook 案例 2 handlers vars 变量 setup facts 变量使用 案例 inventory 中定义变量 案例 条件测试 when 语句 案例 handlers 接上一篇文章 Ansible Playbooks 介绍 和 使用 一 继续说明 用于当关注的资源发生变化时采取一定的操作. notify这个 action可用于在每个play的最后被处罚,这样可以避免多次有改变时每次都执行指定的操作,取而代之,尽在所有的变化发生完成后一次性执行指定的操

3、Ansible playbooks

Ansible playbooks playbook是由一个或多个“play”组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲,所谓task无非是调用ansible的一个module.将多个play组织在一个playbook中,即可以让它们联同起来按事先编排的机制同唱一台大戏.下面是一个简单示例. - hosts: webnodes    //webnodes定义一个主机组,表示应用的目标主机.下面定义的任务只对此组内的主

Ansible Playbooks的使用

playbooks概念:Tasks:任务:由各模块所支持执行的特定操作任务:例子:-m user -a 'name= password='Variables:变量:Templates:模板:在定义模板之后可以实现各节点对应的变量来取代,表达式自身会根据当前节点所赋值做运算,之后生成的值则赋予这个参数,用于生成不同配置的配置文件,所以模板主要实现配置不同场景文本文件.而且这样使用模板语言来定义,模板语言中可以根据定义替换成特定主机的某些值.Handlers:处理器:如果某一次操作配置文件发生改变的

[ansible-playbook]4 持续集成环境之分布式部署利器 ansible play学习

3 ansible-play讲的中太少了,今天稍微深入学习一点 预计阅读时间:15分钟 一: 安装部署 参考 http://getansible.com/begin/an_zhuang_ansile 二:常用模块 a. service 用于启动检查服务 b. file 用于文件删除 链接 创建 c.shell 用于执行脚本(不推荐,因为shell操作有时并非幂等,而且不方便检查执行结果) d.copy 用于拷贝文件 e. vars+ template 用于根据模板文件基于变量创建配置文件 样例:

ansible 模块学习

Ansible通过模块的方式来完成一些远程的管理工作.可以通过ansible-doc -l查看所有模块,可以使用ansible-doc -s module来查看某个模块的参数,也可以使用ansible-doc help module来查看该模块更详细的信息.默认的模块位置在/usr/share/ansible.下面列出一些常用的模块: 1. setup 可以用来查看远程主机的一些基本信息: ansible -i /etc/ansible/hosts test -m setup 2.ping 可以

Ansible playbooks常用模块案例操作

打开git bash 连接ansible服务器,然后进入deploy用户 #ssh [email protected] 进入python3.6虚拟环境 #su - deploy #source .py3-a2.5-env/bin/activate 加载ansible 2.5版本 #source .py3-a2.5-env/ansible/hacking/env-setup -q 验证ansible加载效果 #ansible-playbook --version 1.File模块 登录到目标主机进

运维自动化工具ansible学习笔记

利用五一假期的时间学习了下ansible,看了一天的官方文档,对其中需要注意的地方,做下笔记整理下思绪. 一.简介 Ansible是与puppet.saltstack类似的集群管理工具,其优点是仅需要ssh和Python即可使用,而不像puppet.saltstack那样都需要客户端.puppet与saltstack这2个软件都需要安装客户端,而saltstack与ansible很相似,都是属于python流的,但saltstack不是很稳定:puppet虽然稳定,但命令执行的时候,需要配置模块

自动化运维工具Ansible架构部署应用及playbooks简单应用

在日常服务器运维中,我们经常要配置相同的服务器配置,前期我们都是一台一台的去配置,这种方法操作主要应对于服务器数量不多且配置简单的情况还可以继续这样操作,如果我们后期维护几百服务器或者几万服务器呢? 我应该怎样去快速配置服务器呢?如果需要手动的每台服务器进行安装配置将会给运维人员带来许多繁琐而又重复的工作同时也增加服务器配置的异常,至此自动化运维工具解决我们的瓶颈---Ansible工具. Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfeng

学习ansible playbook之前先了解下YAML语法

YAML 语法 本文来自于:http://www.ansible.com.cn/docs/YAMLSyntax.html 这个页面提供一个正确的 YAML 语法的基本概述, 它被用来描述一个 playbooks(我们的配置管理语言). 我们使用 YAML 是因为它像 XML 或 JSON 是一种利于人们读写的数据格式. 此外在大多数变成语言中有使用 YAML 的库. 你可能希望读 Playbooks 实践中如何使用的. 基本的 YAML 对于 Ansible, 每一个 YAML 文件都是从一个列