Пример #1
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)
Пример #2
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)