def do_new(self, context, *args): "usage: new [<shadow_cib>] [withstatus] [force] [empty]" argl = list(args) opt_l = utils.fetch_opts(argl, ["force", "--force", "withstatus", "empty"]) if len(argl) > 1: context.fatal_error("Unexpected argument(s): " + ','.join(argl)) name = None if argl: name = argl[0] if not utils.is_filename_sane(name): context.fatal_error("Bad filename: " + name) if name in (vars.tmp_cib_prompt, vars.live_cib_prompt): context.fatal_error("Shadow name '%s' is not allowed" % (name)) del argl[0] vars.tmp_cib = False else: fd, fname = tmpfiles.create(dir=xmlutil.cib_shadow_dir(), prefix="shadow.crmsh_") name = os.path.basename(fname).replace("shadow.", "") vars.tmp_cib = True if "empty" in opt_l: new_cmd = "%s -e '%s'" % (self.extcmd, name) else: new_cmd = "%s -c '%s'" % (self.extcmd, name) if vars.tmp_cib or config.core.force or "force" in opt_l or "--force" in opt_l: new_cmd = "%s --force" % new_cmd if utils.ext_cmd(new_cmd) == 0: context.info("%s shadow CIB created" % name) self.do_use(context, name) if "withstatus" in opt_l: cib_status.load("shadow:%s" % name)
def pull_configuration(from_node): ''' Copy the configuration from the given node to this node ''' local_path = conf() _, fname = tmpfiles.create() print "Retrieving %s:%s..." % (from_node, local_path) cmd = [ 'scp', '-qC', '-o', 'PasswordAuthentication=no', '-o', 'StrictHostKeyChecking=no', '%s:%s' % (from_node, local_path), fname ] rc = utils.ext_cmd_nosudo(cmd, shell=False) if rc == 0: data = open(fname).read() newhash = hash(data) if os.path.isfile(local_path): oldata = open(local_path).read() oldhash = hash(oldata) if newhash == oldhash: print "No change." return print "Writing %s..." local_file = open(local_path, 'w') local_file.write(data) local_file.close() else: raise ValueError("Failed to retrieve %s from %s" % (local_path, from_node))