自动化运维工具ansible(代码片段)

xingzheanan xingzheanan     2023-01-06     707

关键词:

学习Ansible的系列文章

  • Ansible 介绍
  • Ansible 架构
  • Ansible 安装
  • Ansible 配置文件及参数
  • Ansible 常用模块
  • Ansible playbook

1. Ansible 介绍

Ansible 是一个配置管理和应用部署工具,只需要通过 ssh 访问服务器或设备即可实现批量系统配置、程序部署、运行命令等功能。

Ansible 是基于模块工作的,本身没有批量部署的能力,真正具有部署能力的是 Ansible 所运行的模块。

Ansible 的优点:

  • 模块化: 调用特定的模块完成特定的功能;
  • 轻量级: 无需在客户端安装 agent,更新时,只需在操作机上进行一次更新即可;
  • 分布式: ansible 不需要启动服务,作为一个工具可以轻松的实现分布式扩展;
  • 支持编排: 批量任务可以写成剧本进行编排,不用分发到远程即可执行;

2. Ansible 架构

 技术分享图片

 Ansible 的基本架构:

  1.  Connection Plugins: 连接主机和被管理端;
  2.  Core Modules: Ansible 执行命令的内置核心模块;
  3.  Custom Modules: 根据需求编写的定制化模块;
  4.  Plugins: 对模块功能进行补充,如连接插件、循环插件等;
  5.  Playbooks: 任务剧本,将多个任务定义在剧本中,由 Ansible 根据顺序依次执行;
  6.  Host Inventory: Ansible 管理主机的清单,inventory 一般存放在 /etc/ansible/hosts 路径下;
  7.  Ansible: 组合 Inventory、 Inventory、 Plugins 等的工具,为核心执行命令工具;

3. Ansible 安装

Ansible 有三种安装方式:

1. yum 安装: 

 yum -y install ansible wget -O /etc/yum.repos.d/epel.repo 

 

 

2. pip 安装:

 pip install ansible 

 

3. github 安装:

git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
make rpm
sudo rpm -Uvh ./rpm-build/ansible-*.noarch.rpm

 

4. Ansible 配置文件及参数

          常用配置文件或命令                                                                           描述                                  
                        /etc/ansible/ansible.cfg                        主配置文件,配置ansible工作特性
                           /etc/ansible/hosts                                        主机清单
                          /etc/ansible/roles/                                     存放角色的目录
                         /usr/bin/ansible                              主程序,临时命令执行工具
                        /usr/bin/ansible-doc                           查看配置文档,模块功能查看工具
                       /usr/bin/ansible-playbook                            定制自动化任务,编排剧本工具
                      /usr/bin/ansible-pull                                  远程执行命令的工具

 

 

 

 

 

 

 

ansible 常用参数说明
  • ansible_ssh_port: 连接的远程主机名;
  • ansible_ssh_port: ssh 端口号,如果不是默认的端口号,则通过此变量设置;
  • ansible_ssh_user: 默认的 ssh 用户名;
  • ansible_ssh_private_key_file: ssh 使用的密钥文件,适用于通过密钥登陆,而不通过 ssh 代理登陆的情况;
  • inventory_dir: 存放 Ansible inventory host 文件的目录路径名;
  • playbook_dir : 含有 playbook 基础目录的路径名;

5. Ansible 常用模块

ping

功能: 尝试连接到主机,ping 通则返回 pong 。

command

功能: 远程执行命令,如果 ansible 不指定模块时,默认使用 command 模块。

shell

功能: 远程执行命令,类似于 command 。

copy

功能: 复制文件或目录到远程节点,默认覆盖目标文件,源地址为 src , 目的地址为 dest 。

file

功能: 设置远程节点文件的文件属性。其中, mode 参数定义文件或目录的权限。 path 定义文件或目录的路径,为必选项。

setup

功能: 收集远程主机的信息,playbook 中的参数 gather_facts 就与该模块有关,后续 playbook 做介绍。

fail

功能: 自定义消息失败,在 playbook 中一般与 参数 when 结合使用。

6. Ansible playbook

Ansible playbook 采用 yaml 语言编写, playbook 的第一行 “---” 符号表示这是一个 yaml 文件。

playbook 的工作流程如下图所示:

技术分享图片

playbook 参数

hosts: hosts 行的内容是一个或多个组主机的 patterns ;

remote_user: 远程执行任务的账户名;

tasks: 任务集,由多个 task 组成;

until: until 是一个条件表达式,如果满足条件循环结束;

retry:retry 是重试的次数;

delay:延迟时间;

local_action: Ansible 默认只会对控制机器执行操作,local_action 参数使得 ansible 对本机执行操作;

ansible playbook 变量
  1.  ansible setup facts  远程主机的所有变量都可直接调用, setup 模块就是用来获取远程主机的相关信息的,要使用被管理主机的 ansible 元数据信息即 facts ,需要在playbook 中将gather_facts参数设为 yes 。facts 信息包括 主机名、远端主机发行版、IP地址、CPU 数等等信息,该信息可作为变量供后续的 task 使用。

技术分享图片

  2.  ansible hosts 中定义的变量,分为普通变量和公共变量,普通变量在主机组中主机单独定义,优先级高于公共变量。

  3. 通过命令行指定变量,优先级最高。

  4. 在 playbook 中定义变量:

技术分享图片

  5. vars_file 指定变量文件。

  6. 在 role 中定义。

  7. 通过 variable_name 调用变量,且变量名前后必须有空格。

  8. register 注册变量,把某一条任务执行的结果保存下来,在接下来的任务中调用该变量或者用该变量做判断:

技术分享图片

    将 task execute script at local host 的执行结果存入变量 host_data_json 中,在任务 fail ansible 中使用该变量中的 stderr 进行判断该任务会不会出错。

    host_data_json 变量如下图 localhost => 右边的结构体所示,注意使用该结构体的 rc 参数进行判断也是可以的,即 host_data_json.rc == 0:

技术分享图片

 

简单的 playbook 例子:

---
- hosts: [any]
  remote_user: "root"
  gather_facts: yes
  vars:
    number: "1"
  tasks:
  - name: ping the OAM
    ping:
  - name: ping the local host
    local_action: ping
  - name: change the mode of file
    local_action: file path=/tmp/test_mode.sh mode=0777
  - name: execute script at local host
    local_action: command /bin/bash /tmp/test_mode.sh 1 2
    register: host_data_json
  - name: fail ansible
    local_action: fail msg="can‘t run ansible playbook"
    when: host_data_json.stderr != ""

 

       

参考文章:

https://www.jianshu.com/p/575ced3a08fa

http://blog.51cto.com/191226139/2066936

http://blog.51cto.com/amyhehe/1718050

http://blog.51cto.com/faded/1762688

 

自动化运维工具ansible(代码片段)

学习Ansible的系列文章Ansible介绍Ansible架构Ansible安装Ansible配置文件及参数Ansible常用模块Ansibleplaybook1.Ansible介绍Ansible是一个配置管理和应用部署工具,只需要通过ssh访问服务器或设备即可实现批量系统配置、程序部署、运行命令... 查看详情

ansible自动化运维工具(代码片段)

...基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现•Ansible能批量配 查看详情

ansible自动化运维工具(代码片段)

...基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现•Ansible能批量配置、部署、管理上千台主机。... 查看详情

自动化运维工具ansible的详细部署(代码片段)

Ansible的来历Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 Ansible是基于paramiko开发的,并且基于模块化工... 查看详情

linux中ansible自动化运维工具(代码片段)

1.ansible简介ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet,cfengine,chef,func,fabric)的优点,实现了批量系统配置,批量程序部署,批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能... 查看详情

ansible自动化运维工具(代码片段)

...基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能&# 查看详情

运维自动化工具之ansible(代码片段)

..."AnsibleisSimpleITAutomation",也就是说ansible是一种简单的自动化IT工具.  工具目标:1.自动化部署APP2.自动化管理配置项3.自动化的持续交付4.自动化的云服务管理2.ansible特性  模块化:调用特定的模块,完成特定的任务 ... 查看详情

运维自动化工具ansible(代码片段)

一、Ansible介绍Ansible简单的说是一个配置管理系统(configurationmanagementsystem)。你只需要可以使用ssh访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像puppet等那样使用拉取安装agent的方式。你可以... 查看详情

自动化运维工具ansible详细介绍以模块的使用(代码片段)

ansibleansible的理论部分ansible的介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。  ansible是基于paramiko... 查看详情

自动化运维专题:ansible批量自动化管理工具(代码片段)

... 无需部署agent,通过ssh进行管理  中小型公司常用的自动化运维工具   1.2jenkins简介  可视化运维(主要用在可视化部署)  持续构建,可以和git,snv结合  可结合ssh实现可视化运维  可结合ansible实现可视化... 查看详情

ansible运维自动化--配置管理工具(代码片段)

Ansible的使用介绍:Ansible是为了更方便、快捷的进行配置管理。用Ansible可以将平常复杂的配置工作变得简单,更加标准化且更容易控制。Ansible可以实现100、1000台批量部署等。Ansible特点:(1)部署简单,只需在主控端部署Ansible... 查看详情

ansible自动化运维工具简单入门(代码片段)

三、Ansible的使用1、Ansible命令执行过程及状态过程:加载自己的配置文件,默认/etc/ansible/ansible.cfg加载自己对应的模块文件,如commandping通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器给文件+x权限... 查看详情

自动化运维工具ansible简单介绍(代码片段)

一.Ansible介绍Ansible简单的说是一个配置管理系统(configurationmanagementsystem)。你只需要可以使用ssh访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像puppet等那样使用拉取安装agent的方式。ansible可... 查看详情

ansible自动化运维管理工具的概述与部署(代码片段)

Ansible自动化运维管理工具的概述与部署项目总体思路一、Ansible概述二、ansible环境安装部署三、ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping模块10.yum模块11.service/systemd模... 查看详情

ansible自动化运维管理工具的概述与部署(代码片段)

Ansible自动化运维管理工具的概述与部署项目总体思路一、Ansible概述二、ansible环境安装部署三、ansible命令行模块1.command模块2.shell模块3.cron模块4.user模块5.group模块6.copy模块7.file模块8.hostname模块9.ping模块10.yum模块11.service/systemd模... 查看详情

自动化运维—ansible工具的使用(代码片段)

Ansible一、概述1.1特点1.2优点二、服务搭建2.1准备工作2.2ansible端设置三、ansible命令行模块3.1command模块概述命令使用常用参数3.2shell模块概述命令3.3cron模块概述常用参数命令3.4user模块概述常用参数命令3.5group模块概述命令3.6copy模... 查看详情

自动化运维—ansible工具的使用(代码片段)

Ansible一、概述1.1特点1.2优点二、服务搭建2.1准备工作2.2ansible端设置三、ansible命令行模块3.1command模块概述命令使用常用参数3.2shell模块概述命令3.3cron模块概述常用参数命令3.4user模块概述常用参数命令3.5group模块概述命令3.6copy模... 查看详情

3.1自动化运维工具ansible(代码片段)

自动化运维工具ansible运维自动化发展历程及技术应用Iaas基础设施即服务Pass平台服务SaaS软件即服务云计算工程师核心职能Linux运维工程师职能划分自动化动维应用场景文件传输命令执行应用部署配置管理任务流编排企业实际应用... 查看详情