diff options
21 files changed, 537 insertions, 46 deletions
diff --git a/doc/source/conf.py b/doc/source/conf.py new file mode 100644 index 0000000..4faf403 --- /dev/null +++ b/doc/source/conf.py @@ -0,0 +1,175 @@ +# -*- coding: utf-8 -*- +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# heat-templates documentation build configuration file, created by +# sphinx-quickstart on Thu Jul 20 09:19:39 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = ['sphinx.ext.autodoc', + 'openstackdocstheme'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'heat-templates' +copyright = 'OpenStack Foundation' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '' +# The full version, including alpha/beta/rc tags. +release = '' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = [] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# If true, `todo` and `todoList` produce output, else they produce nothing. +# todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'openstackdocs' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# This is required for the alabaster theme +# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars +# html_sidebars = {} + +# -- Options for openstackdocstheme -------------------------------------- +repository_name = 'openstack/heat-templates' +bug_project = 'heat-templates' +bug_tag = '' + +# -- Options for HTMLHelp output ------------------------------------------ + +# Output file base name for HTML help builder. +htmlhelp_basename = 'heat-templatesdoc' + + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'heat-templates.tex', 'heat-templates Documentation', + 'OpenStack Foundation', 'manual'), +] + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'heat-templates', 'heat-templates Documentation', + ['Heat Developers'], 1) +] + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'heat-templates', 'heat-templates Documentation', + 'Heat Developers', 'heat-templates', 'One line description of project.', + 'Miscellaneous'), +] diff --git a/doc/source/index.rst b/doc/source/index.rst new file mode 100644 index 0000000..a0afe0d --- /dev/null +++ b/doc/source/index.rst @@ -0,0 +1,18 @@ +.. heat-templates documentation master file, created by + sphinx-quickstart on Thu Jul 20 09:19:39 2017. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to Heat Templates! +========================== + +.. toctree:: + :maxdepth: 1 + + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`search` diff --git a/hot/autoscaling.yaml b/hot/autoscaling.yaml index 3a8b3bb..d6d8991 100644 --- a/hot/autoscaling.yaml +++ b/hot/autoscaling.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2013-05-23 +heat_template_version: 2016-10-14 description: AutoScaling Wordpress parameters: image: @@ -75,6 +75,7 @@ resources: image: {get_param: image} key_name: {get_param: key} network: {get_param: network} + subnet: {get_param: subnet_id} pool_id: {get_resource: pool} metadata: {"metering.server_group": {get_param: "OS::stack_id"}} user_data: @@ -128,7 +129,7 @@ resources: - str_replace: template: trust+url params: - url: {get_attr: [scaleup_policy, signal_url]} + url: {get_attr: [web_server_scaleup_policy, signal_url]} query: list_join: - '' @@ -148,40 +149,44 @@ resources: - str_replace: template: trust+url params: - url: {get_attr: [scaleup_policy, signal_url]} + url: {get_attr: [web_server_scaledown_policy, signal_url]} query: list_join: - '' - - {'=': {server_group: {get_param: "OS::stack_id"}}} - monitor: - type: OS::Neutron::HealthMonitor + lb: + type: OS::Neutron::LBaaS::LoadBalancer properties: - type: TCP - delay: 5 - max_retries: 5 - timeout: 5 + vip_subnet: {get_param: subnet_id} + listener: + type: OS::Neutron::LBaaS::Listener + properties: + loadbalancer: {get_resource: lb} + protocol: HTTP + protocol_port: 80 pool: - type: OS::Neutron::Pool + type: OS::Neutron::LBaaS::Pool properties: + listener: {get_resource: listener} + lb_algorithm: ROUND_ROBIN protocol: HTTP - monitors: [{get_resource: monitor}] - subnet_id: {get_param: subnet_id} - lb_method: ROUND_ROBIN - vip: - protocol_port: 80 - lb: - type: OS::Neutron::LoadBalancer + session_persistence: + type: SOURCE_IP + lb_monitor: + type: OS::Neutron::LBaaS::HealthMonitor properties: - protocol_port: 80 - pool_id: {get_resource: pool} - + pool: { get_resource: pool } + type: TCP + delay: 5 + max_retries: 5 + timeout: 5 # assign a floating ip address to the load balancer # pool. lb_floating: type: OS::Neutron::FloatingIP properties: floating_network_id: {get_param: external_network_id} - port_id: {get_attr: [pool, vip, port_id]} + port_id: {get_attr: [lb, vip_port_id]} outputs: scale_up_url: @@ -197,7 +202,7 @@ outputs: this URL; no body nor extra headers are needed. value: {get_attr: [web_server_scaledown_policy, alarm_url]} pool_ip_address: - value: {get_attr: [pool, vip, address]} + value: {get_attr: [lb, vip_address]} description: The IP address of the load balancing pool website_url: value: @@ -214,7 +219,7 @@ outputs: template: > gnocchi measures aggregation --resource-type instance --query 'server_group="stackval"' - --granularity 300 --aggregation mean cpu_util + --granularity 300 --aggregation mean -m cpu_util params: stackval: { get_param: "OS::stack_id" } description: > diff --git a/hot/condition.yaml b/hot/condition.yaml new file mode 100644 index 0000000..9f5e640 --- /dev/null +++ b/hot/condition.yaml @@ -0,0 +1,102 @@ +heat_template_version: 2017-02-24 +parameters: + env_type: + default: test + type: string + constraints: + - allowed_values: [prod, test] + zone: + type: string + default: beijing +conditions: + prod: {equals: [{get_param: env_type}, "prod"]} + test: + not: + equals: + - get_param: env_type + - prod + beijing_prod: + and: + - equals: + - get_param: zone + - beijing + - equals: + - get_param: env_type + - prod + xian_zone: + equals: + - get_param: zone + - xian + xianyang_zone: + equals: + - get_param: zone + - xianyang + fujian_zone: + or: + - equals: + - get_param: zone + - fuzhou + - equals: + - get_param: zone + - xiamen + fujian_prod: + and: + - fujian_zone + - prod + shannxi_province: + or: + - xian_zone + - xianyang_zone +resources: + test_res: + type: OS::Heat::TestResource + properties: + value: {if: ["prod", "env_is_prod", "env_is_test"]} + prod_res: + type: OS::Heat::TestResource + properties: + value: prod_res + condition: prod + test_res1: + type: OS::Heat::TestResource + properties: + value: just in test env + condition: test + beijing_prod_res: + type: OS::Heat::TestResource + properties: + value: beijing_prod_res + condition: beijing_prod + fujian_res: + type: OS::Heat::TestResource + condition: fujian_zone + properties: + value: fujian_res + fujian_prod_res: + type: OS::Heat::TestResource + condition: fujian_prod + properties: + value: fujian_prod_res + shannxi_res: + type: OS::Heat::TestResource + condition: shannxi_province + properties: + value: shannxi_res + not_shannxi_res: + type: OS::Heat::TestResource + condition: {not: shannxi_province} + properties: + value: not_shannxi_res +outputs: + res_value: + value: {get_attr: [prod_res, output]} + condition: prod + test_res_value: + value: {get_attr: [test_res, output]} + prod_resource: + value: {if: [prod, {get_resource: prod_res}, 'no_prod_res']} + test_res1_value: + value: {if: [test, {get_attr: [test_res1, output]}, 'no_test_res1']} + beijing_prod_res: + value: {if: [beijing_prod, {get_resource: beijing_prod_res}, + 'no_prod_res']} diff --git a/hot/lb_server.yaml b/hot/lb_server.yaml index 3cd907f..67762b6 100644 --- a/hot/lb_server.yaml +++ b/hot/lb_server.yaml @@ -1,4 +1,4 @@ -heat_template_version: 2013-05-23 +heat_template_version: 2016-10-14 description: A load-balancer server parameters: image: @@ -21,6 +21,9 @@ parameters: network: type: string description: Network used by the server + subnet: + type: string + description: Subnet used by the server resources: server: @@ -34,11 +37,12 @@ resources: user_data_format: RAW networks: [{network: {get_param: network} }] member: - type: OS::Neutron::PoolMember + type: OS::Neutron::LBaaS::PoolMember properties: - pool_id: {get_param: pool_id} + pool: {get_param: pool_id} address: {get_attr: [server, first_address]} protocol_port: 80 + subnet: {get_param: subnet} outputs: server_ip: diff --git a/hot/neutron/instance_trunk_port.yaml b/hot/neutron/instance_trunk_port.yaml new file mode 100644 index 0000000..584133e --- /dev/null +++ b/hot/neutron/instance_trunk_port.yaml @@ -0,0 +1,168 @@ +heat_template_version: 2017-02-24 + +description: How to boot an instance with networks trunked over a port + +# See also: +# https://docs.openstack.org/heat/latest/template_guide/openstack.html#OS::Neutron::Trunk +# https://docs.openstack.org/neutron/latest/admin/config-trunking.html +# https://wiki.openstack.org/wiki/Neutron/TrunkPort + +parameters: + flavor: + type: string + default: ds512M + key: + type: string + default: key0 + # Use an image with support for vlan interfaces. CirrOS will not cut it. + # eg: ip link add ... type vlan ... + image: + type: string + default: ubuntu1404 + +resources: + + net0: + type: OS::Neutron::Net + net1: + type: OS::Neutron::Net + net2: + type: OS::Neutron::Net + + subnet0: + type: OS::Neutron::Subnet + properties: + network: { get_resource: net0 } + cidr: 10.0.4.0/24 + subnet1: + type: OS::Neutron::Subnet + properties: + network: { get_resource: net1 } + cidr: 10.0.5.0/24 + subnet2: + type: OS::Neutron::Subnet + properties: + network: { get_resource: net2 } + cidr: 10.0.6.0/24 + + parent_port: + type: OS::Neutron::Port + properties: + network: { get_resource: net0 } + subport1: + type: OS::Neutron::Port + properties: + network: { get_resource: net1 } + # NOTE Reuse parent port's MAC address on all subports. + # + # Analog to VLAN use on physical NICs you may set MAC addresses of + # subports to the MAC address of the parent port. This way bringing up + # the subport's VLAN subinterface inside the instance is simpler. You + # don't have to set a new MAC address for each VLAN subinterface. + # However before you do this be aware of a bug in Neutron's openvswitch + # firewall driver: https://launchpad.net/bugs/1626010 + # + #mac_address: { get_attr: [parent_port, mac_address] } + subport2: + type: OS::Neutron::Port + properties: + network: { get_resource: net2 } + #mac_address: { get_attr: [parent_port, mac_address] } + + trunk0: + type: OS::Neutron::Trunk + properties: + port: { get_resource: parent_port } + sub_ports: + - { port: { get_resource: subport1 }, + segmentation_type: vlan, + segmentation_id: 101 } + - { port: { get_resource: subport2 }, + segmentation_type: vlan, + segmentation_id: 102 } + + instance0: + type: OS::Nova::Server + # NOTE Make the instance depend on the trunk. + # + # A simple direct reference to the parent port would be straightforward + # but in many (though not all) cases wrong. The trunk port spec says: + # + # "If the [neutron] backend does not implement the [trunk] extension + # any trunk operation will fail (with 404). If a [neutron] plugin + # does implement the [trunk] extension, trunk operations may return + # a conflict error if the [parent] port status is not compatible + # with the [trunk create] request." + # + # http://specs.openstack.org/openstack/neutron-specs + # /specs/newton/vlan-aware-vms.html + # + # In practice this means that the Open vSwitch plugin(s) of Neutron + # will reject trunk creation when the parent port was already used + # to boot an instance. + # + # This introduces a timing dependency (ie. the trunk must be created + # before the instance is booted). Of which Heat cannot know based + # on information present in the template unless we tell it. + # + # Though other Neutron plugins may not have this constraint as an + # OpenStack end user you don't want to write templates that depend + # on the plugin configuration of Neutron, therefore it's better to + # always add the dependency. + # + # You can add the dependency: + # * either implicitly via 'get_attr', + # * or explicitly via 'depends_on'. + # + # instance0: + # type: OS::Nova::Server + # properties: + # networks: + # - { port: { get_attr: [trunk0, port_id] } } # BEST + # + # instance0: + # type: OS::Nova::Server + # depends_on: trunk0 # ALSO GOOD, but easy to forget + # properties: + # networks: + # - { port: { get_resource: parent_port } } + # + # But if you encounter this error during trunk resource creation: + # + # CREATE_FAILED Conflict: resources.trunk0: + # Port [parent port id] is currently in use and + # is not eligible for use as a parent port. + # + # then remember that the likely cause was this: + # + # instance0: + # type: OS::Nova::Server + # # neither depends_on + # properties: + # networks: + # - { port: { get_resource: parent_port } } # nor get_attr, BAD + properties: + key_name: { get_param: key } + flavor: { get_param: flavor } + image: { get_param: image } + networks: + # NOTE Use the parent port only. Subports must not be directly added + # to the instance. + - { port: { get_attr: [trunk0, port_id] } } + +outputs: + # This output is here to help bringing up the subports' vlan subinterfaces, eg: + # ip link add link eth0 name eth0.101 address "$subport_mac" type vlan id 101 + # dhclient eth0.101 + parent_port/mac_adress: + value: { get_attr: [parent_port, mac_address] } + parent_port/name: + value: { get_attr: [parent_port, name] } + subport1/fixed_ips: + value: { get_attr: [subport1, fixed_ips] } + subport1/mac_address: + value: { get_attr: [subport1, mac_address] } + subport2/fixed_ips: + value: { get_attr: [subport2, fixed_ips] } + subport2/mac_address: + value: { get_attr: [subport2, mac_address] } diff --git a/hot/software-config/elements/heat-config-docker-cmd/install.d/hook-docker-cmd.py b/hot/software-config/elements/heat-config-docker-cmd/install.d/hook-docker-cmd.py index ae02887..8e9e89f 100755 --- a/hot/software-config/elements/heat-config-docker-cmd/install.d/hook-docker-cmd.py +++ b/hot/software-config/elements/heat-config-docker-cmd/install.d/hook-docker-cmd.py @@ -15,6 +15,7 @@ import json import logging import os +import six import subprocess import sys import yaml @@ -99,7 +100,7 @@ def main(argv=sys.argv): if key in ['environment', 'volumes', 'volumes_from']: for value in config[container][key]: # Somehow the lists get empty values sometimes - if type(value) is unicode and not value.strip(): + if type(value) is six.text_type and not value.strip(): continue cmd.append(docker_arg_map(key, value)) elif key == 'image': diff --git a/hot/software-config/elements/heat-config-docker-compose/install.d/hook-docker-compose.py b/hot/software-config/elements/heat-config-docker-compose/install.d/hook-docker-compose.py index 41219ef..0ccd51a 100755 --- a/hot/software-config/elements/heat-config-docker-compose/install.d/hook-docker-compose.py +++ b/hot/software-config/elements/heat-config-docker-compose/install.d/hook-docker-compose.py @@ -17,6 +17,7 @@ import dpath import json import logging import os +import six import subprocess import sys import yaml @@ -87,7 +88,7 @@ def main(argv=sys.argv): for value in dpath.util.values(config, '*/env_file'): if isinstance(value, list): compose_env_files.extend(value) - elif isinstance(value, basestring): + elif isinstance(value, six.string_types): compose_env_files.extend([value]) input_env_files = {} diff --git a/hot/software-config/elements/heat-config/os-refresh-config/configure.d/55-heat-config b/hot/software-config/elements/heat-config/os-refresh-config/configure.d/55-heat-config index 9cc0df1..cbb36ae 100755 --- a/hot/software-config/elements/heat-config/os-refresh-config/configure.d/55-heat-config +++ b/hot/software-config/elements/heat-config/os-refresh-config/configure.d/55-heat-config @@ -21,6 +21,7 @@ import subprocess import sys import requests +import six HOOKS_DIR_PATHS = ( os.environ.get('HEAT_CONFIG_HOOKS'), @@ -93,7 +94,7 @@ def invoke_hook(c, log): hot_inputs = c.get('inputs', []) for hot_input in hot_inputs: if hot_input.get('type', None) == 'String' and \ - not isinstance(hot_input['value'], basestring): + not isinstance(hot_input['value'], six.text_type): hot_input['value'] = str(hot_input['value']) iv = dict((i['name'], i['value']) for i in c['inputs']) # The group property indicates whether it is softwarecomponent or diff --git a/hot/software-config/example-templates/cirros-example/init.d/heat-deploy-hook b/hot/software-config/example-templates/cirros-example/init.d/heat-deploy-hook index e063e09..daa592f 100755 --- a/hot/software-config/example-templates/cirros-example/init.d/heat-deploy-hook +++ b/hot/software-config/example-templates/cirros-example/init.d/heat-deploy-hook @@ -16,18 +16,18 @@ USER_ID=$(cat $OSC_DATA_PATH/user_id) AUTH_URL=$(cat $OSC_DATA_PATH/auth_url) PROJECT_ID=$(cat $OSC_DATA_PATH/project_id) -# Get a token and de-jsonify the response -# FIXME currently this only works with v2 keystone -V2_JSON='{"auth": {"tenantId": "'$PROJECT_ID'", "passwordCredentials": {"userId": "'$USER_ID'", "password": "'$PASSWORD'"}}}' -curl -i -d "$V2_JSON" -H "Content-type: application/json" $AUTH_URL/tokens | grep "^{" > ${TMPDIR}/token_json.json +# Get a token and de-jsonify the response, only supports keystone v3 +V3_JSON='{"auth": {"identity": {"methods": ["password"], "password": {"user": {"id": "'$USER_ID'", "password": "'$PASSWORD'"}}}, "scope": {"project": {"id": "'$PROJECT_ID'"}}}}' +curl -i -d "$V3_JSON" -H "Content-type: application/json" $AUTH_URL/auth/tokens > ${TMPDIR}/token.json +TOKEN=$(grep 'X-Subject-Token' ${TMPDIR}/token.json | awk '{print $2}') mkdir -p ${TMPDIR}/token_data_out -json2fstree ${TMPDIR}/token_data_out ${TMPDIR}/token_json.json -TOKEN=$(cat ${TMPDIR}/token_data_out/access/token/id) +grep "^{" ${TMPDIR}/token.json > ${TMPDIR}/token_body.json +json2fstree ${TMPDIR}/token_data_out ${TMPDIR}/token_body.json # Locate the heat API endpoint from the token response -SC_DIR=$(grep -r orchestration ${TMPDIR}/token_data_out/access/serviceCatalog/ | sed "s/\/type:orchestration//") -SC_PUBURL=$(find $SC_DIR -name publicURL) -SC_ENDPOINT=$(cat $SC_PUBURL) +SC_DIR=$(grep -r orchestration ${TMPDIR}/token_data_out/token/catalog | sed "s/\/type:orchestration//") +SC_PUBURL=$(grep -r public ${SC_DIR} | sed "s/\/interface:public//") +SC_ENDPOINT=$(cat ${SC_PUBURL}/url) # Get resource metadata and decode it with json2fstree STACK_ID=$(cat $OSC_DATA_PATH/stack_id) diff --git a/openshift-origin/F19/aws-template/openshift.template b/openshift-origin/F19/aws-template/openshift.template index b253e83..edca844 100644 --- a/openshift-origin/F19/aws-template/openshift.template +++ b/openshift-origin/F19/aws-template/openshift.template @@ -63,7 +63,7 @@ "Type": "String" }, "PrivateNetworkName": { - "Description": "Name of the private network wich will be created", + "Description": "Name of the private network which will be created", "Type": "String", "Default": "OpenShift-Network" }, diff --git a/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/nodeinstance.yaml b/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/nodeinstance.yaml index a65e47f..32ce5ec 100644 --- a/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/nodeinstance.yaml +++ b/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/nodeinstance.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: diff --git a/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/openshift.yaml b/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/openshift.yaml index 769669b..c84c6aa 100644 --- a/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/openshift.yaml +++ b/openshift-origin/F19/hot-template/openshift-scalable-cpu-nbgears/openshift.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: diff --git a/openshift-origin/F19/hot-template/openshift-scalable-cpu/nodeinstance.yaml b/openshift-origin/F19/hot-template/openshift-scalable-cpu/nodeinstance.yaml index a65e47f..32ce5ec 100644 --- a/openshift-origin/F19/hot-template/openshift-scalable-cpu/nodeinstance.yaml +++ b/openshift-origin/F19/hot-template/openshift-scalable-cpu/nodeinstance.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: diff --git a/openshift-origin/F19/hot-template/openshift-scalable-cpu/openshift.yaml b/openshift-origin/F19/hot-template/openshift-scalable-cpu/openshift.yaml index fef5b7c..d881b67 100644 --- a/openshift-origin/F19/hot-template/openshift-scalable-cpu/openshift.yaml +++ b/openshift-origin/F19/hot-template/openshift-scalable-cpu/openshift.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: diff --git a/openshift-origin/F19/hot-template/openshift-scalable-nbgears/nodeinstance.yaml b/openshift-origin/F19/hot-template/openshift-scalable-nbgears/nodeinstance.yaml index e3fcd66..e4a68b1 100644 --- a/openshift-origin/F19/hot-template/openshift-scalable-nbgears/nodeinstance.yaml +++ b/openshift-origin/F19/hot-template/openshift-scalable-nbgears/nodeinstance.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: diff --git a/openshift-origin/F19/hot-template/openshift-scalable-nbgears/openshift.yaml b/openshift-origin/F19/hot-template/openshift-scalable-nbgears/openshift.yaml index d015194..1229136 100644 --- a/openshift-origin/F19/hot-template/openshift-scalable-nbgears/openshift.yaml +++ b/openshift-origin/F19/hot-template/openshift-scalable-nbgears/openshift.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: diff --git a/openshift-origin/F19/hot-template/openshift/openshift.yaml b/openshift-origin/F19/hot-template/openshift/openshift.yaml index e57838f..f1a9d5d 100644 --- a/openshift-origin/F19/hot-template/openshift/openshift.yaml +++ b/openshift-origin/F19/hot-template/openshift/openshift.yaml @@ -43,7 +43,7 @@ parameters: description: External network ID type: string private_network_name: - description: Name of the private network wich will be created + description: Name of the private network which will be created type: string default: OpenShift-Network private_network_cidr: @@ -17,3 +17,11 @@ classifier = Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 Programming Language :: Python :: 3.4 + +[build_sphinx] +source-dir = doc/source +build-dir = doc/build +all_files = 1 + +[upload_sphinx] +upload-dir = doc/build/html diff --git a/test-requirements.txt b/test-requirements.txt index 402c212..a855ea0 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -5,9 +5,11 @@ fixtures>=0.3.14 # Hacking already pins down pep8, pyflakes and flake8 hacking>=0.10.0,<0.11 mock>=1.0 +openstackdocstheme>=1.11.0 # Apache-2.0 requests>=1.2.1,!=2.4.0 requests-mock>=0.4.0 # Apache-2.0 salt +sphinx>=1.6.2 # BSD testrepository>=0.0.18 testscenarios>=0.4 testtools>=0.9.34 @@ -17,6 +17,12 @@ commands = flake8 [testenv:venv] commands = {posargs} +[testenv:docs] +deps = -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + sphinxcontrib-httpdomain +commands = python setup.py build_sphinx + [flake8] show-source = True builtins = _ |