Added file copy support w/ readme updates
This commit is contained in:
parent
83d15afc6f
commit
3807824c6d
4 changed files with 54 additions and 21 deletions
42
README.md
42
README.md
|
@ -41,8 +41,15 @@ The default inventory file (-H) is ~/.ansible_hosts and is a list
|
||||||
of all hostnames to target with ansible, one per line. These
|
of all hostnames to target with ansible, one per line. These
|
||||||
can be hostnames or IPs
|
can be hostnames or IPs
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
abc.example.com
|
||||||
|
def.example.com
|
||||||
|
192.168.10.50
|
||||||
|
192.168.10.51
|
||||||
|
|
||||||
This list is further filtered by the pattern wildcard (-P) to target
|
This list is further filtered by the pattern wildcard (-P) to target
|
||||||
specific hosts.
|
specific hosts. This is covered below.
|
||||||
|
|
||||||
Comamnd line usage example
|
Comamnd line usage example
|
||||||
==========================
|
==========================
|
||||||
|
@ -51,36 +58,51 @@ Run a module by name with arguments
|
||||||
|
|
||||||
* ssh-agent bash
|
* ssh-agent bash
|
||||||
* ssh-add ~/.ssh/id_rsa.pub
|
* ssh-add ~/.ssh/id_rsa.pub
|
||||||
* ansible -p "*.example.com" -m modName -a "arg1 arg2"
|
* ansible -p "*.example.com" -n modName -a "arg1 arg2"
|
||||||
|
|
||||||
API Example
|
API Example
|
||||||
===========
|
===========
|
||||||
|
|
||||||
The API is simple and returns basic datastructures.
|
The API is simple and returns basic datastructures.
|
||||||
|
|
||||||
import ansible
|
import ansible
|
||||||
runner = ansible.Runner(command='inventory', host_list=['xyz.example.com', '...'])
|
runner = ansible.Runner(command='inventory', host_list=['xyz.example.com', '...'])
|
||||||
data = runner.run()
|
data = runner.run()
|
||||||
|
|
||||||
{
|
{
|
||||||
'xyz.example.com' : [ 'any kind of datastructure is returnable' ],
|
'xyz.example.com' : [ 'any kind of datastructure is returnable' ],
|
||||||
'foo.example.com' : None, # failed to connect,
|
'foo.example.com' : None, # failed to connect,
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
|
|
||||||
Additional options to runner include the number of forks, hostname
|
Additional options to runner include the number of forks, hostname
|
||||||
exclusion pattern, library path, and so on. Read the source, it's not
|
exclusion pattern, library path, and so on. Read the source, it's not
|
||||||
complicated.
|
complicated.
|
||||||
|
|
||||||
|
Patterns
|
||||||
|
========
|
||||||
|
|
||||||
|
To target only hosts starting with "rtp", for example:
|
||||||
|
|
||||||
|
* ansible "rtp*" -n command -a "yum update apache"
|
||||||
|
|
||||||
|
|
||||||
Parallelism
|
Parallelism
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Specify the number of forks to use, to run things in greater parallelism.
|
Specify the number of forks to use, to run things in greater parallelism.
|
||||||
|
|
||||||
* ansible -f 10 "*.example.com" -m modName -a "arg1 arg2"
|
* ansible -f 10 "*.example.com" -n command -a "yum update apache"
|
||||||
|
|
||||||
10 forks. The default is 3. 5 is right out.
|
10 forks. The default is 3. 5 is right out.
|
||||||
|
|
||||||
|
File Transfer
|
||||||
|
=============
|
||||||
|
|
||||||
|
Yeah, it does that too.
|
||||||
|
|
||||||
|
* ansible -n copy -a "/etc/hosts /tmp/hosts"
|
||||||
|
|
||||||
Bundled Modules
|
Bundled Modules
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
@ -119,8 +141,8 @@ Future plans
|
||||||
Author
|
Author
|
||||||
======
|
======
|
||||||
|
|
||||||
Michael DeHaan <michael.dehaan@gmail.com>
|
Michael DeHaan <michael.dehaan@gmail.com>
|
||||||
|
|
||||||
http://michaeldehaan.net/
|
http://michaeldehaan.net/
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,13 @@ class Cli(object):
|
||||||
options, args = parser.parse_args()
|
options, args = parser.parse_args()
|
||||||
host_list = self._host_list(options.host_list)
|
host_list = self._host_list(options.host_list)
|
||||||
|
|
||||||
|
# TODO: more shell like splitting on module_args would
|
||||||
|
# be a good idea
|
||||||
|
|
||||||
return ansible.Runner(
|
return ansible.Runner(
|
||||||
module_name=options.module_name,
|
module_name=options.module_name,
|
||||||
module_path=options.module_path,
|
module_path=options.module_path,
|
||||||
module_args=options.module_args,
|
module_args=options.module_args.split(' '),
|
||||||
host_list=host_list,
|
host_list=host_list,
|
||||||
forks=options.forks,
|
forks=options.forks,
|
||||||
pattern=options.pattern,
|
pattern=options.pattern,
|
||||||
|
|
|
@ -39,7 +39,7 @@ class Pooler(object):
|
||||||
class Runner(object):
|
class Runner(object):
|
||||||
|
|
||||||
def __init__(self, host_list=[], module_path=None,
|
def __init__(self, host_list=[], module_path=None,
|
||||||
module_name=None, module_args='',
|
module_name=None, module_args=[],
|
||||||
forks=3, timeout=60, pattern='*'):
|
forks=3, timeout=60, pattern='*'):
|
||||||
|
|
||||||
self.host_list = host_list
|
self.host_list = host_list
|
||||||
|
@ -73,15 +73,22 @@ class Runner(object):
|
||||||
conn = self._connect(host)
|
conn = self._connect(host)
|
||||||
if not conn:
|
if not conn:
|
||||||
return [ host, None ]
|
return [ host, None ]
|
||||||
|
if self.module_name != "copy":
|
||||||
outpath = self._copy_module(conn)
|
outpath = self._copy_module(conn)
|
||||||
self._exec_command(conn, "chmod +x %s" % outpath)
|
self._exec_command(conn, "chmod +x %s" % outpath)
|
||||||
cmd = self._command(outpath)
|
cmd = self._command(outpath)
|
||||||
result = self._exec_command(conn, cmd)
|
result = self._exec_command(conn, cmd)
|
||||||
result = json.loads(result)
|
result = json.loads(result)
|
||||||
|
else:
|
||||||
|
ftp = conn.open_sftp()
|
||||||
|
ftp.put(self.module_args[0], self.module_args[1])
|
||||||
|
ftp.close()
|
||||||
|
return [ host, 1 ]
|
||||||
|
|
||||||
return [ host, result ]
|
return [ host, result ]
|
||||||
|
|
||||||
def _command(self, outpath):
|
def _command(self, outpath):
|
||||||
cmd = "%s %s" % (outpath, self.module_args)
|
cmd = "%s %s" % (outpath, " ".join(self.module_args))
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
def _exec_command(self, conn, cmd):
|
def _exec_command(self, conn, cmd):
|
||||||
|
|
1
library/copy
Normal file
1
library/copy
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# copy is built-in to ansible's core, so the module here is just a placeholder
|
Loading…
Reference in a new issue