一、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. Golang(四)正则表达式使用

    0. 前言 最近用到了 regexp 包,下面整理下正则表达式相关用法 参考 基础知识 - Golang 中的正则表达式 和 Golang regexp包中的函数和方法 做了汇总 1. 正则表达式 1 ...

  2. 《Linux就该这么学》培训笔记_ch16_使用Squid部署代理缓存服务

    <Linux就该这么学>培训笔记_ch16_使用Squid部署代理缓存服务 文章最后会post上书本的笔记照片. 文章主要内容: 代理缓存服务 配置Squid服务程序 正向代理 标准正向代 ...

  3. Calculation 2

    Calculation 2 Given a positive integer N, your task is to calculate the sum of the positive integers ...

  4. Spring Boot 最流行的 16 条实践解读!

    Spring Boot是最流行的用于开发微服务的Java框架.在本文中,我将与你分享自2016年以来我在专业开发中使用Spring Boot所采用的最佳实践.这些内容是基于我的个人经验和一些熟知的Sp ...

  5. 25个led灯新玩法

    Microbit板子的25个led灯,是5X5的阵列,led(lights emitting diodes)中文叫发光二极管,有单向导电性,还发光,有各种颜色的,红,蓝,黄等等.mPython可以让你 ...

  6. Flink 源码解析 —— Flink TaskManager 有什么作用?

    TaskManager 有什么作用 https://t.zsxq.com/RZbu7yN 博客 1.Flink 从0到1学习 -- Apache Flink 介绍 2.Flink 从0到1学习 -- ...

  7. 66 网络编程(五)——TCP多线程实现多人聊天室

    思路 客户端读写各一个类,可以使内部类,实现Runnable.读写类都与服务器端建立连接,一个收,一个发. 客户端实现接收和转发.多线程实现每个客户端的连接(使与各客户端的连接独立). 服务器端中创建 ...

  8. JAVAWEB之增删改查

    青年志愿者服务网(20分)   1.项目需求: 为了适应社会主义市场经济发展的需要,推动青年志愿服务体系和多层次社会保障体系的建立和完善,促进青年健康成长,石家庄铁道大学急需建设青年志愿者服务网,推进 ...

  9. Linux(二)各种实用命令

    继续Linux命令学习,没有什么捷径,每个命令都去敲几遍就熟悉了,第二篇学习的是一些比较实用类的命令,主要是从开发的角度进行学习,并不深入,话不多说,开始! 一.系统管理类 1.1 stat --st ...

  10. Mybatis+MySql 一个标签中执行多条sql语句

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/cxfly957/article/details/77896590 MySql默认是不支持这种骚操作的 ...