Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)