一、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. node.js HTTP模块、URL 模块

    在浏览器输入存在的网址的一个交互过程 1.用户通过浏览器发送一个http的请求到指定的主机 2.服务器接收到该请求,对该请求进行分析和处理 3.服务器处理完成以后,返回对应的数据到用户机器 4.浏览器 ...

  2. mac Sublime Text 快捷键

    mac Sublime Text 快捷键 Tab: 光标后缩进 Shift+Tab: 反缩进 cmd+P: 打开文件切换面板 cmd+/: 行注释 cmd+R: 快速列出/跳转到某个函数 双击可选中光 ...

  3. Spring AOP 代理类,BeanNameAutoProxyCreator cglib

    BeanNameAutoProxyCreator支持拦截接口和类,但不支持已经被jdk代理过的类$Proxy8.使用cglib才能代理,如下 <!-- 通过bean的名字来匹配选择要代理的bea ...

  4. how to compile and replace ubuntu kernel

    how to compile and replace ubuntu kernel 0. environment -ubuntu 1804 64bit 1. prepare source code su ...

  5. ORM基础知识

    ORM基础知识 一.什么ORM? ORM是Object Relactional Mapping的缩写,即对象关系映射,是将关系型数据库中的数据库结构映射成对象,就可以通过面向对象思想编程. 二.常用的 ...

  6. Linux内核文档翻译——sysfs.txt

    sysfs - _The_ filesystem for exporting kernel objects. sysfs – 用于导出内核对象(kobject)的文件系统 Patrick Mochel ...

  7. [转帖]进程状态的转换与PCB详解

    进程状态的转换与PCB详解 https://blog.csdn.net/qq_34666857/article/details/102852747 挺好的 之前没好好学习.   返回主目录 ​ 之前的 ...

  8. MongoDB里做表间关联

    MongoDB与关系型数据库的建模还是有许多不同,因为MongoDB支持内嵌对象和数组类型.MongoDB建模有两种方式,一种是内嵌(Embed),另一种是连接(Link).那么何时Embed何时Li ...

  9. memcached源码分析一-slab

    Slab作为一种内存管理方案,其作用主要有以下2点: a) 避免频繁的内存分配释放造成的内存碎片 b) 减少内存分配操作产生的性能开销 Linux内核数据结构中也有slab的设计,Linux提供了一套 ...

  10. count和distinct

    一.count和distinct count是统计数据条数,distinct是去掉重复列: count统计的时候会忽略null值,distinct会将重复的null值列作为一个. 综上select c ...