ansible Introduction To Ad-Hoc Commands:

来源:互联网 发布:手机版经传软件 编辑:程序博客网 时间:2024/06/01 08:26
Introduction To Ad-Hoc Commands:在下面的例子中,我们将演示如何使用/usr/bin/ansible 运行 ad hoc 任务.所谓 ad-hoc 命令是什么呢?(这其实是一个概念性的名字,相对于写Ansible playbook来说的,类似于在命令行敲入shell命令和写shell scripts两者之间的关系)如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来,这样的命令就叫ad-hoc命令。Ansible提供两种方式去完成任务,一种是ad-hoc命令,一是写Ansible playbook.前者可以解决一些简单的任务,后者解决较为复杂的任务。一般而言,在学习playbooks之后,你才能体会到Ansible真正的强大之处在哪里。那我们会在上面情景下去使用ad-hoc命令呢?比如说因为圣诞节要来了,想要把所有实验室的电源关闭,我们只需要执行一行命令就可以达成这个任务,而不需要写playbook来做这个任务。并行和Shell 命令:这里我们使用Ansible的命令行工具来重启Altanta组中所有的web服务器,每次重启10个。我们先设置SSH-agent,将私钥纳入其管理:$ ssh-agent bash$ ssh-add ~/.ssh/id_rsa如果不像使用ssh-agent,想通过密码验证的方式使用SSH,可以在执行ansible命令时使用--ask-pass (-k)选项,但这里建议使用ssh-agent:使用 shell 模块的示例如下:[root@node01 ansible]# ansible webservers -m shell -a 'echo $LOGNAME'192.168.137.1 | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ",     "unreachable": true}192.168.137.3 | SUCCESS | rc=0 >>root115.236.19.4 | SUCCESS | rc=0 >>root使用Ansible ad hoc 命令行接口时(与使用 Playbooks 的情况相反),尤其注意shell引号的规则.$ ansible raleigh -m shell -a 'echo $TERM'-m 使用shell模块-a  模块参数在执行/usr/bin/ansible时默认是以当前用户的身份去执行这个命令,使用shell 模块的示例如下:[root@node01 ansible]# echo $HOSTNAME                                 InformixDBServer[root@node01 ansible]# ansible webservers -m shell -a "echo $HOSTNAME"192.168.137.1 | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ",     "unreachable": true}192.168.137.3 | SUCCESS | rc=0 >>InformixDBServer115.236.19.4 | SUCCESS | rc=0 >>InformixDBServer[root@node01 ansible]# 使用双引号的时候,会求出HOSTNAME在当前系统的值单引号,是不这个命令传递到其他机器执行:[root@node01 ansible]# echo $HOSTNAMEInformixDBServer[root@node01 ansible]# ansible webservers -m shell -a 'echo $HOSTNAME'192.168.137.1 | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ",     "unreachable": true}192.168.137.3 | SUCCESS | rc=0 >>node2115.236.19.4 | SUCCESS | rc=0 >>yun-bakFile Transfer:这是/usr/bin/ansible的另一种用法,Ansible能够以并行的方式同时scp大量的文件到多台机器,命令如下: ansible webservers -m copy -a "src=/etc/hosts dest=/tmp/hosts"默认传过去的数组为:node2:/root#ls -ltr /tmp/hosts-rw-r--r-- 1 root root 181 Oct  9 19:02 /tmp/hosts使用file模块可以做到修改文件的属主和权限,(在这里可替换为copy模块,是等效的):Managing Packages:Ansible 提供对yum和apt的支持,这里是关于yum的示例:确认一个软件包已经按照,但不去升级它:确认一个软件包还没有安装:$ ansible webservers -m yum -a "name=acme state=absent"[root@node01 ansible]# ansible webservers -m yum -a "name=acme state=absent"192.168.137.1 | UNREACHABLE! => {    "changed": false,     "msg": "Failed to connect to the host via ssh: ",     "unreachable": true}192.168.137.3 | FAILED! => {    "changed": false,     "failed": true,     "msg": "python2 bindings for rpm are needed for this module. python2 yum module is needed for this  module"}115.236.19.4 | SUCCESS => {    "changed": false,     "failed": false,     "msg": "",     "rc": 0,     "results": [        "acme is not installed"    ]}Users and Groups:使用'user'模块可以方便的创建账户,删除账户,或是管理现有账户

原创粉丝点击