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简介,简单实用的更多相关文章

  1. Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件!

    源:Victor 串口 VCL 控件 - 简单实用, 功能强大的 C++ Builder 串口控件! 2014年02月06日发布控件的重要更新版本: Victor 串口控件 1.5.0.2 版本 (包 ...

  2. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  3. CSS3 linear-gradient线性渐变实现虚线等简单实用图形

    一.作为图片存在的CSS3 gradient渐变 我觉得CSS3 Backgrounds比较厉害的一个地方就是支持多背景,也就是背景图片个数可以无限累加,正好CSS3的gradient渐变性质是bac ...

  4. .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 ...

  5. 批量搞机(一):ansible简介、ansible安装

    一.ansible简介 Ansible是2013年推出的一款IT自动化和DevOps软件,目前由Redhat已签署Ansible收购协议.其是基于Python研发,糅合了很多老运维工具的优点实现了批量 ...

  6. ansible简介安装配置

    ansible简介 ansible是一款,自动化运维管理工具.顾名思义是用于批量去管理及安装服务及批量管理主机. ansible与saltstack对比 ansible优点:配置简单,部署容易除主管理 ...

  7. jQuery的几种简单实用效果

    许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...

  8. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  9. 简单实用的PHP防注入类实例

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下   本文实例讲述了简单实用的PHP防注 ...

  10. php简单实用的操作文件工具类(创建、移动、复制、删除)

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

随机推荐

  1. flutter 容器 几种写法

    1.Stack: 取代线性布局 (译者语:和Android中的LinearLayout相似),Stack允许子 widget 堆叠, 你可以使用 Positioned 来定位他们相对于Stack的上下 ...

  2. ningx.conf location

    server { listen ; server_name localhost; location /dirName { alias "C:/Users/VALEB/Downloads/in ...

  3. JSON AST 生成MD

    使用 JsonLite 获取 JSON  AST class Program { static void Main(string[] args) { string fileName = $" ...

  4. css3动画的简单学习

    transform常用的属性(2D变化): translate(x,y) 定义 2D 转换. scale(x,y) 定义 2D 缩放转换 rotate(angle) 定义 2D 旋转,在参数中规定角度 ...

  5. Web高级 HTTP报文

    1. 报文结构 1.1 请求报文结构 Start-Line 单行,包括 Method + URL + HTTP Version Headers 多行,形式为 Name:Value Body 可选,主体 ...

  6. c# excel如何导入到sqlserver数据库

    最近在做这个如何把excel导入到数据库中,经过多方查找,终于找到一个适合的,并且经过自己的完善可以正常使用(忘记原作者博客的链接地址了,敬请见谅) 首先是窗体的创建,文本框显示文件的路径,按钮执行操 ...

  7. 前端-JavaScript2-1——JavaScript基础复习及上次作业答案

    昨天讲解的JS是编程最最简单的一些基础知识,复习一下: JavaScript书写环境,<script>标签 1    <script type=”text/javascript”&g ...

  8. Python【每日一问】07

    问:请解释使用 *args 和 **kwargs 的含义 答: *args:可变参数,表示将实参中按照位置传值,多余的值都给 args,多余的实参被打包成 tuple(元组),然后传递给函数调用 # ...

  9. More than one file was found with OS independent path 錯誤

    More than one file was found with OS independent path 'lib/armeabi/libmrpoid.so',. 翻譯過來就是:在操作系統的獨立目錄 ...

  10. flutter 入口文件配置路由+加载页面

    入口文件配置路由 1.路由信息 -- 加载页面 ,通常用于显示新的内容或者广告,加载完成之后进入主页面 -- 主页面 /app 2.配置页面  main.dart main.dart // main ...