def main(): parser = OptionParser() parser.add_option("-u", "--username", default="root", help="username for new server, defaults to %default") parser.add_option("-p", "--password", dest="password", help="password for new server") parser.add_option("-H", "--hostname", dest="hostname", help="hostname or ip of new server") (options, args) = parser.parse_args() # begin hackery to load config file until littlechef gets fixed (04DEC2012) ### CHANGE THE ssh_config VALUE AS NEEDED ### ssh_config = "~/.ssh/chef.config" lc.env.use_ssh_config = True lc.env.ssh_config = _SSHConfig() lc.env.ssh_config_path = os.path.expanduser(ssh_config) lc.env.user = options.username lc.env.password = options.password lc.env.host_string = options.hostname lc.env.host = options.hostname lc.env.node_work_path = "/tmp/chef-solo" lc.env.follow_symlinks = False ### CHANGE THIS TO POINT TO WHERE YOU SAVED THE FILE ### lc.env.encrypted_data_bag_secret = "/etc/chef/data_bag_secret_key.txt" # We need the ohai plugins installed before running Chef lc.plugin("install_omnibus_chef") lc.node(options.hostname)
def _readconfig(): """Configure environment""" # Check that all dirs and files are present in_a_kitchen, missing = _check_appliances() missing_str = lambda m: ' and '.join(', '.join(m).rsplit(', ', 1)) if not in_a_kitchen: msg = "Couldn't find {0}. ".format(missing_str(missing)) msg += "Are you are executing 'fix' outside of a kitchen?\n"\ "To create a new kitchen in the current directory "\ " type 'fix new_kitchen'" abort(msg) config = ConfigParser.ConfigParser() config.read("auth.cfg") # We expect an ssh_config file here, # and/or a user, (password/keyfile) pair env.ssh_config = None try: ssh_config = config.get('userinfo', 'ssh-config') except ConfigParser.NoSectionError: msg = 'You need to define a "userinfo" section' msg += ' in auth.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) except ConfigParser.NoOptionError: ssh_config = None if ssh_config: env.ssh_config = _SSHConfig() try: env.ssh_config.parse(open(os.path.expanduser(ssh_config))) except IOError: msg = "Couldn't open the ssh-config file '{0}'".format(ssh_config) abort(msg) except Exception: msg = "Couldn't parse the ssh-config file '{0}'".format(ssh_config) abort(msg) try: env.user = config.get('userinfo', 'user') user_specified = True except ConfigParser.NoOptionError: if not ssh_config: msg = 'You need to define a user in the "userinfo" section' msg += ' of auth.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) user_specified = False try: env.password = config.get('userinfo', 'password') or None except ConfigParser.NoOptionError: pass try: #If keypair-file is empty, assign None or fabric will try to read key " env.key_filename = config.get('userinfo', 'keypair-file') or None except ConfigParser.NoOptionError: pass if user_specified and not env.password and not env.ssh_config: abort('You need to define a password or a ssh-config file in auth.cfg.')
def _readconfig(): """Configures environment variables""" config = ConfigParser.SafeConfigParser() try: found = config.read([littlechef.CONFIGFILE, 'auth.cfg']) except ConfigParser.ParsingError as e: abort(str(e)) if not len(found): abort('No config.cfg file found in the current directory') in_a_kitchen, missing = _check_appliances() missing_str = lambda m: ' and '.join(', '.join(m).rsplit(', ', 1)) if not in_a_kitchen: msg = "Couldn't find {0}. ".format(missing_str(missing)) msg += "Are you are executing 'fix' outside of a kitchen?\n"\ "To create a new kitchen in the current directory "\ " type 'fix new_kitchen'" abort(msg) # We expect an ssh_config file here, # and/or a user, (password/keyfile) pair env.ssh_config = None try: ssh_config = config.get('userinfo', 'ssh-config') except ConfigParser.NoSectionError: msg = 'You need to define a "userinfo" section' msg += ' in config.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) except ConfigParser.NoOptionError: ssh_config = None if ssh_config: env.ssh_config = _SSHConfig() env.ssh_config_path = os.path.expanduser(ssh_config) env.use_ssh_config = True try: env.ssh_config.parse(open(env.ssh_config_path)) except IOError: msg = "Couldn't open the ssh-config file '{0}'".format(ssh_config) abort(msg) except Exception: msg = "Couldn't parse the ssh-config file '{0}'".format(ssh_config) abort(msg) try: env.user = config.get('userinfo', 'user') user_specified = True except ConfigParser.NoOptionError: if not ssh_config: msg = 'You need to define a user in the "userinfo" section' msg += ' of config.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) user_specified = False try: env.password = config.get('userinfo', 'password') or None except ConfigParser.NoOptionError: pass try: #If keypair-file is empty, assign None or fabric will try to read key " env.key_filename = config.get('userinfo', 'keypair-file') or None except ConfigParser.NoOptionError: pass if user_specified and not env.password and not env.ssh_config: abort('You need to define a password or a ssh-config file in config.cfg') # Node's Chef Solo working directory for storing cookbooks, roles, etc. try: env.node_work_path = os.path.expanduser(config.get('kitchen', 'node_work_path')) except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): env.node_work_path = littlechef.node_work_path else: if not env.node_work_path: abort('The "node_work_path" option cannot be empty') # Follow symlinks try: env.follow_symlinks = config.getboolean('kitchen', 'follow_symlinks') except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): env.follow_symlinks = False
def _readconfig(): """Configures environment variables""" config = ConfigParser.SafeConfigParser() try: found = config.read([littlechef.CONFIGFILE, 'auth.cfg']) except ConfigParser.ParsingError as e: abort(str(e)) if not len(found): abort('No config.cfg file found in the current directory') in_a_kitchen, missing = _check_appliances() missing_str = lambda m: ' and '.join(', '.join(m).rsplit(', ', 1)) if not in_a_kitchen: msg = "Couldn't find {0}. ".format(missing_str(missing)) msg += "Are you are executing 'fix' outside of a kitchen?\n"\ "To create a new kitchen in the current directory "\ " type 'fix new_kitchen'" abort(msg) # We expect an ssh_config file here, # and/or a user, (password/keyfile) pair env.ssh_config = None try: ssh_config = config.get('userinfo', 'ssh-config') except ConfigParser.NoSectionError: msg = 'You need to define a "userinfo" section' msg += ' in config.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) except ConfigParser.NoOptionError: ssh_config = None if ssh_config: env.ssh_config = _SSHConfig() env.ssh_config_path = os.path.expanduser(ssh_config) env.use_ssh_config = True try: env.ssh_config.parse(open(env.ssh_config_path)) except IOError: msg = "Couldn't open the ssh-config file '{0}'".format(ssh_config) abort(msg) except Exception: msg = "Couldn't parse the ssh-config file '{0}'".format(ssh_config) abort(msg) try: env.user = config.get('userinfo', 'user') user_specified = True except ConfigParser.NoOptionError: if not ssh_config: msg = 'You need to define a user in the "userinfo" section' msg += ' of config.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) user_specified = False try: env.password = config.get('userinfo', 'password') or None except ConfigParser.NoOptionError: pass try: #If keypair-file is empty, assign None or fabric will try to read key " env.key_filename = config.get('userinfo', 'keypair-file') or None except ConfigParser.NoOptionError: pass if user_specified and not env.password and not env.ssh_config: abort( 'You need to define a password or a ssh-config file in config.cfg') # Node's Chef Solo working directory for storing cookbooks, roles, etc. try: env.node_work_path = os.path.expanduser( config.get('kitchen', 'node_work_path')) except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): env.node_work_path = littlechef.node_work_path else: if not env.node_work_path: abort('The "node_work_path" option cannot be empty') # Follow symlinks try: env.follow_symlinks = config.getboolean('kitchen', 'follow_symlinks') except (ConfigParser.NoSectionError, ConfigParser.NoOptionError): env.follow_symlinks = False
def _readconfig(): """Configure environment""" # Check that all dirs and files are present in_a_kitchen, missing = _check_appliances() missing_str = lambda m: ' and '.join(', '.join(m).rsplit(', ', 1)) if not in_a_kitchen: msg = "Couldn't find {0}. ".format(missing_str(missing)) msg += "Are you are executing 'fix' outside of a kitchen?\n"\ "To create a new kitchen in the current directory "\ " type 'fix new_kitchen'" abort(msg) config = ConfigParser.ConfigParser() config.read("auth.cfg") # We expect an ssh_config file here, # and/or a user, (password/keyfile) pair env.ssh_config = None try: ssh_config = config.get('userinfo', 'ssh-config') except ConfigParser.NoSectionError: msg = 'You need to define a "userinfo" section' msg += ' in auth.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) except ConfigParser.NoOptionError: ssh_config = None if ssh_config: env.ssh_config = _SSHConfig() try: env.ssh_config.parse(open(os.path.expanduser(ssh_config))) except IOError: msg = "Couldn't open the ssh-config file '{0}'".format(ssh_config) abort(msg) except Exception: msg = "Couldn't parse the ssh-config file '{0}'".format(ssh_config) abort(msg) try: env.user = config.get('userinfo', 'user') user_specified = True except ConfigParser.NoOptionError: if not ssh_config: msg = 'You need to define a user in the "userinfo" section' msg += ' of auth.cfg. Refer to the README for help' msg += ' (http://github.com/tobami/littlechef)' abort(msg) user_specified = False try: env.password = config.get('userinfo', 'password') or None except ConfigParser.NoOptionError: pass try: #If keypair-file is empty, assign None or fabric will try to read key " env.key_filename = config.get('userinfo', 'keypair-file') or None except ConfigParser.NoOptionError: pass if user_specified and not env.password and not env.ssh_config: abort( 'You need to define a password or a ssh-config file in auth.cfg.')