Fix resources allocation in documentation

Allocation of contributed resources generates
incorrectly, so this patch fixes res allocation.
Now contributed resources are in Contributed Heat
Resource Types page and integrated are in OpenStack
Resource Types page. Escaping from using env because
of all_resources loaded from PluginMapping.

Change-Id: I6d7c501f231c546f909c3ed7f19fc8d1fc04e927
Closes-bug: #1433675
changes/10/166110/10
Peter Razumovsky 8 years ago
parent 17dc00ce33
commit a871b70be9
  1. 41
      contrib/heat_keystone/heat_keystone/resources/group.py
  2. 32
      contrib/heat_keystone/heat_keystone/resources/project.py
  3. 17
      contrib/heat_keystone/heat_keystone/resources/role.py
  4. 61
      contrib/heat_keystone/heat_keystone/resources/user.py
  5. 6
      contrib/rackspace/rackspace/resources/cloud_server.py
  6. 106
      doc/source/ext/resources.py
  7. 2
      doc/source/template_guide/cfn.rst
  8. 21
      doc/source/template_guide/contrib.rst
  9. 2
      doc/source/template_guide/openstack.rst

@ -20,46 +20,7 @@ from heat.engine import support
class KeystoneGroup(role_assignments.KeystoneRoleAssignment):
'''
Heat Template Resource for Keystone Group.
heat_template_version: 2013-05-23
description: Sample Keystone Group template
parameters:
group_name:
type: string
description: Keystone group name
group_description:
type: string
description: Keystone group description
group_domain:
type: string
description: Keystone group domain name
group_role:
type: string
description: role
group_role_domain:
type: string
description: group role domain
group_role_project:
type: string
description: group role project
resources:
admin_group:
type: OS::Keystone::Group
properties:
name: {get_param: group_name}
domain: {get_param: group_domain}
description: {get_param: group_description}
roles:
- role: {get_param: group_role}
domain: {get_param: group_role_domain}
- role: {get_param: group_role}
project: {get_param: group_role_project}
'''
"""Heat Template Resource for Keystone Group."""
support_status = support.SupportStatus(
version='2015.1',

@ -19,37 +19,7 @@ from heat.engine import support
class KeystoneProject(resource.Resource):
'''
Heat Template Resource for Keystone Project.
heat_template_version: 2013-05-23
description: Sample Keystone Project template
parameters:
project_name:
type: string
description: Keystone project name
project_description:
type: string
description: Keystone project description
project_enabled:
type: boolean
description: Keystone project is enabled or disabled
project_domain:
type: string
description: Keystone project domain name or id
resources:
admin_project:
type: OS::Keystone::Project
properties:
name: {get_param: project_name}
domain: {get_param: project_domain}
description: {get_param: project_description}
enabled: {get_param: project_enabled}
'''
"""Heat Template Resource for Keystone Project."""
support_status = support.SupportStatus(
version='2015.1',

@ -18,22 +18,7 @@ from heat.engine import support
class KeystoneRole(resource.Resource):
'''
Heat Template Resource for Keystone Role.
heat_template_version: 2013-05-23
parameters:
role_name:
type: string
description: Keystone role name
resources:
sample_role:
type: OS::Keystone::Role
properties:
name: {get_param: role_name}
'''
"""Heat Template Resource for Keystone Role."""
support_status = support.SupportStatus(
version='2015.1',

@ -20,66 +20,7 @@ from heat.engine import support
class KeystoneUser(role_assignments.KeystoneRoleAssignment):
'''
Heat Template Resource for Keystone User.
heat_template_version: 2013-05-23
description: Sample Keystone User template
parameters:
user_name:
type: string
description: Keystone user name
user_description:
type: string
description: Keystone user description
user_enabled:
type: boolean
description: Keystone user is enabled or disabled
user_domain:
type: string
description: Keystone user domain name
user_email:
type: string
description: Keystone user email address
user_password:
type: string
description: Keystone user password
user_default_project:
type: string
description: Keystone user default project id
user_groups:
type: comma_delimited_list
description: Keystone groups, where this user is part of
group_role:
type: string
description: role
group_role_domain:
type: string
description: group role domain
group_role_project:
type: string
description: group role project
resources:
admin_user:
type: OS::Keystone::User
properties:
name: {get_param: user_name}
domain: {get_param: user_domain}
description: {get_param: user_description}
enabled: {get_param: user_enabled}
email: {get_param: user_email}
password: {get_param: user_password}
default_project: {get_param: user_default_project}
groups: {get_param: user_groups}
roles:
- role: {get_param: group_role}
domain: {get_param: group_role_domain}
- role: {get_param: group_role}
project: {get_param: group_role_project}
'''
"""Heat Template Resource for Keystone User."""
support_status = support.SupportStatus(
version='2015.1',

@ -29,7 +29,11 @@ LOG = logging.getLogger(__name__)
class CloudServer(server.Server):
"""Resource for Rackspace Cloud Servers."""
"""Resource for Rackspace Cloud Servers.
This resource overloads existent integrated OS::Nova::Server resource and
is used for Rackspace Cloud Servers.
"""
# Managed Cloud automation statuses
MC_STATUS_IN_PROGRESS = 'In Progress'

@ -17,24 +17,27 @@ import itertools
from docutils import core
from docutils import nodes
import pydoc
import six
from sphinx.util import compat
from heat.common.i18n import _
from heat.engine import attributes
from heat.engine import environment
from heat.engine import plugin_manager
from heat.engine import properties
from heat.engine import resources
from heat.engine import support
_CODE_NAMES = {'2014.1': 'Icehouse',
'2014.2': 'Juno',
'2015.1': 'Kilo'}
global_env = environment.Environment({}, user_env=False)
all_resources = {}
class resourcepages(nodes.General, nodes.Element):
class integratedrespages(nodes.General, nodes.Element):
pass
class contribresourcepages(nodes.General, nodes.Element):
pass
@ -45,33 +48,38 @@ class ResourcePages(compat.Directive):
final_argument_whitespace = False
option_spec = {}
def path(self):
return None
def run(self):
prefix = self.arguments and self.arguments.pop() or None
content = []
for resource_type, resource_class in _all_resources(prefix):
self.resource_type = resource_type
self.resource_class = resource_class
section = self._section(content, resource_type, '%s')
for resource_type, resource_classes in _filter_resources(prefix,
self.path()):
for resource_class in resource_classes:
self.resource_type = resource_type
self.resource_class = resource_class
section = self._section(content, resource_type, '%s')
self.props_schemata = properties.schemata(
self.resource_class.properties_schema)
self.attrs_schemata = attributes.schemata(
self.resource_class.attributes_schema)
self.props_schemata = properties.schemata(
self.resource_class.properties_schema)
self.attrs_schemata = attributes.schemata(
self.resource_class.attributes_schema)
self._status_str(resource_class.support_status, section)
self._status_str(resource_class.support_status, section)
cls_doc = pydoc.getdoc(resource_class)
if cls_doc:
# allow for rst in the class comments
cls_nodes = core.publish_doctree(cls_doc).children
section.extend(cls_nodes)
cls_doc = pydoc.getdoc(resource_class)
if cls_doc:
# allow for rst in the class comments
cls_nodes = core.publish_doctree(cls_doc).children
section.extend(cls_nodes)
self.contribute_properties(section)
self.contribute_attributes(section)
self.contribute_properties(section)
self.contribute_attributes(section)
self.contribute_hot_syntax(section)
self.contribute_yaml_syntax(section)
self.contribute_json_syntax(section)
self.contribute_hot_syntax(section)
self.contribute_yaml_syntax(section)
self.contribute_json_syntax(section)
return content
@ -323,18 +331,36 @@ Resources:
definition.append(def_para)
def _all_resources(prefix=None):
type_names = sorted(global_env.get_types())
if prefix is not None:
def prefix_match(name):
return name.startswith(prefix)
class IntegrateResourcePages(ResourcePages):
def path(self):
return 'heat.engine.resources'
class ContribResourcePages(ResourcePages):
type_names = itertools.ifilter(prefix_match, type_names)
def path(self):
return 'heat.engine.plugins'
def resource_type(name):
return name, global_env.get_class(name)
return itertools.imap(resource_type, type_names)
def _filter_resources(prefix=None, path=None):
def prefix_match(name):
return prefix is None or name.startswith(prefix)
def path_match(cls):
return path is None or cls.__module__.startswith(path)
filtered_resources = {}
for name in sorted(all_resources.keys()):
if prefix_match(name):
for cls in all_resources.get(name):
if path_match(cls):
if filtered_resources.get(name) is not None:
filtered_resources[name].append(cls)
else:
filtered_resources[name] = [cls]
return sorted(six.iteritems(filtered_resources))
def _load_all_resources():
@ -342,12 +368,20 @@ def _load_all_resources():
resource_mapping = plugin_manager.PluginMapping('resource')
res_plugin_mappings = resource_mapping.load_all(manager)
resources._register_resources(global_env, res_plugin_mappings)
environment.read_global_environment(global_env)
for mapping in res_plugin_mappings:
name, cls = mapping
if all_resources.get(name) is not None:
all_resources[name].append(cls)
else:
all_resources[name] = [cls]
def setup(app):
_load_all_resources()
app.add_node(resourcepages)
app.add_node(integratedrespages)
app.add_directive('integratedrespages', IntegrateResourcePages)
app.add_node(contribresourcepages)
app.add_directive('resourcepages', ResourcePages)
app.add_directive('contribrespages', ContribResourcePages)

@ -13,4 +13,4 @@
CloudFormation Compatible Resource Types
----------------------------------------
.. resourcepages:: AWS::
.. integratedrespages:: AWS::

@ -14,6 +14,11 @@
Contributed Heat Resource Types
===============================
.. rubric:: These resources are not enabled by default.
.. contribrespages:: OS::
Rackspace Cloud Resource Types
------------------------------
@ -31,7 +36,7 @@ properly. More information about them can be found in the
<https://github.com/openstack/heat/blob/master/contrib/rackspace/README.md>`_.
.. resourcepages:: Rackspace::
.. contribrespages:: Rackspace::
DockerInc Resource
@ -44,16 +49,4 @@ requires the `docker-py <https://pypi.python.org/pypi/docker-py>`_
package. You can find more information in the `DOCKER_README
<https://github.com/openstack/heat/blob/master/contrib/heat_docker/README.md>`_.
.. resourcepages:: DockerInc::
Nova Flavor Resource
--------------------
.. rubric:: This resource is not enabled by default.
This plugin enables dynamic creation of Nova flavors through Heat. You can
find more information in the `NOVA_FLAVOR_README
<https://github.com/openstack/heat/blob/master/contrib/nova_flavor
/README.md>`_.
.. resourcepages:: OS::Nova::Flavor
.. contribrespages:: DockerInc::

@ -14,4 +14,4 @@
OpenStack Resource Types
------------------------
.. resourcepages:: OS::
.. integratedrespages:: OS::

Loading…
Cancel
Save