复制
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
相关推荐
### Ansible工具的使用教程 #### 一、学习背景与目的 随着企业IT规模的不断扩大,尤其是对于Hadoop集群这样的大型分布式系统来说,维护数百甚至数...掌握Ansible的基本使用方法,将有助于提高运维工作的效率和质量。
通过以上步骤,我们不仅完成了Ansible的安装与配置,还学习了如何使用一些基本模块来执行远程任务。这为我们后续利用Ansible进行更复杂、高效的自动化运维工作奠定了坚实的基础。在未来的工作中,可以进一步探索...
在深入探讨Ansible和AVM之前,我们先理解一下Ansible的基本概念。Ansible基于SSH(Secure Shell)协议,无需在目标节点上安装任何代理,这使得它非常轻量级。通过编写YAML格式的Playbooks,你可以定义任务列表,执行...
Ansible 命令的基本语法为:ansible 主机/组 -m 模块名 -a 执行的命令。例如: ``` #ansible host2 -m command -a date ``` 这将在 host2 组的主机上执行 date 命令。可以添加 -k 选项,以输入远程主机密码,例如: ...
Ansible的基本操作包括运行模块和使用playbook。可以通过`ansible -h`查看命令帮助,`ansible-doc -l`列出所有可用模块,`ansible-doc -s <module>`查看特定模块的帮助。例如,使用`ping`模块测试主机连通性,可以...
例如,使用`command`模块重启服务器的命令可以是`ansible-webservers -m command -a "/sbin/reboot -t now"`,而使用`service`模块重启httpd服务的命令则是`ansible-webservers -m service -a "name=httpd state=...
例如,使用`ansible all -m ping`命令测试网络连通性,使用`ansible all -m copy -a "src=a.conf dest=a.conf"`命令复制文件。 五、模块类型 Ansible模块分为三种类型:核心模块、附加模块和用户自定义模块。核心...
### Ansible自动化运维工具详解与实践 #### 一、Ansible简介 Ansible是一款非常流行的自动化运维工具,...通过上述介绍和示例,相信读者已经对Ansible有了初步的认识,并掌握了如何安装配置和使用Ansible的基本方法。
#### Ansible 的基本介绍 Ansible 是一种开源的自动化运维管理工具,由 Red Hat 公司维护和支持。它采用 Python 编写而成,可以通过 SSH 协议远程控制和管理服务器,实现自动化配置、部署以及更新等操作。相较于...
了解这些基本概念和工作流程后,你可以开始使用 Ansible 来自动化管理你的 IT 环境,如批量更新系统、部署应用、配置服务等。Ansible 的强大之处在于它的模块化设计,你可以根据需要组合使用不同的模块来实现复杂的...
通过以上内容,读者不仅能够了解Ansible的基本原理和使用方法,还能学会如何优化Ansible的配置,以适应不同的场景需求。这为运维人员提供了强大的工具,帮助他们在实际工作中更加高效地管理复杂的IT环境。
### Ansible基本使用 1. **Ad Hoc命令**: Ansible的Ad Hoc命令类似shell命令,用于执行临时的、一次性的工作。Ad Hoc命令的基本语法是: ``` ansible <pattern> -i <inventory> -m <module> -a ``` 其中,`...
执行Ansible命令的基本语法是`ansible 主机/组 -m 模块名 -a 命令`。例如,使用`ansible host2 -m command -a date`命令可以向`host2`组中的所有主机发送执行`date`命令的请求。如果遇到SSH权限问题,可以使用`-k`...
Ansible 配置文件位于 /etc/ansible/ansible.cfg,是基本配置文件。如果找不到其他配置文件,使用这个配置文件。用户也可以在当前工作目录中创建 ansible.cfg 文件,该文件优先级最高。显示使用的配置文件可以使用 ...
Ansible 的主要特点是使用 SSH 通道进行远程命令执行或下发配置,具有功能强大、灵活的系统管理和状态配置。 Ansible 的命令学习可以分为以下几个方面: Ansible 基本命令 Ansible 的基本命令包括 copy、fetch...
- **基本语法**: Ansible 命令的基本格式为 `ansible [target] -m [module] -a "[arguments]"`。 - `[target]`: 被管理的主机或主机组。 - `-m [module]`: 执行的任务模块。 - `-a "[arguments]"`: 模块参数。 #...
Ansible的基本使用格式如下: ```bash ansible <host-pattern> [options] ``` 其中 `<host-pattern>` 是指要操作的目标主机的模式,例如 `all` 表示所有主机,`webserver` 表示名为webserver的主机等。 ### Ansible...
6. **模块查询**:可以使用`ansible-doc -l`列出所有可用的模块,或者使用`ansible-doc -l | grep user`来查找特定的模块。 7. **模块文档**:通过`ansible-doc <module_name>`可以查看某个模块的详细文档,了解其...
#### Ansible基本使用方法 - **命令格式**: `ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS -f FORKS -C -u USERNAME -c CONNECTION` - `HOST-PATTERN`: 指定要操作的主机模式,可以是`all`、IP地址或定义在主机...
了解了Ansible的基本概念和组件后,用户可以利用它来自动化日常的运维工作,减少重复性的劳动,提高工作效率和准确性。通过实践和学习,用户能够更深层次地利用Ansible的高级功能,比如复杂的状态管理、跨平台部署、...