“None” resource which does.. nothing!

https://blueprints.launchpad.net/heat/+spec/noop-resource

Add a “None” resource, intended to simplify mapping resource_registry entries to an implemention which always passes, but does nothing.

Problem description

Currently, in a large tree of composable nested templates, controlled by a number of rigidly defined parent templates, there is often the need to provide optional interfaces where extra logic may be linked in.

Simplified example derived from TripleO (this pattern is repeated in several places):

resource_registry:
  OS::TripleO::Controller:  foo/controller.yaml
  OS::TripleO::ControllerExtraConfig: noop.yaml

Here we have a nested template which creates a “controller” node, and does some standard configuration. Then, in some circumstances, we want to hook in some extra configuration steps, or provide an interface which enables that.

resources:
  controller:
    type: OS::TripleO::Controller
    properties:
      aproperty: 123

  extra_config:
    type: OS::TripleO::ControllerExtraConfig
    properties:
      server: {get_resource: controller}

The ExtraConfig “noop.yaml” implementation is just an empty template which takes the “server” parameter.

It would be nice to avoid having these “noop” templates duplicated, when all they do is duplicate the interface expected for a “real” implementation, you end up with multiple noop.yaml files with different parameters/outputs which is inconvenient and error prone.

Proposed change

Add an OS::Heat::None resource, which replaces the noop.yaml

resource_registry:
  OS::TripleO::Controller:  foo/controller.yaml
  OS::TripleO::ControllerExtraConfig: OS::Heat::None

This resource will accept any properties, and return any attribute (as None).

Alternatives

The alternative is for template authors wishing to provide interfaces for optional additional functionality to keep maintaining multiple templates which actually do nothing, such as is happening in TripleO at the moment.

Implementation

Assignee(s)

Primary assignee:

shardy

Milestones

Target Milestone for completion:

liberty-2

Work Items

Changes to engine:
  • Implement noop resource and tests.

Documentation changes:
  • Ensure docstrings are present in code so template guide is updated.

Dependencies

None