ansible Introduction To Ad-Hoc Commands:

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 >>
root

115.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 >>
InformixDBServer
115.236.19.4 | SUCCESS | rc=0 >>
InformixDBServer
[root@node01 ansible]# 


使用双引号的时候,会求出HOSTNAME在当前系统的值

单引号,是不这个命令传递到其他机器执行:

[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 >>
node2
115.236.19.4 | SUCCESS | rc=0 >>
yun-bak


File 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'模块可以方便的创建账户,删除账户,或是管理现有账户

原文地址:https://www.cnblogs.com/hzcya1995/p/13349480.html