forked from ungleich-public/cdist
		
	Inspect and add by default ssh multiplexing options.
This commit is contained in:
		
					parent
					
						
							
								2dfc30e3c4
							
						
					
				
			
			
				commit
				
					
						215e58eb38
					
				
			
		
					 1 changed files with 32 additions and 0 deletions
				
			
		| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
# -*- coding: utf-8 -*-
 | 
					# -*- coding: utf-8 -*-
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2010-2013 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2010-2013 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
 | 
					# 2016 Darko Poljak (darko.poljak at gmail.com)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -20,6 +21,32 @@
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def inspect_ssh_mux_opts():
 | 
				
			||||||
 | 
					    """Inspect whether or not ssh supports multiplexing options"""
 | 
				
			||||||
 | 
					    wanted_mux_opts = {
 | 
				
			||||||
 | 
					        "ControlPath":"~/.ssh/master-%l-%r@%h:%p",
 | 
				
			||||||
 | 
					        "ControlMaster":"auto",
 | 
				
			||||||
 | 
					        "ControlPersist":"125",
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    # if checked key option is present then this assumes
 | 
				
			||||||
 | 
					    # all options in value are present
 | 
				
			||||||
 | 
					    check = {
 | 
				
			||||||
 | 
					        "ControlMaster": ("ControlMaster", "ControlPath"),
 | 
				
			||||||
 | 
					        "ControlPersist": ("ControlPersist",),
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    mux_opts = {}
 | 
				
			||||||
 | 
					    for x in check:
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            subprocess.check_output("ssh -o {}".format(x),
 | 
				
			||||||
 | 
					                    stderr=subprocess.STDOUT)
 | 
				
			||||||
 | 
					        except subprocess.CalledProcessError as e:
 | 
				
			||||||
 | 
					            foo = e.output.decode().lower()
 | 
				
			||||||
 | 
					            if not "bad configuration option" in foo:
 | 
				
			||||||
 | 
					                for o in check[x]:
 | 
				
			||||||
 | 
					                    mux_opts[o] = wanted_mux_opts[o]
 | 
				
			||||||
 | 
					    foo = ["-o {}={}".format(x, mux_opts[x]) for x in mux_opts]
 | 
				
			||||||
 | 
					    return " ".join(foo)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def commandline():
 | 
					def commandline():
 | 
				
			||||||
    """Parse command line"""
 | 
					    """Parse command line"""
 | 
				
			||||||
    import argparse
 | 
					    import argparse
 | 
				
			||||||
| 
						 | 
					@ -53,6 +80,11 @@ def commandline():
 | 
				
			||||||
    parser['banner'].set_defaults(func=cdist.banner.banner)
 | 
					    parser['banner'].set_defaults(func=cdist.banner.banner)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Config
 | 
					    # Config
 | 
				
			||||||
 | 
					    # inspect multiplexing options for default remote copy/exec scp/ssh
 | 
				
			||||||
 | 
					    MUX_OPTS = inspect_ssh_mux_opts()
 | 
				
			||||||
 | 
					    cdist.REMOTE_EXEC += MUX_OPTS
 | 
				
			||||||
 | 
					    cdist.REMOTE_COPY += MUX_OPTS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    parser['config'] = parser['sub'].add_parser('config',
 | 
					    parser['config'] = parser['sub'].add_parser('config',
 | 
				
			||||||
        parents=[parser['loglevel']])
 | 
					        parents=[parser['loglevel']])
 | 
				
			||||||
    parser['config'].add_argument('host', nargs='+',
 | 
					    parser['config'].add_argument('host', nargs='+',
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue