`
阅读更多

复制

copy模块

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

ansible myservers -m copy -a "src=/opt/app/bin/transfer.tar dest=~/"

ansible通过ssh登录到远程服务器后,并不执行.bash_profile来设置用户自定义的环境变量;如果我们需要管理的目标服务器的路径不同,就不能直接写绝对路径,也不能写变量替换的路径;

比如:针对服务器A的目标复制路径为 /opt/app/user1/bin ,服务器B的目标复制路径为/opt/app/user2/bin; 这两个路径在各自的服务器中的路径变量都设置为$bin; 但在copy模块中,我们不能直接使用dest = $bin/; 
路径设置一般放在.bashrc /.bash_profile文件,但ansible模块登录后并不加载这两个文件;

解决方法: 
针对这种情况,可以将dest路径设置为~/,都复制到用户目录,后续再通过远程脚本处理;

远程批量命令

需要在远程执行一个个命令来管理远程服务器;

远程执行命令的模块有command、shell、scripts、以及raw模块;

command模块

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

ansible myservers  -a 'pwd'10.6.143.38| success | rc=0>>/home/rduser
10.6.143.53| success | rc=0>>/home/rduser
10.6.143.37| success | rc=0>>/home/rduser

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

shell模块

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

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

ansible myservers  -a ". .bash_profile;ps -fe |grep sa_q"-m shell

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

scripts模块

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

ansible myservers  -m script -a "/opt/app/target.sh"

这里是命令模块的官方文档: 
http://docs.ansible.com/list_of_commands_modules.html

批量执行playbooks

远程批量命令执行的另外一种方式是用playbooks; 
这里是playbooks的官方文档:http://docs.ansible.com/playbooks.html 
这里有ansible的playbooks示例:https://github.com/ansible/ansible-examples

在python中使用ansbile API

以上执行ansible模块的方式都是在命令行中直接调用,如果对返回结果需要进一步处理,可以在程序中通过API调用的方式来使用ansible模块: 
比如,以上在命令行中调用scripts的模块的方式在API中调用:

import ansible.runner
results = ansible.runner.Runner(
pattern='myservers', forks=5,
module_name='script', module_args='/opt/app/target.sh',).run()

这里是官方给出的一个详细示例,直接运行一次,将result全部打印出来,会有直观的了解:

#!/usr/bin/pythonimport ansible.runner
import sys

# construct the ansible runner and execute on all hosts
results = ansible.runner.Runner(
pattern='*', forks=10,
module_name='command', module_args='/usr/bin/uptime',).run()if results isNone:print"No hosts found"
   sys.exit(1)print"UP ***********"for(hostname, result)in results['contacted'].items():ifnot'failed'in result:print"%s >>> %s"%(hostname, result['stdout'])print"FAILED *******"for(hostname, result)in results['contacted'].items():if'failed'in result:print"%s >>> %s"%(hostname, result['msg'])print"DOWN *********"for(hostname, result)in results['dark'].items():print"%s >>> %s"%(hostname, result)

API设计详见:http://docs.ansible.com/developing_api.html

 

转自:http://www.cnblogs.com/me115/archive/2015/05/27/4529944.html

分享到:
评论

相关推荐

    43_Ansible工具的使用教程

    ### Ansible工具的使用教程 #### 一、学习背景与目的 随着企业IT规模的不断扩大,尤其是对于Hadoop集群这样的大型分布式系统来说,维护数百甚至数...掌握Ansible的基本使用方法,将有助于提高运维工作的效率和质量。

    自动化工具ansible安装和使用

    通过以上步骤,我们不仅完成了Ansible的安装与配置,还学习了如何使用一些基本模块来执行远程任务。这为我们后续利用Ansible进行更复杂、高效的自动化运维工作奠定了坚实的基础。在未来的工作中,可以进一步探索...

    Ansible-avm.zip

    在深入探讨Ansible和AVM之前,我们先理解一下Ansible的基本概念。Ansible基于SSH(Secure Shell)协议,无需在目标节点上安装任何代理,这使得它非常轻量级。通过编写YAML格式的Playbooks,你可以定义任务列表,执行...

    Ansible 自动化运维工具笔记

    Ansible 命令的基本语法为:ansible 主机/组 -m 模块名 -a 执行的命令。例如: ``` #ansible host2 -m command -a date ``` 这将在 host2 组的主机上执行 date 命令。可以添加 -k 选项,以输入远程主机密码,例如: ...

    ansible入门培训.pptx

    Ansible的基本操作包括运行模块和使用playbook。可以通过`ansible -h`查看命令帮助,`ansible-doc -l`列出所有可用模块,`ansible-doc -s &lt;module&gt;`查看特定模块的帮助。例如,使用`ping`模块测试主机连通性,可以...

    Ansible常见模块详解.pdf

    例如,使用`command`模块重启服务器的命令可以是`ansible-webservers -m command -a "/sbin/reboot -t now"`,而使用`service`模块重启httpd服务的命令则是`ansible-webservers -m service -a "name=httpd state=...

    Ansible常用模块

    例如,使用`ansible all -m ping`命令测试网络连通性,使用`ansible all -m copy -a "src=a.conf dest=a.conf"`命令复制文件。 五、模块类型 Ansible模块分为三种类型:核心模块、附加模块和用户自定义模块。核心...

    自动化运维工具ansible学习笔记.pdf

    ### Ansible自动化运维工具详解与实践 #### 一、Ansible简介 Ansible是一款非常流行的自动化运维工具,...通过上述介绍和示例,相信读者已经对Ansible有了初步的认识,并掌握了如何安装配置和使用Ansible的基本方法。

    centos6中搭建ansible

    #### Ansible 的基本介绍 Ansible 是一种开源的自动化运维管理工具,由 Red Hat 公司维护和支持。它采用 Python 编写而成,可以通过 SSH 协议远程控制和管理服务器,实现自动化配置、部署以及更新等操作。相较于...

    ansible 简明教程

    了解这些基本概念和工作流程后,你可以开始使用 Ansible 来自动化管理你的 IT 环境,如批量更新系统、部署应用、配置服务等。Ansible 的强大之处在于它的模块化设计,你可以根据需要组合使用不同的模块来实现复杂的...

    Ansible运维管理平台部署、维护与调优.pdf

    通过以上内容,读者不仅能够了解Ansible的基本原理和使用方法,还能学会如何优化Ansible的配置,以适应不同的场景需求。这为运维人员提供了强大的工具,帮助他们在实际工作中更加高效地管理复杂的IT环境。

    ansible演练手册

    ### Ansible基本使用 1. **Ad Hoc命令**: Ansible的Ad Hoc命令类似shell命令,用于执行临时的、一次性的工作。Ad Hoc命令的基本语法是: ``` ansible &lt;pattern&gt; -i &lt;inventory&gt; -m &lt;module&gt; -a ``` 其中,`...

    Ansible 自动化运维工具笔记.pdf

    执行Ansible命令的基本语法是`ansible 主机/组 -m 模块名 -a 命令`。例如,使用`ansible host2 -m command -a date`命令可以向`host2`组中的所有主机发送执行`date`命令的请求。如果遇到SSH权限问题,可以使用`-k`...

    Ansible的简介及部署.doc

    Ansible 配置文件位于 /etc/ansible/ansible.cfg,是基本配置文件。如果找不到其他配置文件,使用这个配置文件。用户也可以在当前工作目录中创建 ansible.cfg 文件,该文件优先级最高。显示使用的配置文件可以使用 ...

    ansible管理工具命令学习.docx

    Ansible 的主要特点是使用 SSH 通道进行远程命令执行或下发配置,具有功能强大、灵活的系统管理和状态配置。 Ansible 的命令学习可以分为以下几个方面: Ansible 基本命令 Ansible 的基本命令包括 copy、fetch...

    Ansible学习文档

    - **基本语法**: Ansible 命令的基本格式为 `ansible [target] -m [module] -a "[arguments]"`。 - `[target]`: 被管理的主机或主机组。 - `-m [module]`: 执行的任务模块。 - `-a "[arguments]"`: 模块参数。 #...

    部署ansible管理工具

    6. **模块查询**:可以使用`ansible-doc -l`列出所有可用的模块,或者使用`ansible-doc -l | grep user`来查找特定的模块。 7. **模块文档**:通过`ansible-doc &lt;module_name&gt;`可以查看某个模块的详细文档,了解其...

    Ansible基础配置和企业级项目实用案例

    #### Ansible基本使用方法 - **命令格式**: `ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS -f FORKS -C -u USERNAME -c CONNECTION` - `HOST-PATTERN`: 指定要操作的主机模式,可以是`all`、IP地址或定义在主机...

    Ansible 的介绍

    了解了Ansible的基本概念和组件后,用户可以利用它来自动化日常的运维工作,减少重复性的劳动,提高工作效率和准确性。通过实践和学习,用户能够更深层次地利用Ansible的高级功能,比如复杂的状态管理、跨平台部署、...

    ansible-lvm:使用 playbook 运行基本 lvm 命令的 ansible 模块

    在了解 `ansible-lvm` 模块之前,我们首先需要理解 LVM 的基本概念: 1. **物理卷(Physical Volumes, PV)**:这是 LVM 架构的基础,可以是物理硬盘、分区或 RAID 阵列。 2. **卷组(Volume Groups, VG)**:由一个...

Global site tag (gtag.js) - Google Analytics