def del_attr(self, state_data, api, node_id, **kwargs): """ delete an existing node attribute required kwargs: key: key of attr to delete """ if not 'key' in kwargs: return self._fail(msg='need either "key" kwarg') old_attr = None old_attr = api._model_query( 'attrs', 'node_id=%d and key="%s"' % (int(node_id), kwargs['key'])) if old_attr is None: return self._ok() old_attr = old_attr[0] api._model_delete_by_id('attrs', old_attr['id']) reply_data = { 'rollback': { 'primitive': 'node.set_attr', 'ns': { 'key': old_attr['key'], 'value': old_attr['value']}}} return self._ok(data=reply_data)
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 del_fact(self, state_data, api, node_id, **kwargs): """ delete an existing fact. required kwargs: key: key of fact to delete """ if not 'key' in kwargs: return self._fail(msg='need "key" kwarg') old_fact = None old_fact = api._model_query( 'facts', 'node_id=%d and key="%s"' % (int(node_id), kwargs['key'])) if old_fact is None: return self._ok() # no rollback necessary old_fact = old_fact[0] api._model_delete_by_id('facts', old_fact['id']) reply_data = { 'rollback': { 'primitive': 'node.set_fact', 'ns': { 'key': old_fact['key'], 'value': old_fact['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)