def set_fact(self, state_data, api, node_id, **kwargs): reply_data = {} key, value = kwargs['key'], kwargs['value'] # if the fact exists, update it, else create it. oldkeys = api._model_query('facts', 'node_id=%s and key=%s' % (node_id, key)) _by_key = dict([[x['key'], x['value']] for x in oldkeys]) if key in _by_key and _by_key[key] == value: # we dont' need to set the value, merely apply it -- no rollback return self.apply_fact(state_data, api, node_id, **kwargs) elif key in _by_key: reply_data['rollback'] = {'primitive': 'node.set_fact', 'ns': {'key': key, 'value': _by_key[key]}} if len(oldkeys) > 0: # update api._model_update_by_id('facts', {'id': oldkeys[0]['id'], 'value': value}) else: api._model_create('facts', {'node_id': node_id, 'key': key, 'value': value}) return self._ok(data=reply_data)
def set_attr(self, state_data, api, node_id, **kwargs): reply_data = {} key, value = kwargs['key'], kwargs['value'] oldkeys = api._model_query('facts', 'node_id=%s and key=%s' % (node_id, key)) _by_key = dict([[x['key'], x['value']] for x in oldkeys]) if key in _by_key: reply_data['rollback'] = {'primitive': 'node.set_attr', 'ns': {'key': key, 'value': _by_key[key]}} api._model_create('attrs', {"node_id": node_id, 'key': key, 'value': value}) return self._ok(data=reply_data)