Brief introduction
surroundings:
ansible端:
ip:192.168.100.129
hostname:node1.lansgg.com
client side:
ip:192.168.100.131
hostname:v2.lansgg.com
ip:192.168.100.132
hostname:v3.lansgg.com
[root@node1 ansible]# pwd
/etc/ansible
[root@node1 ansible]# cat hosts
[testservers]
192.168.100.131
192.168.100.132
[root@node1 ansible]#
1, the command format
SYNOPSIS
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
For more information query command module
ansible-doc moduleName
Such as:
[root@node1 ansible]# ansible-doc command
less 436
Copyright (C) 1984-2009 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less
> COMMAND
The [command] module takes the command name followed by a list of
space-delimited arguments. The given command will be executed on all
selected nodes. It will not be processed through the shell, so
variables like `$HOME' and operations like `"<"', `">"', `"|"', and
`"&"' will not work (use the [shell] module if you need these
features).
Options (= is mandatory):
- chdir
cd into this directory before running the command [Default:
None]
- creates
a filename, when it already exists, this step will *not* be
run. [Default: None]
- executable
change the shell used to execute the command. Should be an
absolute path to the executable. [Default: None]
= free_form
the command module takes a free form command to run. There is
no parameter actually named 'free form'. See the examples!
[Default: None]
- removes
a filename, when it does not exist, this step will *not* be
run. [Default: None]
- warn
if command warnings are on in ansible.cfg, do not warn about
this particular line if set to no/false. [Default: True]
Notes: If you want to run a command through the shell (say you are using
`<', `>', `|', etc), you actually want the [shell] module
instead. The [command] module is much more secure as it's not
affected by the user's environment. `creates', `removes', and
`chdir' can be specified after the command. For instance, if
you only want to run a command if a certain file does not
exist, use this.
EXAMPLES:
# Example from Ansible Playbooks.
- command: /sbin/shutdown -t now
# Run the command if the specified file does not exist.
- command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database
# You can also use the 'args' form to provide the options. This command
# will change the working directory to somedir/ and will only run when
# /path/to/database doesn't exist.
- command: /usr/bin/make_database.sh arg1 arg2
args:
chdir: somedir/
creates: /path/to/database
Explanation: command module name, chdir, create the module-specific parameters, etc.
2, command ansible modules,
One of the implementation of this module is the default module ansible, is also a common module
Example: view the remote host the last two lines of passwd
[root@node1 ansible]# ansible testservers -m command -a 'tail -2 /etc/passwd'
192.168.100.131 | success | rc=0 >>
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
192.168.100.132 | success | rc=0 >>
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
Arguments, of course, modify the working directory
[root@node1 ansible]# ansible testservers -m command -a 'pwd'
192.168.100.132 | success | rc=0 >>
/root
192.168.100.131 | success | rc=0 >>
/root
[root@node1 ansible]# ansible testservers -m command -a 'chdir=/tmp/ pwd'
192.168.100.131 | success | rc=0 >>
/tmp
192.168.100.132 | success | rc=0 >>
/tmp
The difference and usage scenarios
command module [execute remote commands]
[root@node1 ansible]# ansible testservers -m command -a 'uname -n'
script module [perform a master shell / python script on a remote host] (using relative path)
[root@node1 ansible]# ansible testservers -m script -a '/etc/ansible/test.sh
shell module [perform remote host shell / python script]
[root@node1 ansible]# ansible testservers -m shell -a 'bash /root/test.sh'
raw module [similar command module, support piped]
[root@node1 ansible]# ansible testservers -m raw -a "ifconfig eth0 |sed -n 2p |awk '{print \$2}' |awk -F: '{print \$2}'"