Browse Source

Inspector rules API does not return all attributes

When using the Inspector rules API to query existing introspection
rules, inspector does not return 'invert' or 'multiple' attributes of
conditions associated with the rules.

Change-Id: I08606cea676ecf57bbb3b73077c4832240fbe0d2
Closes-Bug: #1670372
changes/76/442876/9
Annie Lezil 6 years ago committed by dparalen
parent
commit
33a28f34f8
  1. 1
      doc/source/http-api.rst
  2. 2
      ironic_inspector/db.py
  3. 2
      ironic_inspector/main.py
  4. 14
      ironic_inspector/test/functional.py
  5. 23
      ironic_inspector/test/unit/test_rules.py
  6. 5
      releasenotes/notes/Inspector_rules_API_does_not_return_all_attributes-98a9765726c405d5.yaml

1
doc/source/http-api.rst

@ -397,3 +397,4 @@ Version History
are requested, API gets HTTP 400 response.
* **1.10** adds node state to the GET /v1/introspection/<Node ID> and
GET /v1/introspection API response data.
* **1.11** adds invert&multiple fields into rules response data

2
ironic_inspector/db.py

@ -112,6 +112,8 @@ class RuleCondition(Base):
res = self.params.copy()
res['op'] = self.op
res['field'] = self.field
res['multiple'] = self.multiple
res['invert'] = self.invert
return res

2
ironic_inspector/main.py

@ -51,7 +51,7 @@ MINIMUM_API_VERSION = (1, 0)
# TODO(dtantsur): set to the current version as soon we move setting IPMI
# credentials support completely.
DEFAULT_API_VERSION = (1, 8)
CURRENT_API_VERSION = (1, 10)
CURRENT_API_VERSION = (1, 11)
_LOGGING_EXCLUDED_KEYS = ('logs',)

14
ironic_inspector/test/functional.py

@ -43,6 +43,7 @@ from ironic_inspector import main
from ironic_inspector import node_cache
from ironic_inspector import rules
from ironic_inspector.test import base
from ironic_inspector.test.unit import test_rules
CONF = """
@ -393,9 +394,16 @@ class Test(Base):
res = self.call_list_rules()
self.assertEqual([], res)
rule = {'conditions': [],
'actions': [{'action': 'fail', 'message': 'boom'}],
'description': 'Cool actions'}
rule = {
'conditions': [
test_rules.BaseTest.condition_defaults(
{'op': 'eq', 'field': 'memory_mb', 'value': 1024}
)
],
'actions': [{'action': 'fail', 'message': 'boom'}],
'description': 'Cool actions'
}
res = self.call_add_rule(rule)
self.assertTrue(res['uuid'])
rule['uuid'] = res['uuid']

23
ironic_inspector/test/unit/test_rules.py

@ -13,7 +13,6 @@
# under the License.
"""Tests for introspection rules."""
import mock
from oslo_utils import uuidutils
@ -41,6 +40,13 @@ class BaseTest(test_base.NodeTest):
'local_gb': 42,
}
@staticmethod
def condition_defaults(condition):
condition = condition.copy()
condition.setdefault('multiple', 'any')
condition.setdefault('invert', False)
return condition
class TestCreateRule(BaseTest):
def test_only_actions(self):
@ -60,12 +66,22 @@ class TestCreateRule(BaseTest):
uuid=self.uuid)
def test_with_conditions(self):
self.conditions_json.extend([
# multiple present&default, invert absent
{'op': 'eq', 'field': 'local_gb', 'value': 60, 'multiple': 'any'},
# multiple absent, invert present&default
{'op': 'eq', 'field': 'local_gb', 'value': 60, 'invert': False},
# multiple&invert present&non-default
{'op': 'eq', 'field': 'memory_mb', 'value': 1024,
'multiple': 'all', 'invert': True},
])
rule = rules.create(self.conditions_json, self.actions_json)
rule_json = rule.as_dict()
self.assertTrue(rule_json.pop('uuid'))
self.assertEqual({'description': None,
'conditions': self.conditions_json,
'conditions': [BaseTest.condition_defaults(cond)
for cond in self.conditions_json],
'actions': self.actions_json},
rule_json)
@ -140,7 +156,8 @@ class TestGetRule(BaseTest):
self.assertTrue(rule_json.pop('uuid'))
self.assertEqual({'description': None,
'conditions': self.conditions_json,
'conditions': [BaseTest.condition_defaults(cond)
for cond in self.conditions_json],
'actions': self.actions_json},
rule_json)

5
releasenotes/notes/Inspector_rules_API_does_not_return_all_attributes-98a9765726c405d5.yaml

@ -0,0 +1,5 @@
---
features:
- |
Querying **inspector** rules API now also returns the ``invert`` and
``multiple`` attributes of the associated conditions.
Loading…
Cancel
Save