diff --git a/confluent_client/bin/nodeboot b/confluent_client/bin/nodeboot index ee1f4eba..f8aa1adf 100755 --- a/confluent_client/bin/nodeboot +++ b/confluent_client/bin/nodeboot @@ -61,11 +61,12 @@ if options.biosmode: else: bootmode = 'uefi' +errnodes = set([]) rc = session.simple_noderange_command(noderange, '/boot/nextdevice', bootdev, bootmode=bootmode, - persistent=options.persist) - -if rc: - sys.exit(rc) -else: - sys.exit(session.simple_noderange_command(noderange, '/power/state', 'boot')) \ No newline at end of file + persistent=options.persist, + errnodes=errnodes) +if errnodes: + noderange = noderange + ',-(' + ','.join(errnodes) + ')' +rc |= session.simple_noderange_command(noderange, '/power/state', 'boot') +sys.exit(rc) diff --git a/confluent_client/confluent/client.py b/confluent_client/confluent/client.py index 1936ab89..f9283dd0 100644 --- a/confluent_client/confluent/client.py +++ b/confluent_client/confluent/client.py @@ -77,7 +77,7 @@ class Command(object): def add_precede_key(self, keyname): self._prevkeyname = keyname - def handle_results(self, ikey, rc, res): + def handle_results(self, ikey, rc, res, errnodes=None): if 'error' in res: sys.stderr.write('Error: {0}\n'.format(res['error'])) if 'errorcode' in res: @@ -89,6 +89,8 @@ class Command(object): res = res['databynode'] for node in res: if 'error' in res[node]: + if errnodes is not None: + errnodes.add(node) sys.stderr.write('{0}: Error: {1}\n'.format( node, res[node]['error'])) if 'errorcode' in res[node]: @@ -110,7 +112,7 @@ class Command(object): return rc def simple_noderange_command(self, noderange, resource, input=None, - key=None, **kwargs): + key=None, errnodes=None, **kwargs): try: rc = 0 if resource[0] == '/': @@ -123,12 +125,12 @@ class Command(object): if input is None: for res in self.read('/noderange/{0}/{1}'.format( noderange, resource)): - rc = self.handle_results(ikey, rc, res) + rc = self.handle_results(ikey, rc, res, errnodes) else: kwargs[ikey] = input for res in self.update('/noderange/{0}/{1}'.format( noderange, resource), kwargs): - rc = self.handle_results(ikey, rc, res) + rc = self.handle_results(ikey, rc, res, errnodes) return rc except KeyboardInterrupt: print('') diff --git a/confluent_server/confluent/discovery/core.py b/confluent_server/confluent/discovery/core.py index b2c6ff4f..e8fd1fa9 100644 --- a/confluent_server/confluent/discovery/core.py +++ b/confluent_server/confluent/discovery/core.py @@ -608,7 +608,7 @@ def eval_node(cfg, handler, info, nodename, manual=False): # search for nodes fitting our description using filters # lead with the most specific to have a small second pass nl = cfg.filter_node_attributes( - 'enclosure.bay=' + info['enclosure.bay'], nl) + 'enclosure.bay={0}'.format(info['enclosure.bay']), nl) nl = list(nl) if len(nl) != 1: info['discofailure'] = 'ambigconfig' diff --git a/confluent_server/confluent/discovery/handlers/xcc.py b/confluent_server/confluent/discovery/handlers/xcc.py index 1337f33a..de80b9f2 100644 --- a/confluent_server/confluent/discovery/handlers/xcc.py +++ b/confluent_server/confluent/discovery/handlers/xcc.py @@ -58,7 +58,7 @@ class NodeHandler(bmchandler.NodeHandler): '/v2/cmm/sp/7') if not bayid: return - self.info['enclosure.bay'] = bayid + self.info['enclosure.bay'] = int(bayid) smmid = ipmicmd._oem.immhandler.get_property( '/v2/ibmc/smm/chassis/uuid') if not smmid: diff --git a/confluent_server/confluent/util.py b/confluent_server/confluent/util.py index 5e2d6e1e..3e41bd86 100644 --- a/confluent_server/confluent/util.py +++ b/confluent_server/confluent/util.py @@ -121,8 +121,9 @@ class TLSCertVerifier(object): fingerprint = get_fingerprint(certificate) storedprint = self.cfm.get_node_attributes(self.node, (self.fieldname,) ) - if self.fieldname not in storedprint[self.node]: # no stored value, check - # policy for next action + if (self.fieldname not in storedprint[self.node] or + storedprint[self.node][self.fieldname]['value'] == ''): + # no stored value, check policy for next action newpolicy = self.cfm.get_node_attributes(self.node, ('pubkeys.addpolicy',)) if ('pubkeys.addpolicy' in newpolicy[self.node] and