mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 17:33:54 +00:00
commit
7cb424ea98
@ -19,6 +19,7 @@ import getpass
|
||||
import logging
|
||||
import optparse
|
||||
import traceback
|
||||
import yaml
|
||||
from functools import partial
|
||||
|
||||
# Import salt libs
|
||||
@ -272,6 +273,109 @@ class MergeConfigMixIn(object):
|
||||
self.config[option.dest])
|
||||
|
||||
|
||||
class SaltfileMixIn(object):
|
||||
__metaclass__ = MixInMeta
|
||||
_mixin_prio_ = -20
|
||||
|
||||
def _mixin_setup(self):
|
||||
self.add_option(
|
||||
'--saltfile', default=None,
|
||||
help='Specify the path to a Saltfile. If not passed, on will be '
|
||||
'searched for in the current working directory'
|
||||
)
|
||||
|
||||
def process_saltfile(self):
|
||||
if self.options.saltfile is None:
|
||||
# No one passed a Saltfile as an option, environment variable!?
|
||||
self.options.saltfile = os.environ.get('SALT_SALTFILE', None)
|
||||
|
||||
if self.options.saltfile is None:
|
||||
# If we're here, no one passed a Saltfile either to the CLI tool or
|
||||
# as an environment variable.
|
||||
# Is there a Saltfile in the current directory?
|
||||
saltfile = os.path.join(os.getcwd(), 'Saltfile')
|
||||
if os.path.isfile(saltfile):
|
||||
self.options.saltfile = saltfile
|
||||
|
||||
if not self.options.saltfile:
|
||||
# There's still no valid Saltfile? No need to continue...
|
||||
return
|
||||
|
||||
if not os.path.isfile(self.options.saltfile):
|
||||
self.error(
|
||||
'{0!r} file does not exist.\n'.format(self.options.saltfile
|
||||
)
|
||||
)
|
||||
|
||||
# Make sure we have an absolute path
|
||||
self.options.saltfile = os.path.abspath(self.options.saltfile)
|
||||
|
||||
# Make sure we let the user know that we will be loading a Saltfile
|
||||
logging.getLogger(__name__).info(
|
||||
'Loading Saltfile from {0!r}'.format(self.options.saltfile)
|
||||
)
|
||||
|
||||
saltfile_config = config._read_conf_file(saltfile)
|
||||
|
||||
if not saltfile_config:
|
||||
# No configuration was loaded from the Saltfile
|
||||
return
|
||||
|
||||
if self.get_prog_name() not in saltfile_config:
|
||||
# There's no configuration specific to the CLI tool. Stop!
|
||||
return
|
||||
|
||||
# We just want our own configuration
|
||||
cli_config = saltfile_config[self.get_prog_name()]
|
||||
|
||||
# If there are any options, who's names match any key from the loaded
|
||||
# Saltfile, we need to update it's default value
|
||||
for option in self.option_list:
|
||||
if option.dest is None:
|
||||
# --version does not have dest attribute set for example.
|
||||
continue
|
||||
|
||||
if option.dest not in cli_config:
|
||||
# If we don't have anything in Saltfile for this option, let's
|
||||
# continue processing right now
|
||||
continue
|
||||
|
||||
# Get the passed value from shell. If empty get the default one
|
||||
default = self.defaults.get(option.dest)
|
||||
value = getattr(self.options, option.dest, default)
|
||||
if value != default:
|
||||
# The user passed an argument, we won't override it with the
|
||||
# one from Saltfile, if any
|
||||
continue
|
||||
|
||||
# We reched this far! Set the Saltfile value on the option
|
||||
setattr(self.options, option.dest, cli_config[option.dest])
|
||||
|
||||
# Let's also search for options referred in any option groups
|
||||
for group in self.option_groups:
|
||||
for option in group.option_list:
|
||||
if option.dest is None:
|
||||
continue
|
||||
|
||||
if option.dest not in cli_config:
|
||||
# If we don't have anything in Saltfile for this option,
|
||||
# let's continue processing right now
|
||||
continue
|
||||
|
||||
# Get the passed value from shell. If empty get the default one
|
||||
default = self.defaults.get(option.dest)
|
||||
value = getattr(self.options, option.dest, default)
|
||||
if value != default:
|
||||
# The user passed an argument, we won't override it with
|
||||
# the one from Saltfile, if any
|
||||
continue
|
||||
|
||||
if option.dest in cli_config:
|
||||
setattr(self.options,
|
||||
option.dest,
|
||||
cli_config[option.dest])
|
||||
|
||||
|
||||
class ConfigDirMixIn(object):
|
||||
__metaclass__ = MixInMeta
|
||||
_mixin_prio_ = -10
|
||||
@ -300,7 +404,9 @@ class ConfigDirMixIn(object):
|
||||
self.options.config_dir = os.path.abspath(self.options.config_dir)
|
||||
|
||||
if hasattr(self, 'setup_config'):
|
||||
self.config = self.setup_config()
|
||||
if not hasattr(self, 'config'):
|
||||
self.config = {}
|
||||
self.config.update(self.setup_config())
|
||||
|
||||
def get_config_file_path(self, configfile=None):
|
||||
if configfile is None:
|
||||
@ -2023,7 +2129,7 @@ class SaltRunOptionParser(OptionParser, ConfigDirMixIn, MergeConfigMixIn,
|
||||
|
||||
class SaltSSHOptionParser(OptionParser, ConfigDirMixIn, MergeConfigMixIn,
|
||||
LogLevelMixIn, TargetOptionsMixIn,
|
||||
OutputOptionsMixIn):
|
||||
OutputOptionsMixIn, SaltfileMixIn):
|
||||
__metaclass__ = OptionParserMeta
|
||||
|
||||
usage = '%prog [options]'
|
||||
@ -2081,7 +2187,7 @@ class SaltSSHOptionParser(OptionParser, ConfigDirMixIn, MergeConfigMixIn,
|
||||
help='Set the number of concurrent minions to communicate with. '
|
||||
'This value defines how many processes are opened up at a '
|
||||
'time to manage connections, the more running processes the '
|
||||
'faster communication should be, default is 25')
|
||||
'faster communication should be, default is %default')
|
||||
self.add_option(
|
||||
'-i',
|
||||
'--ignore-host-keys',
|
||||
|
Loading…
Reference in New Issue
Block a user