ansible简介,简单实用
Ansible
ansilbe是实现自动化运维的工具,基于python开发,实现批量系统配置,批量程序部署,批量运行命令等功能。
ansible是基于模块工作的,自身是没有批量部署的能力。真正具有批量部署能力的是ansible的模块,ansbile只是提供一种框架
ansbile特点
模块化:使用特定的模块,完成特定的工作
支持自定义模块
基于Python语言开发的
不需要再被控端安装组件,也就是无需客户端,直接在服务端执行命令。
批量任务执行可以用脚本,也不需要传递到远程就可以执行。
ansible的基本架构:
1.链接插件用于连接主机,连接受控端。
2.核心模块连接主机实现操作,依靠模块做具体的事情。
3.自定义模块:根据自己的需求编写模块
4.插件是对模块功能的补充。
5.playbook,ansible功能的形象化描述。
6.host inventory 定义ansible需要的操作主机的范围
Ansible使用
服务端:10.220.5.63
两个被控端:10.220.5.65
10.220.5.66
一、安装ansible
- [root@ ~]# yum install ansible
查看版本
- [root@ ~]# ansible --version
- ansible 2.6.
- config file = /etc/ansible/ansible.cfg
- configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
- ansible python module location = /usr/lib/python2./site-packages/ansible
- executable location = /usr/bin/ansible
- python version = 2.7. (default, Apr , ::) [GCC 4.8.
相关文档
- [root@~]# rpm -qc ansible
- /etc/ansible/ansible.cfg
- /etc/ansible/hosts
二、生成密钥
- [root@63 ~]# ssh-keygen -t rsa
- [root@ ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.63
- [root@ ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.65
- [root@~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.66
- [root@ ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.63 <<<自己也作为受控端
- [root@ ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.65
- [root@~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 10.220.5.66
在主控端/etc/hosts中添加受控端主机信息
- [root@ ~]# vim /etc/hosts
10.220.5.65 slave1
10.220.5.66 slave2
测试是否能免密码登录
- [root@ ~]# ssh slave1
- Last login: Sat Nov :: from 10.220.5.63
[root@slave1 ~]# <<<为10.220.5.65主机
测试
- [root@ ~]# ssh slave1 ip a
- : lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
- link/loopback ::::: brd :::::
- inet 127.0.0.1/ scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::/ scope host
- valid_lft forever preferred_lft forever
- : ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN group default qlen
- link/ether :0c::d1:a8:6a brd ff:ff:ff:ff:ff:ff
- inet 10.220.5.65/ brd 10.220.5.255 scope global noprefixroute ens33
- valid_lft forever preferred_lft forever
- inet 10.220.5.233/ scope global secondary ens33:
- valid_lft forever preferred_lft forever
- inet6 fe80::20c:29ff:fed1:a86a/ scope link
- valid_lft forever preferred_lft forever
三、使用ansible管理其他节点
格式:ansible <host> [options]
选项:
-m:指定模块名称
-a:指定模块的具体参数
-s:以sudo的方式运行操作
-i:指定被管理节点的主机列表
-f:一次连接几个主机进行操作(默认是5个主机)
查看ansible所支持的模块的信息
- [root@ ~]# ansible-doc -l
默认用command模块
查看一个模块的使用帮助
例:
- [root@ ~]# ansible-doc -s command
- - name: Executes a command on a remote node
- command:
- argv: # Allows the user to provide the command as a list vs. a string. Only the string
- or the list form can be provided, not both. One
- or the other must be provided.
- chdir: # Change into this directory before running the command.
- creates: # A filename or (since 2.0) glob pattern, when it already exists, this step will
- *not* be run.
- free_form: # (required) The command module takes a free form command to run. There is no
- parameter actually named 'free form'. See the
- examples!
- removes: # A filename or (since 2.0) glob pattern, when it does not exist, this step will
- *not* be run.
- stdin: # Set the stdin of the command directly to the specified value.
- warn: # If command_warnings are on in ansible.cfg, do not warn about this particular
- line if set to `no'.
模块
1. command
默认模块
作用:在各个远程主机上执行命令,但是不能传递参数和变量,不支持特殊字符
格式:ansible 目标 -m command -a "命令"
说明:
目标:目标可以是一个主机组,也可以是hosts文件中的一个或者多个主机,也可是all
-m command:表示这次ansible操作是基于command模块实现
-a "命令":表示是在管理节点上要执行的命令
例子:获取受控节点主机名
- [root@~]# ansible webserver -m command -a "hostname"
- 10.220.5.65 | SUCCESS | rc= >>
- slave1
- 10.220.5.66 | SUCCESS | rc= >>
- slave2
也可以单独对一个受控端执行命令
- [root@ ~]# ansible 10.220.5.65 -m command -a "hostname"
- 10.220.5.65 | SUCCESS | rc= >>
- slave1
2.shell模块
也是在各个远程主机上执行命令,但shell模块可以支持特殊字符,command不支持
chdir:指定一个目录,在执行对应的命令之前,会先进入到 chdir 参数指定的目录中。
creates:数指定一个文件,当指定的文件存在时,就不执行对应命令
removes:指定一个文件,当指定的文件不存在时,就不执行对应命令
executable:默认情况下,shell 模块会调用远程主机中的 /bin/sh 去执行对应的命令,通常情况下,远程主机中的默认 shell 都是 bash。如果你想要使用其他类型的 shell 执行命令,则可以使用此参数指定某种类型的 shell 去执行对应的命令。指定 shell 文件时,需要使用绝对路径。
例子:获取65主机/tmp所有文件
- [root@ ~]# ansible 10.220.5.65 -m shell -a "ls /tmp/*"
- 10.220.5.65 | SUCCESS | rc= >>
- /tmp/mysql3306.sock
- /tmp/mysql3306.sock.lock
3.script
作用:在远程主机执行主控端存的shell脚本(相当于scp+shell)
- [root@ ~]# ansible all -m script -a "/root/shell.sh"
- 10.220.5.66 | SUCCESS => {
- "changed": true,
- "rc": ,
- "stderr": "Shared connection to 10.220.5.66 closed.\r\n",
- "stderr_lines": [
- "Shared connection to 10.220.5.66 closed."
- ],
- "stdout": "",
- "stdout_lines": []
- }
- 10.220.5.65 | SUCCESS => {
4. cron
作用:在指定的时间运行指定命令(计划任务)
- cron:
- backup: 计划名称
- cron_file: 替换客户端用户的计划任务的文件
- day: 日
- hour: 小时
name: 设置计划任务的名称
disabled:当计划任务有名称时,我们可以根据名称使对应的任务”失效”(注释掉对应的任务)。
除了需要指定任务的名称,还需要同时指定任务的job 以及任务的时间设定,而且任务的时间设定必须和对应任务完全相同,
否则在注释任务的同时,任务的时间设定会被修改,除非你确定这样做。
- special_time 后面可加: reboot(重启后)、yearly(每年)、annually(每年,与yearly相同)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每时)。
- user: 设置当前计划任务属于哪个用户,如果不指定,默认为管理员用户
- backup: 在修改或者删除计划任务时,会先对计划任务做备份,然后在进行修改或者删除
- job: 用于指定计划任务中需要实际执行的命令或者脚本
state: 当计划任务有名字时,可以根据名称修改或者删除对应的任务,如果需要删除计划任务时,需要将state的值设置为absent
例子1:每隔2分钟再tmp下的log.txt中追加一个信息
- [root@ ~]# ansible all -m cron -a 'minute="*/2" job="echo 123>>/tmp/log.txt" name="job1" state="present"'
- 10.220.5.66 | SUCCESS => {
- "changed": true,
- "envs": [],
- "jobs": [
- "job1"
- ]
- }
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "envs": [],
- "jobs": [
- "job1"
- ]
例子2.在65主机上创建计划任务,任务名称为crontab day test ,任务每五天执行一次,任务内容输出为test
- [root@ ~]# ansible all -m cron -a " name='crontab day test' minute=1 day=*/3 job='echo test'"
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "envs": [],
- "jobs": [
- "job1",
- "crontab day test"
- ]
- }
- 10.220.5.66 | SUCCESS => {
- "changed": true,
- "envs": [],
- "jobs": [
- "job1",
- "crontab day test"
- ]
- }
例子:.在 65主机上创建计划任务,任务名称为”special time test”,任务将在重启时执行,任务内容为输出 test 字符。
- [root@ ~]# ansible 10.220.5.65 -m cron -a " name='special time test' special_time=reboot job='echo test'"
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "envs": [],
- "jobs": [
- "job1",
- "crontab day test",
- "special time test"
例子:任务”special time test”已经存在于65主机中。,要删除这个计划任务,删除任务的同时可以进行备份。
- [root@~]# ansible 10.220.5.65 -m cron -a " name='special time test' state=absent backup=yes "
- 10.220.5.65 | SUCCESS => {
- "backup_file": "/tmp/crontabNaCVq8",
- "changed": true,
- "envs": [],
- "jobs": [
- "job1",
- "crontab day test"
检查一下在65主机上创建的计划任务
- [root@~]# ansible 10.220.5.65 -a "crontab -l"
- 10.220.5.65 | SUCCESS | rc= >>
- #Ansible: job1
- */ * * * * echo >>/tmp/log.txt
- #Ansible: crontab day test
- * */ * * echo test
5.copy
作用:文件的复制
子命令:
src:原文件路径
dest:目标文件路径
mode:指定权限
backup:有目标文件存在,先对原始文件做备份,然后进行覆盖
force:强制执行覆盖
owner:指定复制后的文件的属主
content:替代src
others:所有的file模块里的选项都可以在这里使用
例子1:将主控端/etc/passwd 文件,复制到65主机/tmp/目录下,并该名为psswd1
- [root@ ~]# ansible 10.220.5.65 -m copy -a 'src="/etc/passwd" dest=/tmp/passwd1'
- 10.220.5.65 | SUCCESS => {
- "changed": false,
- "checksum": "be868aa216508a02c3e0c64186e77f191f27eeca",
- "dest": "/tmp/passwd1",
- "gid": ,
- "group": "root",
- "mode": "",
- "owner": "root",
- "path": "/tmp/passwd1",
- "size": ,
- "state": "file",
- "uid":
6.user,group
home:指定用户的家目录,需要与createhome配合使用。
groups:指定用户的属组。
uid:指定用的uid。
password:指定用户的密码。
注意:指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
name:指定用户名。
createhome:是否创建家目录 yes|no。
system:是否为系统用户。
remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。
state:是创建还是删除。(present,absent)
shell:指定用户的shell环境。
generate_ssh_key:是否为相关用户生成SSH密钥。 这不会覆盖现有的SSH密钥。
ssh_key_bits:可选择指定要创建的SSH密钥中的位数。
ssh_key_passphrase:设置SSH密钥的密码。 如果没有提供密码,SSH密钥将默认没有密码。
ssh_key_file:指定SSH密钥文件名(可选)。 如果这是一个相对的文件名,那么它将是相对于用户的主目录。
ssh_key_type:指定要生成的SSH密钥的类型(可选)。 可用的SSH密钥类型将取决于目标主机上的实现。
例子:在65主机上创建用户名为qq,家目录为/home/,属组为redis,uid为1010
- [root@ ~]# ansible 10.220.5.65 -m user -a "name=qq home=/home/qq createhome=yes groups=redis uid=1010"
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "comment": "",
- "create_home": true,
- "group": ,
- "groups": "redis",
- "home": "/home/qq",
- "name": "qq",
- "shell": "/bin/bash",
- "state": "present",
- "system": false,
- "uid":
例子:在65主机上创建用户组httpd
- [root@ ~]# ansible 10.220.5.65 -m group -a "name=httpd state=present"
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "gid": ,
- "name": "httpd",
- "state": "present",
- "system": fals
7.yum
RedHat / CentOS包管理工具
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,默认最新的程序包,指明要安装的程序包,可以带上版本号,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present,absent,latest),表示是安装还卸载
present:默认的,表示为安装
lastest: 安装为最新的版本
absent:表示删除
例子:在65主机安装httpd
- [root@~]# ansible 10.220.5.65 -m yum -a "name=httpd state=present"
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "msg": "",
- "rc": ,
- ...................................
- }
8.file模块
作用:实现文件的各种管理操作
force:需要在两种情况下强制创建软链接,一种是源文件不存在但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no
group:属组
mode:权限
owner:属主
path:路径
recurse:递归的设置文件的属性,只对目录有效
src:要被链接的源文件的路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
例子:在65主机上创建文件abc.sh
- [root@ ~]# ansible 10.220.5.65 -m file -a 'state=touch path=/tmp/abc.sh'
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "dest": "/tmp/abc.sh",
- "gid": ,
- "group": "root",
- "mode": "",
- "owner": "root",
- "size": ,
- "state": "file",
- "uid":
将65主机/tmp/abc.sh 链接为/tmp/abc
- [root@ ~]# ansible 10.220.5.65 -m file -a 'state=link src=/tmp/abc.sh path=/tmp/abc'
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "dest": "/tmp/abc",
- "gid": ,
- "group": "root",
- "mode": "",
- "owner": "root",
- "size": ,
- "src": "/tmp/abc.sh",
- "state": "link",
- "uid":
- }
9. service
作用:管理服务
子命名;
name:指定服务的名称
enabled:指定服务是否开机自启动
state:指定服务最后的状态 started stopped reloaded restarted
runlevel:指定运行级别
例子:在65主机上重启网卡
- [root@ ~]# ansible 10.220.5.65 -m service -a "name=network state=restarted"
- 10.220.5.65 | SUCCESS => {
- "changed": true,
- "name": "network",
- "state": "started",
10.ping
作用:做ping测试
例子:对64主机做ping测试
- [root@ ~]# ansible 10.220.5.64 -m ping
- 10.220.5.64 | SUCCESS => {
- "changed": false,
- "ping": "pong"
- }
11.mount模块
配置挂载点
选项:
dumpfstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件
state:必选项
present:只处理fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
例子:在64主机上挂载光盘到/mnt
- [root@ ~]# ansible 10.220.5.64 -m mount -a "name=/mnt src=/dev/sr0 fstype=iso9660 state=mounted"
- 10.220.5.64 | SUCCESS => {
- "changed": true,
- "dump": "",
- "fstab": "/etc/fstab",
- "fstype": "iso9660",
- "name": "/mnt",
ansible简介,简单实用的更多相关文章
- Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!
源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...
- C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点
C#反射实现 一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...
- CSS3 linear-gradient线性渐变实现虚线等简单实用图形
一.作为图片存在的CSS3 gradient渐变 我觉得CSS3 Backgrounds比较厉害的一个地方就是支持多背景,也就是背景图片个数可以无限累加,正好CSS3的gradient渐变性质是bac ...
- .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序
.NET 跨平台RPC框架DotNettyRPC DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...
- 批量搞机(一):ansible简介、ansible安装
一.ansible简介 Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议.其是基于Python研发,糅合了很多老运维工具的优点实现了批量 ...
- ansible简介安装配置
ansible简介 ansible是一款,自动化运维管理工具.顾名思义是用于批量去管理及安装服务及批量管理主机. ansible与saltstack对比 ansible优点:配置简单,部署容易除主管理 ...
- jQuery的几种简单实用效果
许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...
- 经验分享:10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...
- 简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注 ...
- php简单实用的操作文件工具类(创建、移动、复制、删除)
php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) { // 原目录,复制到的目录 $dir = opend ...
随机推荐
- SQL优化经验
SQL 优化经验总结34条 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享! (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效 ...
- oc 语法基础
1:https://mp.weixin.qq.com/s/IqICB4aW2vZdU0382S9sTA <1-7高质量OC代码> 2:https://blog.csdn.net/qq_3 ...
- thymeleaf的fragment例子
fragment介绍 fragment类似于JSP的tag,在html中文件中,可以将多个地方出现的元素块用fragment包起来使用. 定义fragment 新建foot.html文件 <!D ...
- Mysql中判断一个点是否落在多边形内
关于地理空间数据,经常需要处理两个空间数据的关联关系.有很多种方法可以处理,通过编写程序算法,或者是调用数据库中对应的function.在mysql数据库中,https://dev.mysql.com ...
- ORC 文件存储格式
1.orc列式存储概念 a)列式存储:orc并不是纯粹的列式存储,也是先基于行对数据表进行分组(行组),然后对行组进行列式存储. b)查询数据的时候不需要扫描全部数据(磁盘IO),只需查询指定列即可. ...
- 利用rman duplicate重建oracle dataguard standby数据库
问题背景 适用情况: 操作系统: redhat 6.5 数据库: oracle 11g r2 问题描述: failover后原主库无法恢复和启动或者丢失主备关系 优点 不需要对primary数据库停机 ...
- HTML 理解标签 - 帧
帧 : frame(已弃用) 是一个HTML元素,它定义了可以显示另一个HTML文档的特定区域.一个框架应该用在一个框架内 <frameset> iframe 表示嵌套的浏览上下文,有效地 ...
- AD中修改OU下面用户的属性
第一种方法可行: get-ADuser -searchbase "ou=Wireless,dc=lstech,dc=com" -filter * | set-ADuser -Giv ...
- sass 和less 分别在循环 和超出省略方面的区别!
这两天在迁项目,新项目支持less预处理器,之前是采用的sass,就出现一些冲突,好在有对应的转换方式,重点说下 我遇到的2个问题 1:超出省略 sass: 声明: 在需要的地方: less: 在使用 ...
- C#6.0新语法
.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Nam ...