Ansible简明教程

文章目录

        • 简介
          • 特点
          • 命令示例
        • 基础概念
          • 清单文件(inventory)
          • 模块(module)
        • Playbooks
          • 命令
          • 结构
          • 变量
          • 条件语句
          • 循环
        • Roles
          • Include示例
          • Roles示例
        • Tower
          • 扩展开发
  • 详细资料


简介

Ansible是一个自动化运维工具,可以实现系统配置、软件部署,以及更多更加高级复杂的任务,比如持续集成/持续部署、零宕机滚动更新等。

Ansible的核心目标是简单易用,提供一整套机制简化难度,特别是复杂任务的编排和批量化管理

特点
  • 基于ssh协议,不需要安装服务或者客户端

  • 使用yaml标记语言,语法简单高效,配置即代码

  • 内置大量模块,封装简化常用命令和任务

  • playbook和roles提供强大的编排能力

  • 使用python实现并且开源,易扩展、可定制

命令示例

ansible localhost -m fetch -a "src=/etc/fstab dest=/tmp/fstab"

# ad-hoc模式(点对点模式),用于批量执行简单命令

# localhost    ——要管理的主机,定义在清单文件中

# fetch       ——引用模块

# "src=/etc/fstab dest=/tmp/fstab"    ——模块参数



ansible-playbook -i hosts playbook.yml

# playbook模式(剧本模式),是ansible主要的执行任务的方式 

# hosts        ——指定清单文件

# playbook.yml    ——ansible playbook


基础概念

清单文件(inventory)

用来配置管理的主机IP信息,默认路径:/etc/ansible/hosts


# Ex 1: Ungrouped hosts, specify before any group headers.

## green.example.com

## blue.example.com

## 192.168.100.1

## 192.168.100.10



# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]

## alpha.example.org

## beta.example.org

## 192.168.1.100

## 192.168.1.110



# If you have multiple hosts following a pattern you can specify

# them like this:

## www[001:006].example.com



[webservers]

# 已配置ssh互信

10.10.160.41

# 主机 端口号 用户名 密码

10.10.160.42 ansible_port=22 ansible_user=root ansible_ssh_pass=cljslrl0620


模块(module)

Ansible封装的基本功能单元


# 查看所有模块

ansible-doc -l

# 查看某个模块详情

ansible-doc -s fetch

  • 常用模块


command    # 远程执行命令

shell    # 远程执行命令,经过系统shell,例如:/bin/sh

script    # 远程执行本地脚本

setup    # 获取主机的基本信息



file    # 文件操作,创建、删除、修改

copy  # 拷贝文件

find    # 查找文件

replace    # 替换文件中的字符串

blockinfile    # 操作文件中的一段文本

lineinfile    # 操作某行中的一段文本



user    # 管理用户

group    # 管理组

yum_repository    # 管理yum仓库

yum    # 通过yum管理软件包



cron    # 管理远程的定时任务

service    # 管理远程主机服务


Playbooks

playbook是ansible实现配置、部署、编排的载体,是一个YAML格式的文本文件,通过编写playbook来实现业务逻辑

命令

ansible-playbook test.yml                        # 执行playbook

ansible-playbook --syntax-check test.yml        # 检查playbook中yaml语法

结构

# playbook由多个play组成,每个play以“---"标记开始
---                                                        
- hosts: webservers                                        # 定义执行任务的主机
  vars:                                                    # 定义变量
    http_port: 80
    max_clients: 200
  remote_user: root                                        # 定义用户

  tasks:                                                   # 每个play对应多个task
  - name: ensure apache is at the latest version           # 每个task通过调用模块,执行最基本的任务
    yum: pkg=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:                                                # 可调用任务,在task执行后可通过notify调用它
    - name: restart apache
      service: name=httpd state=restarted

变量

官方文档参考

条件语句

官方文档参考

循环

官方文档参考


Roles

当业务逻辑复杂后就需要使用include和roles

  • include

ansible提供的引用其他play或者task的机制,用于实现功能模块的重用

  • roles

ansible定义的的目录组织方式,用于层次性结构化的组织playbook

Include示例
- name: this is a play at the top level of a file
  hosts: all
  remote_user: root
  tasks:
  - include: foo.yml                     # 引用其他task

- include: webservers.yml                # 引用其他play
Roles示例

roles通过分别将变量(vars)、文件(files)、任务(tasks)、模板(templates)及处理器(handlers)放置于单独的目录中,实现对playbook便捷的复用

# 一个典型的Roles目录结构:

hosts             # 清单文件
site.yml          # playbook
group_vars/        # 存放全局变量
roles/
  webservers/      # 角色的项目名称
    files/         # 用于存放文件
    templates/     # 用于存放jinja2模板
    tasks/         # 定义任务的playbook集合
    handlers/      # 定义处理器
    vars/          # 定义变量
    defaults/      # 定义默认变量

# site.yml内容如下:
---
- hosts: webservers
  roles:           # 调用roles目录下的webservers项目
     - webservers

# 执行playbook
ansible-playbook -i host site.yml

通过查看经典示例来学习规范的Roles目录组织结构


Tower

Ansible Tower为Ansible带来了Web服务、权限管理等功能,使其更加方便易用

Ansible Tower官方链接


扩展开发

想了解Ansible扩展开发的内容可以看下一篇


详细资料

官方文档

中文官方文档

Ansible经典示例

所有模块说明

你可能感兴趣的:(Linux)