模块介绍:

copy模块

使用copy模块,可以将本地文件一键复制到远程服务器;
-a后跟上参数,参数中指定本地文件和远端路径;

[root@ZABBIX ~]# ansible glq -m copy -a "src=~/fping-3.8.tar.gz dest=~/"
10.69.69.121 | success >> {
"changed": true,
"dest": "/root/fping-3.8.tar.gz",
"gid": 0,
"group": "root",
"md5sum": "1e36467cc96a4ca959925ac167ea19af",
"mode": "0644",
"owner": "root",
"size": 147448,
"src": "/root/.ansible/tmp/ansible-tmp-1482214561.7-273384209097162/source",
"state": "file",
"uid": 0
}
10.107.2.56 | success >> {
"changed": true,
"dest": "/root/fping-3.8.tar.gz",
"gid": 0,
"group": "root",
"md5sum": "1e36467cc96a4ca959925ac167ea19af",
"mode": "0644",
"owner": "root",
"size": 147448,
"src": "/root/.ansible/tmp/ansible-tmp-1482214563.87-235871924804761/source",
"state": "file",
"uid": 0
}
10.107.2.44 | success >> {
"changed": true,
"dest": "/root/fping-3.8.tar.gz",
"gid": 0,
"group": "root",
"md5sum": "1e36467cc96a4ca959925ac167ea19af",
"mode": "0644",
"owner": "root",
"size": 147448,
"src": "/root/.ansible/tmp/ansible-tmp-1482214563.94-108812671292926/source",
"state": "file",
"uid": 0
} 10.107.2.58 | success >> {
"changed": true,
"dest": "/root/fping-3.8.tar.gz",
"gid": 0,
"group": "root",
"md5sum": "1e36467cc96a4ca959925ac167ea19af",
"mode": "0644",
"owner": "root",
"size": 147448,
"src": "/root/.ansible/tmp/ansible-tmp-1482214563.92-185412226226660/source",
"state": "file",
"uid": 0
}
验证是否copy成功:
[root@ZABBIX ~]# ansible glq -m command -a 'ls -al /root/fping-3.8.tar.gz'
10.107.2.56 | success | rc=0 >>
-rw-r--r-- 1 root root 147448 Dec 20 14:15 /root/fping-3.8.tar.gz
10.107.2.44 | success | rc=0 >>
-rw-r--r-- 1 root root 147448 Dec 20 14:15 /root/fping-3.8.tar.gz
10.107.2.58 | success | rc=0 >>
-rw-r--r-- 1 root root 147448 Dec 20 14:15 /root/fping-3.8.tar.gz
10.69.69.121 | success | rc=0 >>
-rw-r--r-- 1 root root 147448 Dec 20 07:15 /root/fping-3.8.tar.gz
command模块:

command模块为ansible默认模块,不指定-m参数时,使用的就是command模块;
comand模块比较简单,常见的命令都可以使用,但其命令的执行不是通过shell执行的,所以,像这些 "<", ">", "|", and "&"操作都不可以,当然,也就不支持管道;

缺点是:不支持管道,就没法批量执行命令;

实例:

[root@ZABBIX ~]# ansible glq -m command -a 'pwd'
10.69.69.121 | success | rc=0 >>
/root
10.107.2.56 | success | rc=0 >>
/root
10.107.2.44 | success | rc=0 >>
/root
10.107.2.58 | success | rc=0 >>
/root
shell模块

使用shell模块,在远程命令通过/bin/sh来执行;所以,我们在终端输入的各种命令方式,都可以使用;
但是我们自己定义在.bashrc/.bash_profile中的环境变量shell模块由于没有加载,所以无法识别;如果需要使用自定义的环境变量,就需要在最开始,执行加载自定义脚本的语句;

对shell模块的使用可以分成两块:
1) 如果待执行的语句少,可以直接写在一句话中:

[root@ZABBIX ~]# ansible glq -a "ifconfig eth0 | grep -e "^10.";pwd" -m shell
10.69.69.121 | success | rc=0 >>
/root 10.107.2.44 | success | rc=0 >>
/rooteth0: error fetching interface information: Device not found 10.107.2.56 | success | rc=0 >>
/root 10.107.2.58 | success | rc=0 >>
/rooteth0: error fetching interface information: Device not found

2) 如果在远程待执行的语句比较多,可写成一个脚本,通过copy模块传到远端,然后再执行;但这样就又涉及到两次ansible调用;对于这种需求,ansible已经为我们考虑到了,script模块就是干这事的;

scripts模块

使用scripts模块可以在本地写一个脚本,在远程服务器上执行:

脚本如下:

[root@ZABBIX ~]# vim test.sh
#!/bin/bash
declare -i SUM=0
for ((i=1;i<=100;i+=1))
do
let SUM+=$i
done
echo $SUM

执行脚本:

[root@ZABBIX ~]# ansible glq -m script -a "/root/test.sh"
10.69.69.121 | success >> {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "5050\r\n"
}
10.107.2.44 | success >> {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "5050\r\n"
}
10.107.2.56 | success >> {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "5050\r\n"
}
10.107.2.58 | success >> {
"changed": true,
"rc": 0,
"stderr": "",
"stdout": "5050\r\n"
}

ansible 自动化(2)的更多相关文章

  1. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  2. CentOS7系统 ansible自动化部署多台服务器部署

    CentOS7系统 ansible自动化部署多台服务器部署   Ansible工作机制  从图中可以看出ansible分为以下几个部份: 1> Control Node:控制机器2> In ...

  3. ansible 自动化运维

    Ansible 自动化运维 ansible安装epel #yum list all *ansible*#yum install *ansible*#yum info ansible#rpm -ql a ...

  4. ansible自动化工具安装和简单使用

    ansible自动化工具安装和简单使用 1.安装 ansible依赖于Python 2.6或更高的版本.paramiko.PyYAML及Jinja2. 2.1 编译安装 解决依赖关系 # yum -y ...

  5. Jenkins +svn +maven +tomcat+ ansible 自动化批量部署

    Jenkins +svn +maven +tomcat+ ansible 自动化批量部署 一.部署svn yum install subversion 先创建目录 mkdir /home/svn 创建 ...

  6. [k8s]kubespray(ansible)自动化安装k8s集群

    kubespray(ansible)自动化安装k8s集群 https://github.com/kubernetes-incubator/kubespray https://kubernetes.io ...

  7. Jenkins+Gitlab+Ansible自动化部署(五)

    Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/102445 ...

  8. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  9. Jenkins+Gitlab+Ansible自动化部署(三)

    接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www. ...

  10. Jenkins+Gitlab+Ansible自动化部署(一)

    首先准备实验环境 虚拟机 主机名 IP地址 服务 系统版本 内核版本 Vmware Workstation 14 gitlab.example.com 192.168.244.130 gitlab  ...

随机推荐

  1. 关于representation的理解

    目前见过的定义的比较确切的是Yoshua Bengio在ACL2010的一篇paper中关于word representation的定义: " A word Representation i ...

  2. JavaWeb 学习006-4个页面,5条sql语句(添加、查看、修改、删除)

    今天遇到的问题: 1. 在list页面上添加信息时候,跳转到doAdd页面后,点击保存按钮,能够跳转回list页面,但是新增的信息不能显示出来,就像是没有执行添加操作一样. 这是什么问题? ①是不是到 ...

  3. xlrd读取多个excel电子表数据

    import sys import xlrd import traceback def ReadData(FileName): try: workBook = xlrd.open_workbook(F ...

  4. .net加密解密

    .net加密概述 .net加密编程模型 .net加密解密类

  5. odoo 10 生产自动领料

    分析源码 当 原材料的 补货规则 的 "补货位置" location_id 是 生产单 的 原材料 "目标位置 ", 并且 原材料的 补货规则 的 " ...

  6. win7 部署WCF遇到的问题记录

    1. IIS7 handler Mappings默认没有*.svc 的处理,需要安装(页面错误提示好像会提示缺少相应的处理器,记不清楚了) 方法:使用 ServiceModelReg.exe 工具 路 ...

  7. PHP中phar包的使用

    PHP5.3之后支持了类似Java的jar包,名为phar.用来将多个PHP文件打包为一个文件. 首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,includ ...

  8. sql server 2000数据库 最近经常出现某进程一直占用资源,阻塞?死锁?

    OA的数据库最近多次出现某进程一直占用资源,导致其他进程无法执行.使用sp_who2 和 sql server profiler跟踪查询,发现有以下几个语句常常占用资源: 1.declare @P1 ...

  9. 【安装mysql数据库】

    方法/步骤   请注意上图中选择Custom选项,这样才能修改安装目录.   请注意为了数据安全,不要把mysql安装在系统盘,如C:盘. 可以在其他盘符下,新建两个文件夹,一个存储mysql的文件, ...

  10. php安装libiconv-1.14.tar.gz遇到的问题

    遇到的Error code In file included from progname.c:26:0: ./stdio.h:1010:1: error: ‘gets‘ undeclared here ...