一、Ansible简介

Ansible是新出现的自动化运维工具,基于python开发,集合了众多运维工具(puppet(ruby)、cfengine、chef、func、fabric、)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

特性:

  1. no agent:不需要在被管控主机上安装任何软件

  2. no server: 无服务器端,使用时直接运行命令即可

  3. modules in any languages: 基于模块工作,可使用任意语言开发模块。

  4. Yaml,not code:使用yaml语言定制脚本playbook。

  5. Ssh by default: 基于ssh工作。

优点:

  1. 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可。

  2. 批量任务执行可以写成脚本,而且不用分发到远程就可以执行。

  3. 使用python编写,维护简单,ruby语法过于复杂。

  4. 支持sudo

二、Ansible的基础架构图

ansible core : ansible 自身核心模块

host inventory: 主机库,定义可管控的主机列表

connection plugins: 连接插件,一般默认基于 ssh 协议连接

modules:core modules ( 自带模块 ) 、 custom modules ( 自定义模块 )

playbooks :剧本,按照所设定编排的顺序执行完成安排任务

三、安装Ansible

3.1 Ansible需要epel源来安装

# uname -r
 3.10.-.el7.x86_64
# cat /etc/redhat-release
 CentOS Linux release 7.2. (Core) # yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm -y
# yum install ansible -y

3.2 创建密钥,并分发公钥到所有的主机

# ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa >/dev/null >&
# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.5.71
# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.5.72
# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.5.73

3.3 配置Ansible主机组清单

# vim /etc/ansible/hosts
[test]
192.168.5.71
192.168.5.72
192.168.5.73 主机清单可以包含主机清单,例:
[web]
192.168.5.71
192.168.5.72
[mysql]
192.168.5.73 [online:children]
web
mysql 也可以使用帐号密码的方式:
[test]
192.168.5.71 ansible_ssh_user=root ansible_ssh_pass=mypawd ansible_ssh_port=

3.4 查看主机清单

# ansible test --list-hosts
hosts ():
192.168.5.71
192.168.5.72
192.168.5.73

四、Ansible ping模块

ansible 主组组 使用模块 ping模块
# ansible test -m ping
192.168.5.73 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.5.72 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
192.168.5.71 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}

五、Ansible yum模块

基于yum机制,对远程主机管理程序包

name                              --- 必须参数,用于指定需要管理的软件包,比如 nginx。
state                               --- 用于指定软件包的状态有installed、latest、absent、removed,其中 installed 与present 等效,latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
disable_gpg_check        --- 用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证,设置为 yes 表示禁用验证,即不验证包,直接安装。在对应的 yum 源没有开启 gpg 验证的情况下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo                     --- 用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未启用,也可以在安装软件包时临时启用A源。
disablerepo                    --- 用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在安装软件包时则不会从对应的源中选择安装包。

enablerepo 参数和 disablerepo 参数可以同时使用。

# ansible test -m yum -a 'name=net-tools state=installed'

六、Ansible service模块

用来管理远程主机上的服务的模块

name          --- 被管理的服务名称(/etc/init.d)

state           --- startd | stopped | restarted | reloaded  表示启动、停止、重启、重新加载。

enabled      --- yes|no 表示要不要设定该服务开机自启。

runleve       ---  如果设定了enabled开机自动启动,则要定义在哪些运行级别下自动启动。

# ansible test -m service -a 'name=nginx state=started enabled=yes'

七、Ansible command模块

执行命令模块,不支持管道

# ansible test -m command -a 'w'
192.168.5.73 | CHANGED | rc= >>
:: up :, users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 : :34m .08s .08s -bash
root pts/ 192.168.5.55 : .00s .11s .01s w 192.168.5.72 | CHANGED | rc= >>
:: up :, user, load average: 0.08, 0.06, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/ 192.168.5.55 : .00s .11s .01s w 192.168.5.71 | CHANGED | rc= >>
:: up :, users, load average: 0.04, 0.08, 0.08
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 : :21m .73s .73s -bash
root pts/ 192.168.5.55 : .00s .08s .00s w

# 默认使用command模板,可以不加 -m command参数
# ansible test -a 'cat /etc/hosts'

八、Ansible shell模块

被管理端执行命令支持重定向,管道

# ansible test -m shell -a 'rpm -qa | grep nginx'
# ansible test -m shell -a 'echo password1! | passwd --stdin root'

九、Ansible copy模块

拷贝ansible管理端的文件到远程主机的指定位置

src              --- 推送数据的源文件信息
dest            --- 推送数据的目标路径
backup        --- 对推送传输过去的文件,进行备份
content       --- 直接批量在被管理端文件中添加内容
group         --- 将本地文件推送到远端,指定文件属组信息
owner         --- 将本地文件推送到远端,指定文件属主信息
mode          --- 将本地文件推送到远端,指定文件权限信息
remote_src ---如果是no它将在ansible主机中搜索src,如果是yes,src将是远程/目标主机的src目录

# ansible test -m copy -a 'src=/etc/resolv.conf dest=/etc/resolv.conf'
# ansible test -m copy -a 'content="hehe" dest=/tmp/abc.txt owner=root group=root mode=644 backup=yes'

十、Ansible Scripts模块

在本地运行模块,等同于在远程执行,不需要将脚本文件进行推送目标主机执行

# mkdir scripts
# vim scripts/yum.sh
# ansible test -m script -a '/root/scripts/yum.sh'

十一、Ansible File模块

一般用于创建目录和创建文件

path          --- 指定远程主机目录或文件信息
recurse     --- 递归授权
state         ---
    directory   --- 在远端创建目录
    touch        --- 在远端创建文件
    link           --- link或hard表示创建链接文件
    absent      --- 表示删除文件或目录
    mode        --- 设置文件或目录权限
    owner       --- 设置文件或目录属主信息
    group       --- 设置文件或目录属组信息

# 在远端创建/backup目录
# ansible test -m file -a 'path=/backup state=directory'
192.168.5.72 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"path": "/backup",
"size": ,
"state": "directory",
"uid":
}
...... # ansible test -a 'ls -ld /backup' 192.168.5.72 | CHANGED | rc= >>
drwxr-xr-x root root Jul : /backup # 创建文件,默认touch的权限就是root和644,但是如果文件夹存在则不会创建,然后权限不会变成你想要的。
# ansible test -m file -a 'path=/tmp/connie state=touch mode=644 owner=root group=root'
192.168.5.73 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"dest": "/tmp/connie",
"gid": ,
"group": "root",
"mode": "",
"owner": "root",
"size": ,
"state": "file",
"uid":
} # 递归修改权限,将子目录及文件一并修改
# ansible test -m file -a 'path=/backup state=directory owner=root group=root recurse=yes' # 创建软链接
# ansible test -m file -a 'src=/usr/local/mysql-5.6.32 path=/usr/local/mysql state=link'

十二、Ansible Group模块

用来创建用户组

name            --- 指定创建的组名
gid                --- 指定组的gid
state
    absent      --- 移除远端主机的组
    present     --- 创建远端主机的组(默认)

# 创建组指定GID
# ansible test -m group -a 'name=connie gid=1981'

十三、Ansible User模块

创建指定的用户

uid                    --- 指定用户的uid
group                --- 指定用户组名称,默认为空
groups              --- 指定附加组名称
password          --- 给用户添加密码
shell                  --- 指定用户登录shell
create_home     --- 是否创建家目录

# 创建connie用户并加入用户组connie 设置UID为1981,禁止登录,不创建家目录
# ansible test -m user -a 'name=connie group=connie uid=1981 shell=/sbin/nologin create_home=no'
192.168.5.72 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": false,
"group": ,
"home": "/home/connie",
"name": "connie",
"shell": "/sbin/nologin",
"state": "present",
"system": false,
"uid":
}
...... # 创建加密的登录用户,password参数必须要是经过加密的字符串。-1是MD5加密
# echo 'linzfn' | openssl passwd - -stdin
$$FNGUGf3H$5rfXpwXqlkL9HDC88uWRA1
# ansible test -m user -a 'name=leon password="$1$FNGUGf3H$5rfXpwXqlkL9HDC88uWRA1"'
192.168.5.72 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": ,
"home": "/home/leon",
"name": "leon",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid":
}

十四、Ansible Cron模块

使用cront服务,如果填写的时候不写分时日月周,则默认都是'*'

# 设置定时任务注释信息,防止重复,name设定
# ansible test -m cron -a 'name="ntpdate" minute=*/5 hour=* month=* weekday=* job="/usr/sbin/ntpdate time1.aliyun.com"'
192.168.5.72 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": [
"ntpdate"
]
} # 登录192.168.5.72查看定时任务
# crontab -l
#Ansible: ntpdate
*/ * * * * /usr/sbin/ntpdate time1.aliyun.com # 按名称删除定时任务
# ansible test -m cron -a 'name="ntpdate" state=absent' # 注释相应定时任务,使定时任务失效
# ansible test -m cron -a 'name="ntpdate" minute=*/5 hour=* month=* weekday=* job="/usr/sbin/ntpdate time1.aliyun.com" disabled=yes'

十五、Ansible Mount模块

present        --- 开机挂载,仅将挂载配置写入/etc/fstab
mounted       --- 挂载设备,并将配置写入/etc/fstab
unmounted   --- 卸载设备,不会清除/etc/fstab写入的配置
absent          --- 卸载设备,会清理/etc/fstab写入的配置

# 挂载192.168.5.80:/data目录到test组中的主机
# ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=mounted" # 卸载,会直接删除/data目录,挂载的时候也不需要创建目标的/data目录
# ansible test -m mount -a "src=192.168.5.80:/data path=/data fstype=nfs opts=defaults state=absent"

Ansible 常用模块(一)的更多相关文章

  1. ansible常用模块用法

    ansible常用模块用法 2015-07-21 10:25 24458人阅读 评论(1) 收藏 举报  分类: Linux(44)   ansible 版权声明:本文为博主原创文章,未经博主允许不得 ...

  2. Ansible常用模块介绍及使用(week5_day1_part2)--技术流ken

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)--技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几 ...

  3. Ansible常用模块命令

    Ansible常用模块命令 一.安装ansible yum install epel-release yum install ansible 二.配置文件配置 vi /etc/ansible/ansi ...

  4. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...

  5. Ansible常用模块及API

    Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel ...

  6. ansible常用模块入门

    常用模块有以下几个 command copy shell crond yum service setup 1.command模块 ansible george -m command -a " ...

  7. Ansible常用模块基本操作

    Ansible是一个系列文章,我会尽量以通俗易懂.诙谐幽默的总结方式给大家呈现这些枯燥的知识点,让学习变的有趣一些. 前言 对于任何一个框架,一个应用,为了更便于推广,便于使用,便于商业化,都会顺便提 ...

  8. Ansible 常用模块详解

    经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...

  9. ansible常用模块详解(三)

    1.模块介绍 明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量. 1.1 模块的使用方 ...

  10. Linux之ansible 常用模块

    目的 代码发布系统 代码发布:把本地的代码通过某些方式弄到线上,可以供别人访问 部署 前戏 ansible 批量在远程主机上执行命令 puppet ruby ansible saltstack pyt ...

随机推荐

  1. Apache的代理服务器的配置 (正向代理 ,反向代理,轮询调度)

    一. 代理服务器的了解1.代理服务器 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息. Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自 ...

  2. Vue基础项目模板

    https://github.com/wanglong/vue-element-admin.git 优化 Vue CLI 3 构建的前端项目模板(1)- 基础项目模板介绍 一站式开源运维平台,分享给大 ...

  3. Docker 一步搞定 ZooKeeper 集群的搭建

    Docker 一步搞定 ZooKeeper 集群的搭建 背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 ...

  4. mysql主从复制报错解决方案

    mysql主从复制报错解决方案 我先制造个错误 在slave删除个info3字段 然后在master 在info3插入数据 报错如下<pre> Last_SQL_Errno: 1054 L ...

  5. python迭代有限制,突破限制

    python默认迭代次数为996 需要修改才能迭代超过996 import sys sys.setrecursionlimit() #自定义扩展极限,可以自己改 def fun(n): print(n ...

  6. Symbol 小妙处

    input 框输入后发送异步请求,页面拿到响应进行渲染.但偶尔会遇到问题:响应内容和输入结果不一致.因为 http 无法保证响应到达的顺序. 如何解决呢?提供一个小思路. myRequest.js i ...

  7. Linux命令注释—HDFS运维

    HDFS运维—命令注释 1 实验背景 HDFS是大数据其他组件的基础,Hive的数据存储在HDFS中,Mapreduce.Spark 等计算数据也存储在HDFS 中,HBase 的 region 也是 ...

  8. @Autowired注解到底是byType还是byName?

    2016-08-05 14:29:32 杨家昌 阅读数 13400更多 分类专栏: spring   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明 ...

  9. 用C#搭建WebSocket

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议. WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据.在 W ...

  10. MySQL之SQL演练(四)

    一:准备数据 1.创建数据表 -- 创建 "京东" 数据库 create database jing_dong charset=utf8; -- 使用 "京东" ...