ansible常用模块

ansible简介

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。 适用于中小型应用环境,因为它是基于SSH协议连接的,所以主机数量太多也会影响它的性能。可能200-300台机器足够使用。再往上就需要更专业的软件

ansible特性

  • 模块化:调用特定的模块,完成对应的指令
  • 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
  • 支持自定义模块
  • 基于python研发
  • 部署简单,基于Python和SSH,不需要agent端
  • 安全,基于openssh
  • 支持playbook编排任务
  • 幂等性:一个任务执行N遍和执行1遍的效果一样,不会因为重复执行而导致结果发生改变
  • 无需代理不需要PKI(SSL)
  • 可使用任何编程语言编写模块
  • YAML格式编写任务,支持丰富的数据结构
  • 较强大的多层解决方案

ansible架构

百度图片转载

  • 连接插件Connection Plugins:实现和被控主机之间的通信
  • Host Inventory:被控主机清单列表
  • Playbooks:剧本执行多个任务时,可以让节点执行多个任务
  • Core Modules,Costome Modules:核心模块,自定义模块
  • Plugins (Email,logging,other):一些辅助插件来实现各种功能

简单来说,用户将编写好的playbooks发送给配置文件的主机清单,根据playbook中定义的模块来对被控的多台主机进行操作。

使用ansible

安装ansible

ansible放在epel源中,可直接yum

[root@localhost ~]# yum install -y ansible

[root@localhost ~]# rpm -q ansible
ansible-2.9.2-1.el7.noarch

配置文件

/etc/ansible/ansible.cfg
配置文件一般默认就好,不需要做修改
详细的文件配置

[defaults]

# some basic default values...

#inventory      = /etc/ansible/hosts   # 定义清单的位置
#library        = /usr/share/my_modules/    #模块文件
#module_utils   = /usr/share/my_module_utils/
#remote_tmp     = ~/.ansible/tmp  #远程主机临时存放的文件目录
#local_tmp      = ~/.ansible/tmp  #本机临时存放的文件目录
#plugin_filters_cfg = /etc/ansible/plugin_filters.yml 
#forks          = 5    #并发数
#poll_interval  = 15   #异步任务查询间隔
#sudo_user      = root  #sudo代替的用户
#ask_sudo_pass = True   #sudo是否输入密码
#ask_pass      = True  #是否提示输入密码
#transport      = smart  #远程传输模式
#remote_port    = 22    # 远程端口
#module_lang    = C    #模块运行默认语言环境
#module_set_locale = False  

/etc/ansible/hosts

inventory主机清单主要用来使ansible能有效的批量管理。 被管控主机需要在hosts清单里先定义。当然也可以使用命令方式直接定义。

hosts文件支持的风格。

## [webservers]   # 中括号加主机组名
## 192.168.1.100   # 下方写上要被控的主机ip
## www[001:006].example.com  # 或者使用主机名称方式,如果连续的命名方式,可以使用:来表示

示例:

[webservers]
 192.168.1.143
 192.168.1.159

[root@ansible ~]# ansible all -m ping
192.168.1.143 | SUCCESS => {
   
    "ansible_facts": {
   
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.1.159 | SUCCESS => {
   
    "ansible_facts": {
   
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

使用ansible前准备

由于ansible是基于SSH协议。如果ansible主机与被控主机是第一次连接,使用ansible命令就会报错。就算ansible与这些主机不是第一次连接,每台主机的密码不一致也会报错。
所以在使用前,ansible主机和被管控主机之间要都基于ssh-key的免密连接。

ansible命令

ansible帮助命令

ansible-doc:显示模块帮助命令

ansible-doc [options] [module...]

  • -a :显示所有模块的文档
  • -l:列出可用模块
  • -s:显示指定模块的playbook片段
    示例:
[root@ansible ~]# ansible-doc copy

ansible管控命令

ansible <host-pattern> [-m module_name] [-a args]

选项 解释
- -version 显示版本
-m module 指定模块
-v/-vv/-vvv 显示更详细的过程
- -list-hosts 显示主机列表,可以简写为- -list
-k 提示连接密码,默认key验证
-C 检查,只运行,不执行
-T 执行命令 的超时时间,默认10s
-u 执行远程命令的用户
-b 代替旧版的sudo切换
-K 提示输入sudo

示例:

[root@ansible ~]# ansible webservers --list
  hosts (2):
    192.168.1.143
    192.168.1.159

[root@ansible ~]# ansible all -m ping -k 
SSH password: 
# 此处需要所有被控主机的密码一样

[root@ansible ~]# ansible all -m command -u ydong -b --become-user=root -K  -a 'ls /root'

# 在远程主机以ydong的身份运行sudo命令,sudo指定的用户为root

host-pattern

host-pattern的表示方法

  • all:表示所有主机

  • *:通配符

    • 示例: [root@ansible ~]# ansible web* -m ping
  • 或关系hostname1:hostname2 1和2中所有的主机

    • 示例:[root@ansible ~]# ansible appservers:webservers -m ping
  • 与关系hostname1:&hostname2 1和2有交集的主机

    • 示例:[root@ansible ~]# ansible webservers:\&appservers -m ping
  • 非关系hostname1:!hostname2 在1中,却不在2中的主机

    • 示例:[root@ansible ~]# ansible webservers:\!appservers -m ping
  • 正则表达式:首先指明~

    • 示例:[root@ansible ~]# ansible "~(app|db).*" -m ping

ansible在执行的时候出现以下几种颜色:

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值