././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.6150374 openstack_heat-24.0.0/0000775000175000017500000000000000000000000014610 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/.coveragerc0000664000175000017500000000013200000000000016725 0ustar00zuulzuul00000000000000[run] branch = True source = heat,contrib omit = */tests/* [report] ignore_errors = True ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/.pre-commit-config.yaml0000664000175000017500000000146500000000000021077 0ustar00zuulzuul00000000000000--- default_language_version: # force all unspecified python hooks to run python3 python: python3 repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: - id: trailing-whitespace - id: mixed-line-ending args: ['--fix', 'lf'] exclude: '.*\.(svg)$' - id: check-byte-order-marker - id: check-executables-have-shebangs - id: check-merge-conflict - id: debug-statements - id: check-yaml files: .*\.(yaml|yml)$ exclude: 'rally-scenarios/heat-fakevirt.yaml' - repo: local hooks: - id: flake8 name: flake8 additional_dependencies: - hacking>=6.1.0,<6.2.0 language: python entry: flake8 files: '^.*\.py$' exclude: '^(doc|releasenotes|tools)/.*$' ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/.stestr.conf0000664000175000017500000000007500000000000017063 0ustar00zuulzuul00000000000000[DEFAULT] test_path=${OS_TEST_PATH:-./heat/tests} top_dir=./ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/.zuul.yaml0000664000175000017500000001602100000000000016551 0ustar00zuulzuul00000000000000- job: name: heat-functional-base parent: devstack abstract: true run: playbooks/devstack/functional/run.yaml post-run: playbooks/devstack/functional/post.yaml description: Base heat functional test job timeout: 7800 roles: - zuul: opendev.org/openstack/devstack - zuul: opendev.org/openstack/tempest required-projects: - openstack/barbican - openstack/heat - openstack/heat-templates - openstack/heat-tempest-plugin - openstack/octavia - openstack/neutron - openstack/oslo.messaging - openstack/python-barbicanclient - openstack/python-heatclient - openstack/heat-agents - openstack/tempest vars: configure_swap_size: 8192 tempest_plugins: - heat-tempest-plugin devstack_localrc: TEMPEST_PLUGINS: '/opt/stack/heat-tempest-plugin' HEAT_USE_MOD_WSGI: True CEILOMETER_PIPELINE_INTERVAL: 60 devstack_services: tls-proxy: false s-account: false s-container: false s-object: false s-proxy: false tempest: true openstack-cli-server: false devstack_plugins: barbican: https://opendev.org/openstack/barbican heat: https://opendev.org/openstack/heat octavia: https://opendev.org/openstack/octavia devstack_local_conf: post-config: $HEAT_CONF: DEFAULT: convergence_engine: true stack_scheduler_hints: true hidden_stack_tags: hidden encrypt_parameters_and_properties: True logging_exception_prefix: "%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s" enable_stack_adopt: true enable_stack_abandon: true max_stacks_per_tenant: 256 heat_api: workers: 2 heat_api_cfn: workers: 2 cache: enabled: True eventlet_opts: client_socket_timeout: 120 oslo_messaging_notifications: driver: messagingv2 test-config: $TEMPEST_CONFIG: service_available: heat: True heat_plugin: convergence_engine_enabled: true minimal_image_ref: ${DEFAULT_IMAGE_NAME:-cirros-0.3.6-x86_64-disk} instance_type: m1.heat_int minimal_instance_type: m1.heat_micro image_ref: Fedora-Cloud-Base-37-1.7.x86_64 hidden_stack_tag: hidden heat_config_notify_script: /opt/stack/heat-agents/heat-config/bin/heat-config-notify boot_config_env: /opt/stack/heat-templates/hot/software-config/boot-config/test_image_env.yaml credential_secret_id: $OS_CREDENTIAL_SECRET_ID heat_features_enabled: multi_cloud: True # disable cinder backup feature volume-feature-enabled: backup: False test_results_stage_name: test_results zuul_copy_output: '{{ devstack_base_dir }}/tempest/etc/tempest.conf': logs '{{ devstack_base_dir }}/tempest/etc/accounts.yaml': logs '{{ devstack_base_dir }}/tempest/tempest.log': logs '{{ stage_dir }}/{{ test_results_stage_name }}.subunit': logs '{{ stage_dir }}/{{ test_results_stage_name }}.html': logs '{{ stage_dir }}/stackviz': logs extensions_to_txt: conf: true log: true yaml: true yml: true irrelevant-files: - ^.*\.rst$ - ^api-ref/.*$ - ^doc/.*$ - ^etc/heat/heat-.*-generator.conf$ - ^heat/locale/.*$ - ^heat/tests/.*$ - ^releasenotes/.*$ - job: name: heat-functional parent: heat-functional-base # TODO(gmann): As per the 2025.1 testing runtime, we need to run at least # one job on jammy. This job can be removed in the next cycle(2025.2). - job: name: heat-functional-jammy description: This job testing on Ubuntu jammy(22.04) parent: heat-functional nodeset: openstack-single-node-jammy - job: name: heat-functional-centos-9-stream parent: heat-functional-base voting: false nodeset: devstack-single-node-centos-9-stream - job: name: heat-functional-legacy parent: heat-functional-base vars: devstack_local_conf: post-config: $HEAT_CONF: DEFAULT: convergence_engine: false test-config: $TEMPEST_CONFIG: heat_plugin: convergence_engine_enabled: false - job: name: grenade-heat-multinode parent: grenade-multinode required-projects: - opendev.org/openstack/heat - opendev.org/openstack/heat-tempest-plugin - opendev.org/openstack/python-heatclient vars: grenade_devstack_localrc: shared: HOST_TOPOLOGY: multinode HOST_TOPOLOGY_ROLE: primary HOST_TOPOLOGY_SUBNODES: "{{ hostvars['compute1']['nodepool']['public_ipv4'] }}" configure_swap_size: 8192 devstack_services: h-api: true h-api-cfn: true h-eng: true heat: true openstack-cli-server: false # We do run a list of tests after upgrade. This is just to bypass the req from parent. tempest_test_regex: ^tempest\.api\.identity\.v3\.test_tokens tox_envlist: all devstack_plugins: heat: https://opendev.org/openstack/heat tempest_plugins: - heat-tempest-plugin group-vars: subnode: grenade_devstack_localrc: shared: HOST_TOPOLOGY: multinode HOST_TOPOLOGY_ROLE: subnode HOST_TOPOLOGY_SUBNODES: "{{ hostvars['compute1']['nodepool']['public_ipv4'] }}" configure_swap_size: 8192 devstack_services: h-api: true h-api-cfn: true h-eng: true heat: true openstack-cli-server: false # We do run a list of tests after upgrade. This is just to bypass the req from parent. devstack_plugins: heat: https://opendev.org/openstack/heat irrelevant-files: - ^.*\.rst$ - ^api-ref/.*$ - ^doc/.*$ - ^etc/heat/heat-.*-generator.conf$ - ^heat/locale/.*$ - ^heat/tests/.*$ - ^releasenotes/.*$ - job: name: grenade-heat-multinode-skip-level parent: grenade-heat-multinode vars: grenade_from_branch: stable/2024.1 - project: queue: heat templates: - openstack-cover-jobs - openstack-python3-jobs - openstack-python3-jobs-arm64 - periodic-stable-jobs - publish-openstack-docs-pti - check-requirements - release-notes-jobs-python3 check: jobs: - grenade-heat-multinode - grenade-heat-multinode-skip-level - heat-functional - heat-functional-jammy - heat-functional-legacy - heat-functional-centos-9-stream gate: jobs: - grenade-heat-multinode - grenade-heat-multinode-skip-level - heat-functional - heat-functional-jammy - heat-functional-legacy ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591351.0 openstack_heat-24.0.0/AUTHORS0000664000175000017500000005710100000000000015664 0ustar00zuulzuul00000000000000Aaron Rosen Aaron-DH Abhishek Chanda Adrien Vergé Ahmed Elkhouly Aigerim Ala Rezmerita Alan Alan Pevec Alejandro García Alejandro Santoyo AleptNamrata AleptNmarata Alex Gaynor Alexander Chudnovets Alexander Gordeev Alexander Ignatov Alexander Ignatyev Alexandr Nedopekin Alfredo Moralejo Amit Agarwal Amit Ugol Amy Fong Ana Krivokapic Anant Patil Anastasia Kuznetsova Anderson Mesquita Andre Andrea Rosa Andreas Florath Andreas Jaeger Andreas Jaeger Andrew Hutchings Andrew Lazarev Andrew Orlov Andrew Plunk Andrey Kurilin Andrii Ostapenko Andy Botting Angus Salkeld Angus Salkeld Angus Salkeld Angus Salkeld Anh Tran Ankit Agrawal Anne McCormick Arata Notsu Arun Vinod Ashutosh Mishra Atsushi SAKAI Atsushi Sasaki Attila Fazekas AvnishPal BK Box Balazs Gibizer Bartosz Górski Ben Nemec Ben Nemec Bence Romsics Benoît Knecht Bernard Van De Walle Bernhard M. Wiedemann Bertrand Lallau Bertrand Lallau Bhagyashri Shewale Bill Arnold Bin Zhou Bo Wang Boden R Botond Zoltán Brant Knudson Brendan Shephard Brent Eagles Brian Moss Bryan Jones Bui Doan Dang Béla Vancsics Cao Xuan Hoang Carlos Goncalves Cedric Brandily Chandan Kumar Chang Bo Guo ChangBo Guo(gcb) Chaozhe.Chen Chaserjim Chen Xiao ChenZheng Chengen Du Chmouel Boudjnah Chris Chris Alfonso Chris Buccella Chris Buccella Chris Hultin Chris Roberts Christian Berendt Christoph Dwertmann Christopher Armstrong Chuck Short Clark Boylan Claudiu Belu Clint Byrum Cody A.W. Somerville Colleen Murphy Colleen Murphy Corey Bryant Crag Wolfe Cyril Roelandt Cédric Ollivier Dan Dan Prince Daniel Givens Daniel Gonzalez Daniel Pawlik Dao Cong Tien Davanum Srinivas Davanum Srinivas Dave Wilde David Hill David J Peacock David Rabel David Vallee Delisle Deepak Tiwari Deliang Fan Denes Nemeth DennyZhang Derek Higgins Diane Fleming Dimitri Mazmanov Dina Belova Dirk Mueller Dmitriy Uvarenkov Dmitry Tyurnikov Doug Fish Doug Hellmann Drago Rosson Duc Truong Ekaterina Chernova Eli Qiao Elod Illes Emilien Macchi Endre Karlson Eoghan Glynn Eoghan Glynn Eric Brown Erik Olof Gunnar Andersson Erik Panter Ethan Lynn Ethan Lynn Eyal Fabien Boucher FeihuJiang Feilong Wang Flavio Percoco Frank Berghaus Gary Kotton Gauvain Pocentek George Peristerakis Georgina Shippey Gerard Braad Gerry Buteau Ghanshyam Mann Giulio Fidente Graham Hayes Greg Blomquist Gregory Haynes Gregory Thiemonge Grzegorz Grasza Gábor Antal H S, Rakesh Ha Van Tu Haider, Nafiz (nh532m) Haider, Nafiz (nh532m) Haiwei Xu Haiyang Ding Han Manjong Harald Jensas Harald Jensas Harald Jensås He Jie Xu He Yongli Hervé Beraud Hironori Shiina Hongbin Lu Hongbin Lu Huangsm Hui HX Xiang Ian Main Ian McLeod Ian Wienand Ifat Afek Igor D.C Ihar Hrachyshka Ionuț Arțăriși Isaku Yamahata Issam Harrathi JUN JIE NAN JUNJIE NAN Jaewoo Park Jaime Guerrero Jake Yip James Combs James E. Blair James Page James Reeves James Slagle Jamie Lennox Jamie Lennox Jan Horstmann Jan Provaznik Jason Dunsmore Jason Li Jason Neatherway Javeme Javier Pena Jay Clark Jay Dobies Jay Lau Jeff Peeler Jeff Sloyer Jennifer Mulsow Jens Harbott Jens Rosenboom Jeremy Freudberg Jeremy Liu Jeremy Pugh Jeremy Stanley Jesse Andrews Jesse Pretorius Jesse Proudman Ji-Wei Jia Dong Jianing YANG Jin Nan Zhang Jiri Stransky Jiří Suchomel Joe D'Andrea Joe Gordon Joe Talerico Johannes Grassler Johnu George JordanP Jose Luis Franco Arza Joshua Harlow JuPing Juan Antonio Osorio Robles Julia Kreger Julia Varlamova Julian Sy Julien Danjou KIYOHIRO ADACHI Kamal Hussain Kamil Rykowski Kanagaraj Manickam Kanagaraj Manickam Kanagaraj Manickam Kashif Siddiqui Kazunori Shinohara Kent Wang Keshava Bharadwaj Kevin Carter Kevin Fox Kevin_Zheng Khaled Qarout Kien Nguyen Krishna Raman Krzysztof Opasiak Lance Bragstad Lars Kellogg-Stedman Laura Fitzgerald LeopardMa Li Jinjing Liang Chen LiangChen Limor Stotland Lingxian Kong LiuNanke Lon Hohberger Lu lei Ludovic Logiou Luigi Toscano Luis A. Garcia Luis Tomas Bolivar Lukas Bednar Luke Short Luong Anh Tuan M V P Nitesh Maksym Iarmak Manpreet Kaur Marc Methot Marga Millet Mark McClain Mark McLoughlin Mark Vanderwiel Martin Geisler Martin Kletzander Martin Mágr Martin Oemke Masco Kaliyamoorthy Matt Riedemann Matt Riedemann Matthew Edmonds Matthew Flusche Matthew Gilliard Matthew Printz Matthew Treinish Matthias Runge Mehdi Abaakouk (sileht) Mehdi Abaakouk Mehdi Abaakouk Michael Ionkin Michael Johnson Michael Krotscheck Michael Still Michal Jastrzebski (inc0) Michal Jastrzebski Michal Nasiadka Michal Rostecki Miguel Grinberg Miguel Grinberg Mike Asthalter Mike Spreitzer Mitsuru Kanabuchi Mitya_Eremeev Mohammed Naser Mohankumar Monty Taylor Morgan Fainberg Morgan Fainberg Moshe Elisha Nakul Dahiwade Nam Nguyen Hoai Nguyen Hung Phuong Nguyen Phuong An Nguyen Van Trung Nicolas Niels Boehm Noa Koffman Norbert Illes OTSUKA, Yuanying Oleg Khavroshin Oleksii Chuprykov Oleksiy Petrenko Omar Soriano OpenStack Release Bot Pablo Andres Fuente PanFengyun PanFengyun Patrick Woods Paul Bourke Paul Van Eck Pavlo Shchelokovskyy Pavlo Shchelokovskyy Pengfei Zhang Peter Razumovsky Petr Kovar PhilippeJ Pierre Pierre Freund Pierre Padrixe Pierre Riteau Pierre Riteau Pradeep Kilambi Pradeep Kumar Singh Pratik Mallya Praveen Yalagandula Prince Katiyar Przemyslaw Szczerbik QI ZHANG Rabi Mihsra Rabi Mishra Rafael Folco Rajiv Kumar Rakesh H S Rakesh H S Randall Burt Richard Lee Rico Lin Rico Lin Rico Lin Rikimaru, Honjo Robert Collins Robert Pothier Robert van Leeuwen Roberto Polli Rocky Rodolfo Alonso Hernandez Roman Podoliaka Russell Bryant Ryan Brown Ryo Miki Sabeen Syed Sagi Shnaidman Sahdev Zala Sam Alba Sam Kumar Sampat P Samuel de Medeiros Queiroz Saravanan KR Sean Dague Sean M. Collins Sean McGinnis Serg Melikyan Sergey Sergey Kraynev Sergey Lukjanov Sergey Reshetnyak Sergey Skripnick Sergey Vilgelm Seyeong Kim Shane Wang ShaoHe Feng Sharmin Choksey Shengjie Min Shilla Saebi ShunliZhou Simon Merrick Simon Pasquier Simon Pasquier Simon Pasquier Sirushti Murugesan Song Li Spencer Yu Sreeram Vancheeswaran Stan Lagun Stefan Nica Stephen Finucane Stephen Gordon Stephen Gran Stephen Sugden Steve Baker Steve Baker Steve McLellan Steven Dake Steven Hardy Suiong Ng Sumit Naiksatam Sushil Kumar Sven Anderson Svetlana Shturm Swann Croiset Swann Croiset Swapnil Kulkarni (coolsvap) Sylvain Baubeau Takashi Kajinami Takashi Kajinami Takashi NATSUME Takashi Natsume Tanvir Talukder Tetiana Lashchova Thierry Carrez Thomas Bechtold Thomas Goirand Thomas Herve Thomas Herve Thomas Herve Thomas Herve Thomas Spatzier Tim Burke Tim Rozet Tim Schnell Tim Smith Timothy Okwii Tobias Urdin Tom Stappaerts Tomas Sedovic Tomas Sedovic Tomasz Trębski Tomer Shtilman Tomer Shtilman Ton Ngo Tovin Seven Unmesh Gurjar Van Hung Pham Vic Howard Victor Coutellier Victor Coutellier Victor HU Victor Sergeyev Victor Stinner Vijendar Komalla Vikas Jain Vinod Mangalpally Visnusaran Murugan Vitaly Gridnev Vlad Gridin Vladimir Ermakov Vladimir Kuklin Volodymyr Litovka Wang Muyu Winson Chan Xiao Liang YI-JIE,SYU Yamato Tanaka YangLei Yanyan Hu Yaoguo Jiang Yatin Kumbhare Ying Zuo Yosef Hoffman Yoshimi Tominaga Yuanbin.Chen ZHU ZHU Zane Bitter Zhang Lei (Sneeze) Zhang Yang Zhenguo Niu ZhiQiang Fan ZhiQiang Fan Zhiqiang Fan ZhongShengping Ziad Sawalha abdul nizamuddin abhishekkekane aivanitskiy ananta apetrich april bshephar caoyuan cbjchen@cn.ibm.com chao liu chen-li chenaidong1 chenjiao chenxiangui chenxiao chenxing chestack cyli danny deepakmourya divakar-padiyar-nandavar dixiaoli duvarenkov ekudryashova fandeliang gao.hanxiang gecong1973 gengchc2 ghanshyam gong yong sheng gordon chung gugug guohliu hgangwx hmonika huangshan huangtianhua igor ishant jiangwt100 jiaqi07 johjuhyun jufeng jun xie junxu kairat_kushaev kaz_shinohara kkroto07 kumari paluru kylin7-sg lawrancejing liangshang lidong lijunjie likui linwwu liu-sheng liudong liumk liusheng liyi liyi lizheming lujiefsi lvdongbing maniksidana019 matthew-fuller matts2006 melissaml mohankumar_n npraveen35 pallavi pawnesh.kumar pengdake <19921207pq@gmail.com> pengyuesheng rabi rajat29 rajiv ramishra rico.lin ricolin ricolin ricolin ricolin root sabeensyed sdake shaofeng_cheng sharat.sharma shenxindi shizhihui sowm9802 sslypushenko tanlin tengqim tengqm tianhui tpatil tyagi uberj ubuntu venkatamahesh wanghui wangtianfa wangzihao wbluo0907 weizhao whoami-rajat wu.shiming xiaolihope xiexs xpress yangxurong yangyawei yanpuqing yanyanhu yatin yuanpeng yuntongjin yushangbin yuyafei zengchen zengjia zengyingzhe zhangchunlong1@huawei.com zhangguoqing zhanghao zhaozhilong zhoulinhui zhufeng zhufl zhulingjie zhurong Émilien Macchi ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/CONTRIBUTING.rst0000664000175000017500000000115400000000000017252 0ustar00zuulzuul00000000000000The source repository for this project can be found at: https://opendev.org/openstack/heat Pull requests submitted through GitHub are not monitored. To start contributing to OpenStack, follow the steps in the contribution guide to set up and use Gerrit: https://docs.openstack.org/contributors/code-and-documentation/quick-start.html Bugs should be filed on Storyboard,: https://storyboard.openstack.org/#!/project/openstack/heat For more specific information about contributing to this repository, see the heat contributor guide: https://docs.openstack.org/heat/latest/contributor/contributing.html ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591351.0 openstack_heat-24.0.0/ChangeLog0000664000175000017500000147014600000000000016377 0ustar00zuulzuul00000000000000CHANGES ======= 24.0.0 ------ * Deprecate heat-all * support "tenant\_id" property in provider\_net and router * Decode object content to string * Use consistent URL format for all client libraries * Fix inconsistent environment for stestr test path * Imported Translations from Zanata * Apply upper constraints to build api-ref * Replace oslo\_utils.encodeutils.exception\_to\_unicode * Update gate jobs as per the 2025.1 cycle testing runtime * Fix test compatibility with newer Pythons * Drop exclusion of bandit B410 test * Fix old default domain name * doc: Use dnf instead of yum * Add \`attributes\` property to OS::Designate::Zone * Loose cron record validation error check * devstack: Remove mod\_wsgi support * reno: Update master for unmaintained/2023.1 * Fix missing extension detection capability and fix arguments * Fix incomplete service name * Replace deprecated configure\_auth\_token\_middleware * Fix outdated ceilometer backend * Drop reference to Cloud Watch API service * Remove default override for config options policy\_file * Avoid duplicate '/v3' in Keystone endpoint URL * Drop workaround for Python 3.8 * Add note about requirements lower bounds * Do not import osprofiler options * Avoid wrongly passing "no\_fixed\_ips" to Neutron * Accept provider:physical\_network only for vlan or flat network type * Add skip level upgrade job * Enable GLOBAL\_VENV * Update the list of EM stable branches * Add common constraint to validate JSON string * Drop ignored item from shared\_services\_types * Fix python executable file for heat: greande GLOBAL\_VENV * Add Octavia Availability Zone resource types * Support file watcher to trigger GMR report * Declare Python 3.12 support * Actually wait for designate resource deletion * Replace deprecated glanceclient exception * Drop leftover of Image v1 API usage * Drop remaining code for Senlin support * Imported Translations from Zanata * Drop unicode prefix from tests (4) * Drop unicode prefix from tests (3) * Drop unicode prefix from tests (2) * Drop unicode prefix from tests (1) * Add wsgi module * Drop unicode prefix from integration tests * Drop unicode prefix * Move input file for oslo-config-generator * Drop duplicate oslo.cache namespace * Replace datetime.datetime.utcnow() * Remove workaround for eventlet < 0.27.0 * Drop compat code for very old heat-engine * Imported Translations from Zanata * Support online volume extension * cinder: Add mechanism to compare api microversion * Reject volume extension of in-use volume regardless of multiattach * More strictly validate max api microversion options * Get rid of RequestContext.tenant\_id * Drop SQLALCHEMY\_WARN\_20 * Imported Translations from Zanata * Refactor microversion handling for ironic * Remove old upgrade script * Treat api microversion as string * Update master for stable/2024.2 23.0.0 ------ * Remove logic for nova-network * Try archive path to download Fedora image * Remove deprecated heat-keystone-setup * Fix octavia quota resource * Remove default override for RBAC config options * Imported Translations from Zanata * Always use Identity v3 API * Fix [heat\_plugin] auth\_version * Imported Translations from Zanata * Python 3.12: do not use ssl.wrap\_socket * OS::Designate::RecordSet: allow CAA, CERT, NAPTR type * Disable openstack-cli-server * Return export\_locations as a list * Resolve B113 error (Requests call without timeout) * Remove unmaintained install/uninstall script * Fix input validation for provider net segmentation id * do not use str(url) to stringify a URL for subsequent use * Remove SQLAlchemy tips jobs * Remove reference to devstack-gate * Remove Sahara support * Remove Senlin support * trove cluster: Raise property conflict if both net and port are set * Remove fallback to pytz * Remove Python 3.8 support * Drop old excludes * reno: Update master for unmaintained/zed * Use stable Resource plugin interface in UpdateWaitConditionHandle * Fix 'if' function with only 2 arguments * Remove unused heat-functional-non-apache * Revert "Skip aodhclient plugin test" * Fix wrong shebang of loguserdata.py * Remove unused packaging library * Remove skip level upgrade job * Fix networks validation for Trove * Fix update of OS::Heat::UpdateWaitConditionHandle * Update master for stable/2024.1 22.0.0 ------ * Update regex to detect closed branch * Restore tests disabled because of libvirt bug * Fix access by admin users to resources in different projects * reno: Update master for unmaintained/xena * reno: Update master for unmaintained/wallaby * reno: Update master for unmaintained/victoria * Stop using deprecated implicit\_prefix option * reno: Update master for unmaintained/yoga * Add skip level upgrade job * Fix minor typos in documentation * common: Replace deprecated importlib API (2/2) * Remove logic for cloud-init < 0.6.0 * Drop unused default password in create\_stack\_user * Bump hacking (again) * Use zoneinfo instead of pytz if available * Allow more options to limit number of resources * Fix inconsistent naming in db api * Stop unnecessary usage of 'self' * tests: Fix unit tests using has\_calls * Deprecate resources for inactive services * Bump hacking * Adding oslo.config entry points for yaql and cache opts * Add recent release names * Drop remaining references to the removed bin scripts * Remove deprecated wrappertask decorator * Move ddt to test requirements * Add Python 3.11 to supported runtimes * Remove babel.cfg * doc: Fix the path to exclude migration scripts * doc: Drop DJANGO\_SETTINGS\_MODULE environment * Remove references to Neutron LBaaS tests * Remove deprecated internal rpc function * Clear implementations for neutron LBaaS v2 * Hide OS::Glance::Image * Loadbalancer id is required in listener creation API * Remove deprecated [DEFAULT] onready * Drop redundant code to initialize RequestContext * Enable new defaults and scope checks by default * Add devstack plugin option to enforce new defaults and scope * Remove unused bin scripts * common: Replace deprecated importlib APIs (1/2) * Add job to test with SQLAlchemy master (2.x) * db: Use raw connection to enable foreign keys * db: Don't rely on branched connections * db: Migrate to enginefacade pattern * db: Remove use of 'transaction' helper * db: Replace use of update\_and\_save * db: Only call private methods from public methods * cmd: Deprecate heat-manage migrate\_properties\_data command * db: Group related DB APIs * db: Make utility methods private * db: Remove unnecessary helper functions * db: Remove use of subtransactions * Add OS::Aodh::PrometheusAlarm resource * Imported Translations from Zanata * Update master for stable/2023.2 * Upgrade flavor for Fedora VM * tests: Add missing oslo.messaging config fixture 21.0.0 ------ * Use py3 as the default runtime for tox * Handle FK error when creating/updating software deployments * Bump Fedora image used in CI * Fix bindep.txt for python 3.11 job(Debian Bookworm) * Skip loading auth plugin in case the property is set * Fix missing oslo.versionedobjects library option * Imported Translations from Zanata * Isolate project scope and system scope * Add non-voting CentOS 9 Stream job * db: Removing aliasing of context.session * db: Don't rely on autocommit behavior * db: Replace use of strings in join, defer operations * db: Remove use of 'bind' arguments * db: Update 'select()' calls * db: Replace use of 'autoload' parameter * db: Remove use of Query.get() method * db: Replace use of Engine.execute() method * db: Don't pass strings to 'Connection.execute' * Replace use of distutils.version * context: Replace final use of user\_domain * Remove some notes no longer valid * Imported Translations from Zanata * Update the "Creating your first stack" document * Clear implementations for neutron LBaaS v1 * Hide resource types for Neutron LBaaS v2 * Add Python 3.10 to supported runtime * db: Remove layer of indirection * tests: Enable SQLAlchemy 2.0 deprecation warnings * db: Remove legacy migrations * db: Add replacement test for walking migrations * db: Migrate to alembic * Disable unstable test cases in grenade * db: Sync alembic, sqlalchemy-migrate migrations * db: Add initial alembic migration * db: Wire up for auto-generation * db: Add initial alembic configuration * db: Remove unused util methods * Integrate pre-commit * Imported Translations from Zanata * Disable B113 rule of bandit * Fix unit tests with python-novaclient 18.3.0 * fix wrong attribute in heat senlin client * Update master for stable/2023.1 20.0.0.0rc1 ----------- * fix heat update senlin cluster * Fix parsing of live data from OS::Nova::Server * Skip basic scenario test * Return HTTPBadRequest from circular dependency * Move CircularDependencyException to common * Fix setting the tempest virtual env constraints env var * Added a unit test for get\_environment\_hidden\_param * Fix unit tests for python-barbicanclient 5.5.0 * Update release note of task 47052 * Fix an assert statement * Use new get\_rpc\_client API from oslo.messaging * Decode UTF-8 body data in SwiftSignal * Honor 'hidden' parameter in 'stack environment show' command * Skip test\_stack\_update\_with\_replacing\_userdata * Explicitly pass error kwarg in nested StackValidationFailed * Skip test\_cancel\_update\_server\_with\_port * Ignore resource\_data decryption errors * Don't load all resources for policy check * Imported Translations from Zanata * Update stestr args for inclusive language * Improve map\_merge logging * Set cache\_ok to avoid further SAWarning * Retry to detach volume if nova returned error 409 * Fix get\_attr syntax in template guide * Drop implementation for OS::Magnum::Bay/BayModel * Switch to 2023.1 Python3 unit tests and generic template name * Update master for stable/zed 19.0.0.0rc1 ----------- * Imported Translations from Zanata * Replace deprecated Query.as\_scalar() * Fix compatibility with oslo.db 12.1.0 * Floating IP port forwarding resource * OS::Nova::KeyPair: Require public\_key when api version >= 2.92 * Replace KeyPair resource by TestResource * Remove CloudWatch cleanup tasks * Accept sha256 hash for swift tempurl * Followup to I7736373d03c23884158e4a1d41defafb4e2b8a4c * Don't always replace FAILED ServerGroup resources * Use openstack commands in upgrade plugin * Fix parameter merging with merge strategies * Use constraints when creating venv for grenade * Imported Translations from Zanata * Fix tests for fixtures 4.0.0 * Fix AttributeError in Python 3.8 * Set cache\_ok to avoid SAWarning * setup.cfg: Replace dashes with underscores * Add OS::Neutron::QoSMinimumPacketRateRule resource * zuul: Declare queue at top level * Remove python2 from bindep * Log parameters merged * Use previous parameter merge strategy * Use constraints when creating tempest venv * Deploy healthcheck middleware as app instead of filter * Update python testing as per zed cycle teting runtime * Make grenade job voting again * Make grenate tests voting again * Use f36 instead of f33 for testing * Imported Translations from Zanata * Remove TripleO job * Validate limit query parameter for List Software Config API * Changed minversion in tox to 3.18.0 * Remove remaining implementation for Heat CloudWatch API * Drop lower-constraints.txt and its testing * Allow multiple required\_service\_extension * Supports 'availability\_zone\_hints' for Neutron networks and routers * Disable auto discovery * Add Python3 zed unit tests * Update master for stable/yoga 18.0.0 ------ * Fix compatibility with oslo.context >= 4.0.0 * Fix for tenacity 8.0.1 * Add Python 3 only classifier * Ensure ca\_file is set for core services * Fix unit tests for croniter>=1.2.0 * Bump lower constraints for OSC * Updating python testing classifier as per Yoga testing runtime * Adjust self.assertRaisesRegex messages for py310 * Add REBUILD option to user\_data\_update\_policy * Don't test zaqar in CI * Skip aodhclient plugin test * Remove redundant usage of is\_ssl\_enabled\_service * Fix broken devstack plugin * Fix Pool resource update for session\_persistence * Add intersphinx\_mapping for sqlalchemy * Fallback to upstream for Fedora image * Fix None comparision when sorting by \`updated\_at\` * Imported Translations from Zanata * Catch all create stack project exceptions * Use yaml.safe\_load() in lbaas tests * Allow for creating server\_group with max\_nova\_api\_microversion * Remove python-ceilometerclient from requirements * Fix ServerGroup create * docs: Fix typo in developer guide * Imported Translations from Zanata * Drop six library * Fix timeout calc of nested resource groups * Reproduce bug story/2009237 * Run TripleO jobs on CentOS8 instead of CentOS7 * Add Python3 yoga unit tests * Update master for stable/xena * Use correct argument name for setting Nova KeyPair key type * Imported Translations from Zanata 17.0.0.0rc1 ----------- * Add missing oslo.cache options * Add missing [oslo\_reports] options * Allow arbitrary image properties * Make grenade job voting again * Drop support for Block Storage API v2 * Add volumev3 to shared\_services\_types by default * Use Block Storage API v3 instead of API v2 * Add "rule" property for anti-affinity * Use stdlib fnmatch module * Don't reference OS::Nova::FloatingIP in the docs * Suppress policy deprecation warnings * Switch to use \_domain\_id in context * [goal] Deprecate the JSON formatted policy file * Add availability\_zone to OS::Octavia::LoadBalancer * Fix SQLAlchemy use for version 1.4 * Add explict dependency to avoid gate unstable * [Doc] Moving to OFTC * [ussuri][goal] Update contributor documentation * Fix zuul config for heat-functional * Preserve order in list\_concat\_unique * Fix failing test\_common\_constraints * Don't update status for replaced resource * Assume interface detach called for port not found * Add Python3 xena unit tests * Update master for stable/wallaby * Allow deleting user\_creds when can't be decrypted 16.0.0 ------ * Add separate policy for updates with no changes * Fix avoid deprecation warnings from policy * Check ready status volume before extend volume * Add segments attribute to OS::Neutron::ProviderNet * Allow deleting Server/DeployedServer without swift/zaqar * Implement secure RBAC * Allow using database configs on db retry * Use neutron client for server.addresses * Fix iter bug with SQlAlchemy 1.3.23 * Don't create deployment when changing transport * Fix typo in documentation * Remove references to basestring * Switch to collections.abc.\* * Allow creating a Neutron port without fixed ips * Move testing to Fedora 33 * Bump requirements to support secure RBAC effort * Fix multiple gate issues * Update doc8 version * Detect EL8 platform-python * Imported Translations from Zanata * Imported Translations from Zanata * Align lower-constraints for new pip * Add openstack-python3-wallaby-jobs-arm64 job * Fix args for initializing trove client * Restore to vote for grenade job * Replace Fedora test image with F32 * Imported Translations from Zanata * Fix invalid argument formatting in exception messages * Adds backups and backups\_gigabytes parameters to cinder quota resource * Imported Translations from Zanata * Use TOX\_CONSTRAINTS\_FILE * Remove deprecated tail\_log function * Always reset CONF when starting the wsgi app * Add test cases to check user{domain} pattern * Regenerate trust when update with different user * [S2007220]: Added more image properties to web\_image * Adopt grenade to multinode setting * Use assertCountEqual instead of assertItemsEqual * Add Vitrage template resource * Use TOX\_CONSTRAINTS\_FILE * Imported Translations from Zanata * Add more information for tests * Update get\_hosts to use available API * As of nova microversion 2.57, personality is deprecated * Add SOURCE\_IP\_PORT to LB\_ALGORITHM allowed values * Imported Translations from Zanata * Remove gabbi tempest plugin * Delete the default value of domain in role creation * Remove grenade-heat and heat-functional-non-apache * Imported Translations from Zanata * Modify 'if' Macro to allow optional properties * Add template version 2021-04-16 for Wallaby * Increase max\_stacks\_per\_tenant for tests * Imported Translations from Zanata * Configure swap as before * Dep's should be restricted by upper-constraints * Delete default security groups created by stack * Use err.errno to access errno for socket errors * Add Python3 wallaby unit tests * Update master for stable/victoria 15.0.0 ------ * Net attr: Sort segments without name attribute first * Mark support for python3.8 * Stop testing ceilometer and aodh * Fix lower-constraints errors * Lazily cache parsed value of list/json parameters * Bump MANILACLIENT\_VERSION and use sharev2 endpoint * Fix OS::Heat::Delay resource type * Add 'smart-nic' vnic type support for OS::Neutron::Port * Correct release version for OS::Neutron::ProviderNet dns\_domain * Add U + V release codenames for docs generation * Assigning resource\_id to resource OS::Cinder::QoSAssociation * Supports 'virtio-forwarder' vnic type for port * Use correct attribute from entrypoint * Eliminate Master/Slave terminology from Designate Zone resource * Rename variables in sort key validation * Improve naming of get\_allowed\_params() argument * Use 'skiplist' to describe skipped indices in ResourceGroup code * Switch from unittest2 compat methods to Python 3.x methods * Set context username if session client is used * Don't check stack staus for already migrated stacks * Check for nova exception.Conflict rather than task\_state * S2007837: Fixes domain\_id parameter in the user find call * Imported Translations from Zanata * Use unittest.mock instead of mock * Use never expiring alarm\_url for resource attributes * Don't store signal\_url for ec2 signaling of deployments * Imported Translations from Zanata * Allow scale-down of ASG as part of update * Switch to newer openstackdocstheme and reno versions * Fix pygments style * Add native grenade zuul v3 jobs * Fix hacking min version to 3.0.1 * Use Fedora 31 for tests * Fix pep8 E741 errors * Add propagate\_uplink\_status support to OS::Neutron::Port * Use unittest.mock instead of third party mock * Imported Translations from Zanata * Allow null values to be returned from Macros * Refactor Properties.\_get\_property\_value() * Monkey patch original current\_thread \_active * Add a /healthcheck URL * Simplify logic in retrigger\_check\_resource() * Clean up API policy decorators * pep8: Enable E226 * Update pep8 rules * Deprecate wrappertask decorator * Ensure use of stored properties in actions * Check external resources after creation * Optimise resource type listing * Imported Translations from Zanata * Add Python3 victoria unit tests * Update master for stable/ussuri 14.0.0 ------ * New resource OS::Neutron::QoSMinimumBandwidthRule * Logging Consistency * Add Ironic Port resource type support * Mark OS::Neutron::QoSDscpMarkingRule as admin only * Imported Translations from Zanata * Imported Translations from Zanata * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Remove six and python 2.7 full support * Prepare the six and python 2.7 support dropping * Fix hacking warnings * Update hacking for Python3 * Use resource\_id instead of phy rsrc name in InstanceGroup * Fix doc building with Sphinx 3 * Reduce Heat engine workers * Imported Translations from Zanata * Fix genconfig tox env * Add ironic client plugin support * Sync lower contraint with test-requirement * Imported Translations from Zanata * Filter by project id in list\_security\_groups * Keep db model and migration scripts in sync * Ignore old 'vN-branch' tags when scanning for release notes * Retry transactions for DBConnectionError * Add Octavia Quota Resource for lbaas quota parameters * Support allowed\_cidrs for Octavia listener * Handle OS::Mistral::Workflow resource replacement properly * Add dns\_domain support to OS::Neutron::ProviderNet * Support handling empty string for volume AZ * Update Fedora image ref for test jobs * Fix external\_validate for Heat resources * Migrate doc path to contributor * Use resource\_id instead of phy res name \`OS::Heat::AutoScalingGroup\` * Make properties updatable for IKE policy of VPNaaS * Deprecate 'accessIPv4'/'accessIPv6' attributes * Avoid dynamic import from monasca client * Use set instead of list of server\_deferred\_statuses * [S2007072] Enables case insensitive user name search * Fix grenade job failure * [ussuri][goal] Finish dropping python 2.7 support * Do not cache volume status attribute * Docs: Fix links broken since Train release * Docs: Fix link broken since Stein release * Docs: use extrefs to link to other projects' docs * Add group property for OS::Heat::MultipartMime * Add support for Octavia's Flavor and FlavorProfile resources * Fix Designate Zone ID lookup for real * Remove image upload dependency on g-reg * New resource OS::Neutron::ExtraRouteSet * Use random exponential delay * Fix OS::Neutron::ExtraRoute delete with IPv6 * Heat templates doesn't support AZ for trove cluster * Migrate heat-functional-non-apache to zuul v3 * Cache service availability results per request * API ref: Update sample output of resource type APIs * Migrate functional test jobs to zuul v3 * Fix duplicated words issue like "can be be used" * Check task\_state of instance before volume actions * Replace git.openstack.org URLs with opendev.org URLs * Fix the misspelling of "except" * Dashboard: Add stable branch reviews * Support for shared services in multi region mode * Workaround client race in legacy nested stack delete * Remove handling for client status races * Don't get frozen definitions for resource being deleted * Remove unrequired migrate check in test * Add unit test for creating structured SW Config * Refactor test\_conditions functional test * Remove the unnecessary jeos building docs * Update the default implementation of \_show\_resource * Improve handle\_delete/check\_delete\_complete for resources * Imported Translations from Zanata * Added a Vitrage client * Support tls\_enabled for Octavia pool * zun: add 'tty' property to container * Deprecate injected\_file properties in Nova Quota Resource * Imported Translations from Zanata * Revert "Add retries when loading keystone data and fetching endpoints" * Use client\_retry\_limit for keystone connection retry * Migrate grenade jobs to py3 * Imported Translations from Zanata * Remove nova api extension checks * Drop Python2 support * Fix Designate Zone ID lookup * tox: Keeping going with docs * Update readme * Add unit test for nested stack cancel * Pre-empt in-progress nested stack updates on new update * Split 'action' policy into more granular controls * Add unit test for API 'check' action * Fix cfn-init-data path in ignition * Eliminate race in CancelUpdateTest * Don't raise not found in delete raw template * pep8: Permit ".)" at the end of resource docs * Fix Firewall policy resource * DB: Never retry a subtransaction * Don't use wrap\_db\_retry on subtransaction in resource\_create\_replacement() * Return empty list instead of None for tags * Allow tags to be removed with update --existing * Make tags handling more robust * DB: Remove unnecessary subtransactions=True * Don't mark snapshot complete while task in progress * Ignore not found when delete raw template * Squash database patches * Imported Translations from Zanata * PDF documentation build * Support domain in keystone lookups * Support Ignition for userdata * Update master for stable/train * Fix the wrong time unit for OS::Octavia::HealthMonitor 13.0.0.0rc1 ----------- * Add functional test for utf-8 decode issues * Add release note for log path changes * Remove designate v1 support * Add exception log for stack preview * Add release notes * Correct availability\_zone to be non-mandatory in heat * Fix multiple gate issues * Document block\_device\_mapping\_v2 delete\_on\_termination defaults * Blacklist eventlet 0.21.0,0.23.0,0.25.0 * Bump lower constraint of python-zunclient * Add connect\_retries when creating domain\_admin\_client * Add retries when loading keystone data and fetching endpoints * Use connect\_retries when creating clients * Ensure \_static exists with placeholder * Add retry for sync\_point\_update\_input\_data * Drop creating extra endpoints in devstack * Firewall creation failed due to "INACTIVE" * Fix invalid assert state * Fix coverity check FORWARD\_NULL error * Allow turning off max\_stacks limit * Fix Senlin policy resource * Add heat resource for creating Aodh loadbalancer\_member\_health alarm type[1] * Bump the openstackdocstheme extension to 1.20 * Change HOST\_IP to SERVICE\_HOST * Update readme * Blacklist sphinx 2.1.0 (autodoc bug) * Fix senlin cluster create * Update Debian Installation Document * Never pass 'value\_specs' to Neutron * Fix broken RST link * Show an engine as down if service record is not updated twice * Update api-ref location * Add dedicated auth endpoint config for servers * Don't resolve properties for OS::Heat::None resource * Add periodic job template * Update install docs for Keystone v3 * Update tools/README.rst with bindep info * Unit tests: Fix wrong assert function name in port update * Add local bindep.txt * Add doc for multi-clouds support * Ignore false positive Bandit test * Disallow in-place update of Port MAC address * Update keystone\_authtoken config reference * Don't use 'assert' keyword in unit tests * Allow creating trusts with allow\_redelegation * Add Blazar custom constraint plugin * Do not re-clone heat in devstack plugin * Fix regression with SW deployments when region not configured * Return None for attributes of sd with no actions * Fix intermittent error in test\_decrypt\_dict\_invalid\_key * Fix allowed address pair validation * Blacklist bandit 1.6.0 and cap Sphinx on Python2 * Ignore Not Found when deleting Keystone role assignment * Update Python 3 test runtimes for Train * Add special user options for domain user * Don't send existing attributes in value\_specs for neutron update * Fix upper-constraints.txt url * Switch to review.opendev.org * Switch to use opendev.org * Add entry\_point for oslo policy scripts * OpenDev Migration Patch * Zun: fix an issue on command property * Dropping the py35 testing * Add a non-racy check for unique stack names * Added release note for QosBandwithLimitRule direction property * Fix lower-constraints tox env to use proper constraints * Fix grenade regression introduced by multicloud support * Added 'direction' prop to QoSBandwidthLimitRule * Fix test\_cloud\_config for PyYAML 5.1 * Load existing resources using correct environment * Retry on DB deadlock in event\_create() * Log args during list\_concat * Replace openstack.org git:// URLs with https:// * Add code name for Train 13.0.0 in document * Add Code name for Stein 12.0.0 in document * Support tags for Octavia pool member * Update master for stable/stein 12.0.0.0rc1 ----------- * Use keystone session with heatclient in integration tests * Migrate to bionic test image * Override ssl options for heatclient in RemoteStack * Support remote stack with another OpenStack provider * Add tools for parse credential from Secret payload * Deprecate \`personality\` for \`OS::Nova::Server\` * Fix SoftwareDeployment on DELETE action * Add tools to get keystone auth plugin * Remove VolumeBackupRestoreIntegrationTest from skip list * Migrate tests from Xenial to Bionic * Support Neutron L2Gateway resource * Support Neutron L2GatewayConnection resource * Don't use duplicate stack names in DB unit tests * Allow users to disable the tests run by Grenade * Add a Blazar Host resource * Add a Blazar Lease resource * Don't translate event reason when adding hook event * Add disk size to the flavors * Fix indentation in HOT specification * Fix indentation in docs * Translate tenant\_id to project\_id in Octavia loadbalancer resource * Heat support for Tap-as-a-Service resources * Rename the client routines for sfc to more generic name * Fix Designate Zone lookup by name * Handle unicode in constraints * Improve best existing resource selection * Allow update of previously-replaced resources * Imported Translations from Zanata * Add release note for 1649759 * Allow global admins to operate sc resources from other projects * Allow global admins to operate sd resources from other projects * Support glance web-download * Remove setting of DEVSTACK\_GATE\_EXERCISES * Use resource description as default description property * Replace tripleo-scenario002-multinode with scenario002-standalone * Add heat-agents as required project * Catch socket.timeout for connectivity error when streaming * Remove duplicate tempest.conf setup for grenade * Bump minimal\_image\_ref * Incorrect project name in installation instructions for CentOS * Streamline conversion of resources to convergence * Use ThreadGroup.add\_timer() API correctly * Imported Translations from Zanata * Update devel info: mailing list * Implement preview for ResourceGroup * Add regression tests for conditional outputs in nested stacks * Change openstack-dev to openstack-discuss * Add rbac\_policy/subnetpool support for OS::Neutron::Quota resource * Pass role ids to trust if possible * Add tags support for ProviderNet resource * Revert "Use OutputDefinition to generate attributes schema" * Fall back to www\_authenthicate\_uri * Use fedora 29 image from nodepool mirror * Set Tempest's service\_availability setting for Heat * Remove tripleo newton and ocata jobs * Return execution state\_info in ExternalResource * Add missing ws seperator between words * Add heat-status to man page output * Add Release Notes in README * convert py35 jobs to py3 * Imported Translations from Zanata * change the dist name to 'openstack-heat' * Revert "Add openstack/placement as a required project for heat-grenade\*" * Add heat-status upgrade check command framework * Use OutputDefinition to generate attributes schema * Ensure Functions can be created without stack definition * Revert "Change "services" to "service"" * Change "services" to "service" * Delete db resources not in template * Don't depend on string interning * Increment versioning with pbr instruction * Don't quote {posargs} in tox.ini * Unit tests: Avoid deprecation warning for getargspec() * Don't use 'user' and 'tenant' args in context * Imported Translations from Zanata * Don't assert that we haven't signalled the calling thread * Calculate resource data prior to legacy updates * Set a concurrency limit on ResourceChain * Consider volume in 'reserved' status as detachment in progress * Set the octavia noop drivers correctly * Add openstack/placement as a required project for heat-grenade\* * Validate attributes schema * adding a note that specifically states the user cannot rename a stack * Check for server in attachements when checking for detach complete * Fail to release a stack\_lock in the database is a fatal action * Fix heat multi-region support with shared keystone * Imported Translations from Zanata * Use no-op drivers for Octavia in gate * middleware: return HTTPBadRequest when path is invalid * Imported Translations from Zanata * Imported Translations from Zanata * Use openstack-tox-cover template * Use oslo\_messaging for JsonPayloadSerializer * aodh/gnocchi: remove constraints on aggregation methods * Fix .zuul.yaml * remove master-only job templates from zuul config * Add functional test for legacy in-place update * Update resource definitions after legacy in-place update * Trivial: Update pypi url to new url * Ignore spurious nested stack locks in convergence * Fix bug to doc: rally\_on\_gates * Imported Translations from Zanata * Support py36 for test in tox * add python 3.6 unit test job * switch documentation job to new PTI * import zuul job settings from project-config * Rename mox\_resource\_id to mock\_resource\_id * Ignore conditions when reparsing ResourceDefinition * Do not perform the tenant stack limit check for admin user * Add UDP to supported protocols for Octavia * Imported Translations from Zanata * Unit tests: Fix mock errors with too few side effects * Update reno for stable/rocky 11.0.0.0rc1 ----------- * cors: update default configuration * Drop ceilometerclient requirement * Don't change INIT\_COMPLETE resources to CHECK\_COMPLETE * Store resources convergence-style in stack check/suspend/resume * Fix errors with issubclass() in Python 3.7 * Remove branch-specific templates from .zuul.yaml * Remove unnecessary shebangs from service scripts * Refactor deferral of stack state persistence * Unit tests: Fix slow Manila test * Handle exceptions in initial convergence traversal setup * Always start convergence worker service * Eliminate client races in legacy operations * Eliminate client race condition in convergence delete * Revert octavia pool member delete fix * Ignore RESOLVE translation errors when deleting resources * Ignore RESOLVE translation errors when translating before\_props * zun: remove the handling of not acceptable error * zun: add property 'networks' to container * Clean up test requirements 11.0.0.0b3 ---------- * Convert bytes\_used to int before comparison * Robust handling of parent and child process deaths * Hidden resources in Rocky * Adds doc8 check to pep8 * Add StoryBoard migration docs and releasenote * Add API doc for files\_container support * Option for retrieving child templates and env files from swift * Enhancements to CIDR and IP address constraints * Improve resource types list rendering * Delete snapshots using contemporary resources * zun: use containers.update for renaming * Add a new OS::Heat::Delay resource type * Ignore NotFound error in prepare\_for\_replace * OS::Nova::Server: Extend addresses attr to include network * OS::Neutron::Port: Add network attribute * Fix server\_group create issue * Revert "Remove unittests monasca until story/2002978 is released" * Bump monascaclient to at less 1.12.0 * Fix some typos in docstrings * Remove unittests monasca until story/2002978 is released * Try deleting stack if not soft deleted yet * Fix missing space in help text for caching option * Add Blazar client plugin to Heat * Fix multi region issue for software deployment * Fix Octavia health manager * Destroy mox forever * Remove mox usage from test\_heat\_client * Check NotFound with pool property in pool member * Support region\_name for software deployment * delete\_trust failure will not block a stack delete * Fix purging events from stacks converted to convergence * Refactor resource plugins for microversion usage * Change NovaClientPlugin to use MicroversionMixin * Fix an exception message * Rename poorly named function * Don't re-use resource-properties-data in backup stacks * Purge events that cross-reference with backup stack * Ignore errors in purging events * Handle invalid depends field * Fix stack delete error with none cluster * Docs: Eliminate warnings in docs generation * Add segments attribute to OS::Neutron::Net * Allow updating the segment property of OS::Neutron::Subnet * Ignore exceptions getting FloatingIP dependencies * Retry resource creation on conflict * Handle resource plugins without default\_client\_name * Improve error reporting for missing nested template * Import Zuul setting from project-config * Stop using needed\_by field in resource * Calculate convergence required\_by from graph in Stack * Don't depend on string interning * Remove mox usage from test\_volume * Unlimited cinder quotas throws exception * Add functional test for version negotiation * Use application\_url in API version document * Fix versions Controller for Py3 * Remove mox usage from \`aws/test\_volume.py\` * External\_fixed\_ips break router creation * fix tox python3 overrides * OS::Nova::Server: Extend addresses attr to include subnets * Restore auth-less version negotiation * Update comments on skipped tests 11.0.0.0b2 ---------- * Switch to neutron-\* service names * Stop testing neutron-lbaas in gate jobs * Increase limit for RandomString test\_overlapping\_classes * Update docs bug link to storyboard * Remove mox usage from test\_api\_cfn\_v1 * Remove mox from openstack\_v1/test\_stacks * Handle new oslo.service release * Delete internal ports for ERROR-ed nodes * Reset resource replaced\_by field for rollback * Download octavia image in tests * Keep old files in file map for rolling update * Don't allow nested or stacks in FAILED state to be migrated * Update http links for doc migration * Fix gerrit tool query statement * Add retry for resource\_purge\_deleted call * Change non-apache job to non-voting * Sync support network type for provider network * Fix debug logs in \_stale\_resource\_needs\_retry() * Retry on deadlock in purge\_deleted * Docs: Autogenerate config documentation * Remove mox usage from \`aws/test\_security\_group.py\` * Remove mox usage from test\_stack * Remove mox usage from \`aws/test\_network\_interface.py\` * Remove mox usage from \`aws/test\_instance\_network.py\` * Remove mox usage from \`aws/test\_waitcondition.py\` * Remove obsolete identity-v3-only job * Add Rocky versions * Make resource requires a set instead of a list * Create replacement resources with correct requires * Calculate the requires list in check\_resource * Don't pass input\_data to Resource.delete\_convergence() * Avoid double-write when updating FAILED rsrc with no change * Retry resource check if atomic key incremented * Do deepcopy when copying templates * Remove mox usage from test\_stack\_resources and tools * Remove mox usage from test\_software\_config * Remove mox usage from test\_engine\_service * Fix nova fakes for server listing 11.0.0.0b1 ---------- * Log traversal ID when beginning * Remove install-requirements script * Remove mox usage from test\_resource * Docs: modernise links * Docs: Fix broken external links * Docs: use local references for internal links * Docs: include all useful module docs * Replace pbr autodoc with sphinxcontrib-apidoc * Docs: Reorganise landing page * Fix lower-constraints * Remove mox usage from test\_api\_ec2token * Increment resource atomic key when storing attributes * Replace create\_a\_stack doc stack uuid and timestamp * Fixing Senlin incompatibility with openstacksdk 0.11.x * Fix indentation in hot\_spec.rst * Fixing unicode issue when to\_dict is called on py2.7 env * Refactor condition expression in Resource.load() * Remove mox from test\_sqlalchemy\_api * Remove mox from test\_provider\_template * Remove mox from test\_user * Remove mox from test\_hot * Remove mox from test\_s3 * Remove mox from test\_lifecycle\_plugin\_utils * Remove mox from test\_event * Remove mox from test\_stack\_user * Remove mox from test\_urlfetch * Remove mox from test\_neutron\_loadbalancer 4/4 - all rest tests * Remove mox from test\_scheduler.WrapperTaskTest * Remove mox from test\_scheduler.TaskTest * Remove mox from test\_neutron\_loadbalancer 3/4 - PoolMemberTest * Remove mox from test\_neutron\_loadbalancer 2/4 - PoolTest * Remove mox usage from test\_vpc (part 2) * Remove mox usage from test\_vpc (part 1) * remove mox usage from test\_subscription * remove mox usage from test\_queue * Remove mox usage from test\_server\_tags * Remove mox usage from test\_docker\_container * Fix broken test in DockerContainerTest * Imported Translations from Zanata * Remove mox from openstack\_v1/test\_events * tox: Don't delete Python3 .pyc files * Remove mox from test\_instance * Updated from global requirements * Add MicroversionMixin for microversion support * Remove mox from openstack\_v1/test\_resources * Move openstackdocstheme to extensions in api-ref * Remove mox from openstack\_v1/test\_actions * Dashboard creator: fix bugs query * Use wait\_random\_exponential from tenacity 4.4.0 * Updated from global requirements * Resolve race in providing deployment data to Swift * Remove mox from test\_nova\_client * add lower-constraints job * Updated from global requirements * Remove mox from test\_server * Generate user passwords with special characters * Fix entropy problems with OS::Random::String * fix logger names * Configure hidden tag for tempest test * Remove mox usage from test\_nokey * Remove mox from test\_neutron\_metering * Updated from global requirements * Remove mox from test\_neutron\_security\_group * Persist external resources on update * Docs: Make stack domain users docs visible * Remove mox from test-neutron-firewall * Create doc/requirements.txt * Updated from global requirements * Remove mox from test\_neutron\_network\_gateway * Turn grenade-heat-multinode to voting * Remove mox from test\_neutron\_loadbalancer 1/4 - HealthMonitorTest * Remove mox from test\_scheduler.DependencyTaskGroupTest * Use mock in test\_auth\_password.py * Remove mox usage from test\_gnocchi\_alarm * Docs: Remove contrib/rackspace section from template guide * Remove mox from test\_neutron\_provider\_net.py * Imported Translations from Zanata * Updated from global requirements * Fix some reST field lists in docstrings * Remove mox from test\_neutron\_vpnservice * Remove mox usage from test\_scaling\_group * Remove mox usage from test\_heat\_autoscaling\_policy * Correct behaviour of update\_replace property in test resource * Remove mox from test\_extraroute * Remove mox from test\_neutron\_floating\_ip * Remove mox from test\_waitcondition * Remove mox from test\_stack\_resource * Fix for validating VPN service, Ipsec site connection status * Updated from global requirements * Fix doc build * Remove usage of mox from test\_eip * Remove mox usage from test\_floatingip * Run the specified set of tests in grenade-multinode job * Remove mox usage from test\_template * Remove mox from test\_common\_policy * Remove mox usage from test\_stack\_update * Imported Translations from Zanata * Return nested parameters for resource group * Imported Translations from Zanata * Change transport\_url in grenade-multinode job * Imported Translations from Zanata * Update .stestr.conf with the group\_regex * Clarify resource deprecation process * Handle non-stored stack in resource group * Fix convergence unit tests for py36 * Fix race conditions in test\_create\_update * Updated from global requirements * Imported Translations from Zanata * Unit tests: Fix broken Monasca client test * Pass mistral execution argument by name * Imported Translations from Zanata * Ignore dns domain NotFound when deleting record * Imported Translations from Zanata * Update reno for stable/queens * Always use string ID for WaitConditionHandle signals 10.0.0.0rc1 ----------- * Sync releasenote for Queens * Fix some typos * Remove contrib/rackspace * Prioritise resource deletion over creation * Fix races in conditionals tests * Handle data inconsistency in grouputils * Add Heat review dashboard config files * Change note for version/release from releasenotes * Fix coverage run with tox -ecover * Fix hot\_spec.rst in Template Guide * Unskip StackCancelTest * Remove old import path in barbican * Imported Translations from Zanata * Fix README.rst for in-tree functional tests * Imported Translations from Zanata * Update openstacksdk construction * Zuul: Remove project name * Fix senlin/sdk client plugin unit tests * Fix some docstrings for octavia resources * include sample config file in docs * Remove heat-api-cloudwatch from man pages list * Updated from global requirements * Cleanup remaning doc for CloudWatch API * zun: add property mount to container * Log useful information in the API log * Move context middleware earlier in pipeline * Replace random with SystemRandom for RandomString * Fix for None base\_url for Monasca client * Imported Translations from Zanata * Fix senlinclient plugin 10.0.0.0b3 ---------- * Update test image * Remove OS::Heat::HARestarter * Move CooldownMixin tests to group test modules * Remove use of CooldownMixin with scaling policy * Remove db api and tables for CloudWatch * Remove stack watch service * Remove use of heat\_watch\_server\_url * Remove CloudWatch API * zun: add hostname, hints and security\_groups * Updated from global requirements * Allow iteration over files dict before template stored * Restore functional test jobs * Remove ReloadOnSighupTest * Remove integration and configuration tests * Remove potential co-gating integration tests * docs: fix user-data end user guide link * Imported Translations from Zanata * Add scenario002 tripleo jobs to experimental pipeline * Remove RH1 OVB jobs from configuration * Add some steps for "Preparing to create a stack" * Updated from global requirements * Add octavia L7Rule Resource * Add octavia L7Policy Resource * Allow octavia specific client config options * fix a typo in heat-manage.rst: s/covergence/convergence/ * Exclude updated networks - match actual interface state * Don't load nested stack to get TemplateResource template * Avoid loading nested stack in CloudFormation Stack resource * Eliminate nested stack loading in InstanceGroup/ASG scaling * Don't load nested stack to get ResourceGroup blacklist * Get Instance/AutoScalingGroup attributes from nested stack outputs * Get ResourceGroup/Chain attributes from nested stack outputs * Unit tests: test ResourceChain attributes better * Unit tests: refactor nested stack attributes tests * Supply outputs for reference IDs in StackResources * Include outputs in rolling update of ResourceGroup * Fix resource. attribute caching in ResourceGroup/Chain * Fix attribute caching in Heat AutoScalingGroup * Fix attribute caching in SoftwareDeploymentGroup * Remove tests for Interop Tests for add-on trademark program * Allow run tests for both tempest plugin and regression tests * Fix nested template genearation when attribute path is not string * change import order * Updated from global requirements * zun: check delete complete for Zun container * zun: delete container by using 'stop' option * Updated from global requirements * Updated from global requirements * Imported Translations from Zanata * heat\_docker: Require docker instead of docker-py * Imported Translations from Zanata * Log when we bail out without checking a resource * Include value in string Property type error * Cache the TemplateResource reference ID like an attribute * Eliminate errors getting TemplateResource OS::stack\_id * Unit tests: fix absurdly slow tests * Add project tags to heat orchestration * Updated from global requirements * Don't load nested stack in batched ResourceGroup * Avoid loading nested stack in some grouputils functions * Avoid always loading nested stack on update * Remove deprecated nova api calls from EIP/EIPAssociation * Replace deprecated nova calls for floatingip * Imported Translations from Zanata * Add removal\_policies\_mode to ResourceGroup * "service" is not a default project in rdo * Fix bypass list length check when all values are None * Revert "Register heat tempest plugin" * Enable octavia services for gate testing * Add octavia HealthMonitor Resource * Add octavia Loadbalancer Resource * Add octavia Listener Resource * Add octavia Pool Resource * Add octavia PoolMember Resource * Remove unused policy cp in devstack * Remove policy.json from setup.cfg * Imported Translations from Zanata * Imported Translations from Zanata * Add octavia client plugin and constraints * Match on subnet update\_networks\_matching\_iface\_port * Re-factor and improve update\_networks\_matching\_iface\_port * Refactor unit tests for server network * Fix a typo in tests * Use appropriate exception in StackResource.get\_output() * Updated from global requirements * Enable to specify network for Trove Cluster * Use stestr for unit tests * Imported Translations from Zanata * Remove setting of version/release from releasenotes * Bypass list length check for None values in repeat function * Don't observe reality if name property is None * [policy in code] part 7 add sample and releasenote * [policy in code] part 6(cfn, cloudwatch) * Allow reserved status for attach check * Don't log PolicyNotRegistered when check resource type * Protect prepare\_update\_replace() with resource lock * Updated from global requirements * [policy in code] part 5 (software-\*) 10.0.0.0b2 ---------- * Build heat.conf reproducibly * Updated from global requirements * Fix reset\_stack\_status * Update Zuul branch limit * Translate networks and subnet in cluster template * [policy in code] part 4 * [policy in code] part3 (resource types) * [policy in code] part 2 (stacks) * Add environment\_files parameter in CREATE\_STACK request * Fix sahara job type validation issue * Updated from global requirements * Ignore resources with non-existent template * Avoid RPC call in TemplateResource.get\_reference\_id() * Remove SSLMiddleware from oslo.config namespace * Use heat-tempest-plugin in grenade job * Use heat-tempest-plugin for integration tests * Zuul: add file extension to playbook path * ForceDelete Instance * Move grenade multinode job out of experimental * Add more logging for software deployment updates * Updated from global requirements * [policy in code] Part 1 Base framework * Speed up event listing with nested stacks * Eager-load properties for nested resource list * Check swift deployments before update * zuul: add tripleo ovb-ha in experimental pipeline * Retry on DB deadlock when updating resource * Refactor CooldownMixin * Updated from global requirements * Use correct raw string format * Ensure the whole ResourceDefinition is validated * Define resource/output definition sections with constants * Allow paths as lists in function.validate() * Updated from global requirements * Updated from global requirements * Return Environment from validate\_template * Deprecate OS::Aodh::Alarm * Generate correct name for Sahara cluster * Added tags attribute to the template parameter * Updated from global requirements * Imported Translations from Zanata * Add functional tests for stack cancel * Don't return the sensitive information to user * Add REST api support for cancel without rollback * Fix logic error in sqlarchemy api * Remove non-updatable attrs from SFC update test * Updated from global requirements * Define constants for Neutron client resource types * Document RBAC Policy allowed values * noauth: only set token\_info if set * Downgrade WARNING-level log * Don't try resource-level locks when stack locked * Migrate grenade jobs to zuul v3 * Set stack.thread\_group\_mgr for cancel\_update * Retrigger new traversals after resource cancellation * Create replacement resource atomically * Migrate functional jobs to Zuul v3 * Do deep redirects from old docs.openstack.org URLs * Fix non-destructive upgrade for deprecated res types in convergence * Refactor the format\_validate\_parameter fuction to reduce complexity * Fix AodhAlarmTest to use gnocchi * Imported Translations from Zanata * Imported Translations from Zanata * Skip AodhAlarmTest * Cleanup ROLLBACK\_COMPLETE stack after the test finishes * Use argument default None for 'last\_evaluated' * Remove cloudwatch service from devstack plugin * Move FakeKeystoneClient to engine.clients 10.0.0.0b1 ---------- * Check for existing interfaces before adding implicit one * Use stack\_id of None for service timer * Replace pycrypto with cryptography * Do not validate property network of sahara cluster * Imported Translations from Zanata * Unit tests: Remove deprecated oslo\_db test case classes * Unit tests: Don't leave RPC server running * Unit tests: ensure all threads complete * Don't attempt to update tmpl ID when resource in progress * Retrigger new traversals after resource timeout * Make scheduler.Timeout exception hashable * Add integration tests for simultaneous updates * Allow configuring payload of noauth middleware * Raise HTTPNotFound if not in create or adopt * Remove SSLMiddleware * Hidden OS::Designate::Record and OS::Designate::Domain * Correct the filter attribute of db model 'ResourcePropertiesData' * Imported Translations from Zanata * Raise NotFound() when group member does not exist * Modify the docstring of method 'check\_is\_admin' * Updated from global requirements * Correct example for list\_concat-unique function * Fix regex for updated\_time in PATCH update api test * Remove use of auth cache directory * Remove unused attribute 'RESOURCE\_TYPE' for tests * Add action\_wait\_secs for update * Imported Translations from Zanata * Remove redundant null engine id check * API Tests: Ensure updated\_time changes in stack patch update * Allow convergence-specific Tempest tests * Fix get\_watch\_server\_url for ipv6 addresses * Skip test\_notifications.NotificationTest.\* functional tests * Increase interface detach polling period * Add release note for StackDefinition API * Make private flavor tenant access works * Fix translate tenants in flavor * Use a namedtuple for convergence graph nodes * Don't use Dependencies repr in tests * Increase interface detach polling period * Ignore errors in OS::stack\_id output * Use show\_output in TemplateResource.get\_reference\_id() * Don't load resource data for list\_outputs * Speed up show-stack with outputs in legacy path * Replace SCREEN\_LOGDIR with LOGDIR * Add attributes schema for OS::Keystone::Project * Make sure we can get watch server url in uwsgi mode * Defer exceptions in calculating node\_data() * Updated from global requirements * Fix unit tests with oslo\_messaging 5.32.0 * Add default configuration files to data\_files * Add catch-all for property errors in implicit dependencies * Ignore property errors in implicit dependencies * Refactor FloatingIP add\_dependencies() method * Update incorrect timezone description * Updated from global requirements * Improve update\_wait\_condition\_handle docstring * Fix client plugin name when calling ignore\_not\_found * Remove the existing snapshots from the backend * Updated from global requirements * Avoid cloudwatch endpoint retrieve when disabled * Don't override get\_reference\_id() for scaling policy * Updated from global requirements * Don't mock Target unnecessarily * Support property 'domain' for keystone role * Add support for tagging Mistral workflows * Updated from global requirements * Add missing 'of' in order description * Check for keystoneauth exceptions in mistral client plugin * Don't remove uwsgi config files on stop * Remove vestigate HUDSON\_PUBLISH\_DOCS reference * Updated from global requirements * Add sem-ver flag so pbr generates correct version * Parse live data with correct key 'readonly' * Updated from global requirements * Updated from global requirements * Unskip StackSnapshotRestoreTest * Set resource.\_properties\_data=None when loading from db * Adds 5 backport db migration place holder for Pike * Return stack.outputs when stack in DELETE\_FAILED * heat config eliminate ec2authtoken * \* Add new HOT version for Queens release * \* Add Queens version '10.0.0' in doc * Updated from global requirements * fix heat\_keystoneclient config gen * Add release notes for heat * Run heat api tests after upgrade * Add gabbi api tests for stack update/patch-update * Fix error for invalid auth\_encryption\_key * Delete redundant code * Don't call update\_port with empty dict * Revert "Disable nova quota check in gate jobs" * Make sure port updating works if enable observe * Reoder barbican container import * Update reno for stable/pike * Rollback stack with correct tags 9.0.0.0rc1 ---------- * Imported Translations from Zanata * Fix race in ZaqarEventSinkTest.test\_events * Allow conditions to return null values * Use zaqar v2 in integration tests * Switch integration jobs to use local mirrors * Extend addresses attribute of Zun container * Minor doc fix: tmpl\_diff argument for handle\_update * External subnet for floating ip * Update URL in README.rst * Fix readme guide for heat\_integrationtests * Add converge flag in stack update for observing on reality * Updated from global requirements * Change exception class from monascaclient * Updated from global requirements * Fix devstack plugin for multinode deployment issues * Updated the template guide * Add diskimage-builder project install * Updated from global requirements * Update security groups for server interfaces * Refactor network calculation * Implement handle\_\_cancel for SoftwareDeployment * Remove broken heat.resource\_type custom constraint * Only check service availability during validation * Do not disassociate floating ip again * Removed unnecessary setUp() call in tests * Fix formatting in make\_url error messages * Eager load resource\_properties\_data in resource * Allow CREATE\_COMPLETE status when cluster/bay update check * Allow lazy load of raw\_template but log warning * Add upgrades guideline for operators * Remove install-guide env which is no longer effective * Set \`public\` as update allowed for cluster template * Fix networks update from [] to None * Correct wrong tests of server networks update * Updated from global requirements 9.0.0.0b3 --------- * Updated from global requirements * Remove duplicated \`show\_deleted\` param extraction * Add unit test for translate with no translate value * Remove unrequired check None in bay resource * Updated from global requirements * Updated from global requirements * Mark stack failed when exception raised in resource check * Move in-tree admin guide from openstack-manuals * Move in-tree config-reference from openstack-manuals * Move install guides to doc/source/install * Support tenacity exponential backoff retry on resource sync * Don't get resource twice in resource\_signal() * Trivial:remove unused import and add reasonable path in import * Neutron resources observe reality implementation * Updated from global requirements * Fix no-change updates of failed resources with restricted actions * Respect locks when changing FAILED resource to COMPLETE * Strip disabled resources from depends\_on in add\_resource() * Use StackDefinition.all\_rsrc\_names() API * Use stored properties values in actions * Rename Resource.\_resolve\_all\_attributes() method * Avoid creating two Stacks when loading Resource * Implement all\_dep\_attrs() more efficiently for get\_attr * Cache dep\_attrs for all resources in definitions * Cache names of required resources in ResourceDefinition * Add a way to get the resources depended on by an output * Remove obsolete cache\_data from Stack * Use StackDefinition in intrinsic functions for resolving data * Optimise the function.dep\_attrs() function * Always return Resource from ResourceDefinition.dependencies() * Get dep\_attrs from StackDefinition * Don't call Stack.has\_cache\_data() in Functions * Update StackDefinition resource data when getting outputs * Handle PublicIp of None in AutoscalingGroup InstanceList * Optionally include attrs referenced in outputs in node data * Update StackDefinition resource data on metadata refresh * Add Output definitions to StackDefinition * Unit tests: Ensure StackDefinition is up to date * Unit tests: make tests more realistic * Check for circular dependencies in template validation * Add trunk functional testcases to heat * Only validate properties once during create resource * To merge the occ data for OS::Heat::DeployedServer * Allow only validate external resource template * Add release note for repeat improvement * Use placeholder data for resources prior to creation * Use stored properties values during signal * Use the stored property values of LaunchConfig * Unit tests: Do assertions on stored properties data * Handle non-existent resources in list during update * Fix no message attribute in exception * Fix subnet validate() for subnetpool resource ref * Fix handle\_create of ResourceGroup * Support 'permutations' for 'repeat' function * Updated from global requirements * Fix barbicanclient and glance upload issue * Fix OS::Zaqar::MistralSubscription with mistralclient 3.0 * Make standalone heat work with keystone v3 * Add tag for server nic * Cinder volume attachment attributes should not be cached * Add CACHE\_NONE for FloatingIP attributes * Show correct version of data in convergence resource list * Don't load new copies of current resources * Updated from global requirements * Change tags type from 'string' to 'array' * switch from oslosphinx to openstackdocstheme * Always cache attributes in outputs in Resource.node\_data() * Handle errors calculating dep\_attrs for nested get\_attr * Add a functional test for nested get\_attr functions * Log unhandled exceptions in worker * Create explicit outputs in StackResources * Fix ResourceActionNotSupported errors in log * Add test for basic resources as heat define test * Add httpd documentation and sample configs * Revert "Revert "Enable heat to use uwsgi with devstack"" * [api-ref] Correct config\_id in url instead of in body * Fix \_retrigger\_replaced in convergence worker * Fix nonsensical docs in dependencies.py * Fix race in new condition test * Keep existing stack tags for patch update * Fix wrong function description * Imported Translations from Zanata * Remove obsolete docbkx directory * Fix a DB error when updating the resource attributes * Don't store attributes if resource not stored * Refactor out a new Resource.referenced\_attrs() method * Add an add\_output() method to Template * Improve StackValidationFailed exception * Get cancellation grace period correctly * Handle post-delete hooks correctly * Use get\_rpc\_transport instead of get\_transport * Update functional tests missing skip check * Add reno for soft policies supporting * Cache attributes with custom handling * Updated from global requirements * New resource: Neutron Trunk * Updated from global requirements * Revert "Support attributes with dynamic scheme" * Mark combination alarm as None resource * Add \`is\_placeholder\` resource data for placeholder resource * Fix snapshot delete in convergence * Deprecate 'deferred\_auth\_method' config option * Disable nova quota check in gate jobs * Filter out resources not in template when listing * Replace assertRaisesRegexp with assertRaisesRegex * Add an example on how to use 'contains' as condition * Add functional test for conditions during updates * Resolve Macros when copying templates * Add Container to Zun resources * Add releasenotes for 'contains' function supporting * Pretty print parameters in stack-show * Don't store rsrc\_data before zaqar queue created * Add 'contains' function * Fix py35 tempest issue * Mark Server os\_collect\_config attribute as CACHE\_NONE * Store resource attributes in the DB * Never cache Senlin cluster outputs * Never cache the 'show' attribute * Ignore string default for software config input * Updated from global requirements * Use correct user password as occ credential * Updated from global requirements * Catch type errors when casting to int * Document user\_data replace-on-update policy * Fix races in SoftwareDeploymentGroupTest * Reorder the update task for nova server resource * Updated from global requirements * Increase cooldown in test\_asg\_cooldown * Fix nova floatingip resources * Use signal\_url in TestAodhAlarm scenario test * Always return live resource attributes in list\_stack\_resources * Correct validation of wait conditon * Support object\_type 'qos\_policy' for neutron rbac * Allow for keeping prefix in heat\_url 9.0.0.0b2 --------- * Get the deployment group resources again after CREATE\_COMPLETE * Revert "Enable heat to use uwsgi with devstack" * deployment\_swift\_data property for server resources * Updated from global requirements * Deprecate property 'metadata' of OS::Heat::DeployedServer * Avoid creating new resource with old template * Add validation of block\_device\_mapping\_v2 * Load 'name' field for db resource * Enable heat to use uwsgi with devstack * Support auth\_algorithm 'sha256, sha384, sha512' * Updated from global requirements * Fix logging in devstack * Updated from global requirements * Correct the error msg for 'repeat' function * Check for correct Neutron exceptions harder * Skip StackSnapshotRestoreTest * Cache policy enforcer * Skip snapshot integration tests * Don't always validate property values in ResourceChain * Check for correct neutron exceptions * Load all templates for generating parameter schema * Using fixtures instead of deprecated mockpatch module * Remove deprecated functions * Clarify make\_url validation errors * Updated from global requirements * Allow function 'yaql' as condition function * Implements custom resource type managed by Mistral workflows * Fix workflow update * Updated from global requirements * Refactor neutron constraints * Fix validate() of rbac resource * Updated from global requirements * Use six.text\_type() instead of str() to serialise status * Updated from global requirements * Replace assertRaisesRegexp with assertRaisesRegex * Fix handle\_restore for server and volume resources * Fix check\_snapshot\_complete for nova server * Add ParameterGroups for the nested stack during stack.validate * Adds releasenote for 'support-auto-none-special-network' * Support 'list\_concat\_unique' * Mark the default policy usage for neutron resource * Fix snapshot/restore of volumes * Fix restore with convergence * Updated from global requirements * Bring back EIP unit tests * Enable mutable config in Heat * Enable DeprecationWarning in test environments * Add releasenotes for Magnum resource replacement * Migrate BayModel to ClusterTemplate * Updated from global requirements * Use non-blacklisted resources for RG validation * Fix validation of function 'list\_concat' * Change user name limit to 255 characters * Fix python-novaclient 8.0.0 related issues * Fixes use of pre-existing workflows for OS::Mistral::Workflow * Updated from global requirements * Yield to other greenthreads during validation * Catch all exceptions when getting console url attribute * Updated the description about the verify operation * Don't provide defaults for properties depending on extensions * Supports string values 'none' and 'auto' for networks * Remove usage of parameter enforce\_type * Fix typo in contributing/blueprint.rst doc * Use common function for logging with devstack * Updated from global requirements * Bring back signal-related tests * Use group\_regex to group gabbi api tests * Deprecate \`OS::Magnum::Bay\` resource * Get rid of timeutils.round\_to\_seconds() * Deal correctly with negative elapsed time * Corrected max secs for concurrent trans retries * Correctly increment the resource atomic\_key after a metadata update * Don't set any type on input config default * Don't fetch stack before update in stack\_update() * Allow retries when resource acquires lock * Updated from global requirements * Explicitly compare IDs to None * Imported Translations from Zanata * Get rid of resource\_validate flag in Stack * Add os\_collect\_config attribute to server resources * Remove FnBase64 from Resource * Updated from global requirements * Less unicode weirdness in short\_id * Updated from global requirements * Correct the class equivalent judgement error * Support adding tags for router * Support set tags for neutron subnetpool * Support adding tags for subnet * Support set tags for neutron port * Imported Translations from Zanata * Use session and region\_name in mistral client plugin * Use child\_template() in AWS::CloudFormation::Stack handle\_update * Support adding tags for network * Include template url in nested stack parse error * Fix translated required properties * Fix arguments for OS::Mistral::CronTrigger create * Implement Zun client plugin * Set COMPLETE for failed resource if no update/replace * Low-level db delete of events should be synchronous * Consolidate resource locking with state changes * Use mock for router tests * Add releasenote for neutron segment support * Add l2\_adjacency attribute for network * Add segment property for subnet * Add segment resource * Add the HOT fuction str\_replace\_vstrict * Revert "Generate placeholders for resource proxies before validation" * doc: Add description of list\_concat in pike notes * Copy template version when update fails * Implement list\_concat function * Load "lighter" db resources when appropriate * Use mock for subnet tests * Add auth\_version config option * Allow to specify 'user' for keypair resource * Update SUSE distro information in install guide * Fix doc generation for Python3 * Add openstacksdk plugin * Add attribute schemas to \`OS::Magnum::Cluster\` * Add magnum cluster resource * Remove unnecessary old translation mechanism * Add few functional tests for translation * Enable new translation mechanism * Deprecate 'attachments' in favor of 'attachments\_list' * Updated from global requirements 9.0.0.0b1 --------- * Don't invlidate auth/client plugins for token expiry * Use project\_name/admin\_project\_name config option * Wait for the policy to be done in tests * Fix calls to call\_until\_true * Updated from global requirements * Add constraint for cluster template * Don't escape /s in make\_url query strings * Remove subunit-trace fork * Updated from global requirements * Improve logging of convergence scenario tests * Generate placeholders for resource proxies before validation * Unit tests: fix signal URL immutability tests * Update NodeData in legacy path * Add sem-ver flag so pbr generates correct version * Fix format\_stack\_preview for py3 * Only recreate CHECK FAILED resources in ResourceGroup * Get rid of undesirable properties.data usage * Add .idea pattern to .gitignore * Updated from global requirements * Validate property values in nested stacks again * Delete internal ports when detach them * Support to get webmks console url for server * Fix docs for length constraint supported types * Don't set metadata for deleted resources * Remove encoding for application/json in response * Fix remaining py3 tests * Release stack lock after export stack * Updated from global requirements * Updated from global requirements * Use pydoc for formatting docstrings * Tidy up Stack.supports-check-action() * RPC Client: don't cast() delete\_stack by default * Fix some functional tests for py3 * Use mock instead for network tests * Error log expression * Use exception\_filter in RPC client * Remove log translations * Delete software deployment before credentials * Update rally link * OS::Trove::Instance observe reality implementation * Imported Translations from Zanata * Skip integration tests when Swift is not available * Check all resources with custom guidelines * To reset metadata for resources when mark healthy * Add magnum Cluster Template resource * Remove old oslo.messaging transport aliases * Add attributes schema for OS::Keystone::User * Updated from global requirements * Updated from global requirements * Put error response codes into 'error' group * Modify 'List template functions' API response parameter * Add a make\_url intrinsic function * Add new HOT version for Pike release * Fixes heat-keystone-setup-domain authentication failures with v3 * Squash database patches * Updated from global requirements * Catch Unauthorized in delete\_trust() * Sleep between check\_resource calls * Only pass 'endpoint\_override=endpoint' with heat client * Use public and unified method get\_console\_url() * Remove unused code in prepare\_ports\_for\_replace() * Remove bandit.yaml in favor of default config * Remove usage of option 'verbose' * Remove support for py34 for heat * Store project\_domain in project\_domain\_id * Modify stack\_name regular expression in Orchestration API * Fix api-ref build with Sphinx 1.5 * Make a backward compatible docutils fix * Add soft policy for nova server group * Disable ec2 collector for deployed-server * Add "Resolve" rule for Translation * Implement "Add" rule for Translation * Add "Replace" handling for translation * Add translation method for Translation * Initial add Translation-in-place mechanism * Fix validation in TranslationRule * Fix doc build * Fix missing spaces in strings * Handle zero values when merging environments * Updated from global requirements * Update test requirement * Eager load event's resource prop. data when appropiate * Omit rsrc prop data in rpc api for multiple events * Remove unused event\_get methods * Don't eager load raw\_template in a few places * Remove unused variable * Remove domains \*-log-\* from compile\_catalog * Updated from global requirements * Switch image mirror * Encode exception message in tests * Updated from global requirements * Replace deprecated notification\_driver in tests * Use a sentinel to indicate when all attributes are required * Use a StackDefinition to store the stack definition * Add a StackDefinition class * Define resource actions/statuses in a separate class * Separate management of parent resource into separate class * Add a node\_data() method to Resource * Add a NodeData class to roll up resource data * Fix config file management in tests * Try to fix local.conf creation in tests * Revert "Using os-testr to get better report" * Pass on outputs errors to parent stacks * Add full path for Property * Fix using parent\_name for Properties * Skip test\_update\_with\_mac\_address without admin credentials * Fix the incorrect link of the rdo installation guide * Still wait for hooks on failed resources * Use keystone session with clients * Using os-testr to get better report * Stop showing json deserialized message in log * Data migration enabling storage of resource attributes * Reduce wait condition signal number * Change minimal\_image\_ref to cirros-0.3.5-x86\_64-disk * Use keystone v3 and session for swiftclient * No need to check if resource not created * Add CEPHFS manila share protocol * Updated from global requirements * Check detach\_interface/attach\_interface complete * Updated from global requirements * manila resources observe reality implementation * sahara resources observe reality implementation * Mark deprecated resources as HIDDEN * Just to migrate existing resource to backup stack * heat stack-update assumes interfaces have fixed ip addresses * Fix number of issues with grenade job * Correct resource type in zaqar notification releasenotes * Fix wrong indents for docs * Store user\_domain in self.\_user\_domain\_id * Only reset current resource's attrs in state\_set * Fix default parse\_live\_resource\_data * Don't use keystoneclient for auth\_ref * Remove unused url\_for method from heat\_keystoneclient * Update osprofiler about doc * Lazy-load resource\_properties\_data for events * Revert "Enable debug logging in unit tests" * Prepare for using standard python tests * Add Pike version '9.0.0' in doc * Use stored value in OS::Heat::Value resource * Enable debug logging in unit tests * Log stack status changes in unit tests * Use region\_name when creating keystone client * Add 'pools' attribute to lbaasv2 loadbalancer * Add 'default\_pool' property to lbaasv2 listener * Add 'loadbalancer' property to lbassv2 pool * Tail correct log files with devstack * Update reno for stable/ocata 8.0.0.0rc1 ---------- * Fix restore\_prev\_rsrc assert weakref * ResourceGroup fix issue with batch create and zero count * Fix swift key generation in python3 * Add heat-manage subcommand to migrate legacy prop. data * Move CFN pseudo functions out of Parameters base class * Don't try to store i18n messages * Don't mock internal method of ceilometerclient * Fix ceilometerclient mocks for 2.8.0 release * Fix i18n issue in event.py 8.0.0.0b3 --------- * Add attribute 'collect' to senlin cluster * Keystone::Project observe reality implementation * Add missing import for zaqar client * Improve resource.NoActionRequired * De-duplicate properties\_data between events, resources * Updated from global requirements * Delete accidental artifact * Fix for resources stuck in progress after engine crash * Don't make client calls when adding dependencies * Apply super \_show\_resource() for neutron resources * Don't override \_show\_resource() for image * Remove py26 support * Updated from global requirements * Always replace DELETE\_COMPLETE resources on update * Don't look at convergence\_engine conf option in Resource * Updated from global requirements * Refactor OS::Trove::Instance resource tests * Provide unified \_show\_resource() for senlin resources * Fix nits of server tag test * Fix handle\_create() of senlin cluster resource * Use os\_cache in place of no\_cache * Fix MistralClientPluginTest.test\_create * Skip integration tests when not configured * Add policies property to cluster resource * Efficient passing of attrs during traversals * Add reno for OS::Sahara::Job * Add translation rules for OS::Sahara::Job * Add sahara constraints * Refactor \_show\_resource() for neutron resources * Add translation rules to senlin policy resource * Add reality support to senlin node resource * Add translation rules to senlin node resource * Switch to heat-agents for docs * Change order of init \_facade and osprofiler * Updated from global requirements * Add port\_security\_enabled property to ProviderNet * Add gabbi tests for resource REST API * Add cluster property to senlin node resource * Don't load resources in dep\_attrs * Don't load non-referenced resources from DB * Allow admins to get resource by physical resource id * Remove handle\_delete() for keystone group * Avoid to use internal attribute '\_info' * Release notes for designate v2 support * Make API services with apache the default * Make number of workers configurable with apache * Set content-type when signaling deployment * Use super method \_show\_resource() for alarms * Fix validate\_external() * Don't use MagicMock for stacks in tests * Ignore dependency errors with conditions * Fix errors resulting from over-long Zaqar queue names * Unit tests: Don't mock client\_plugin for Zaqar subscription * Allow query types other than string in Aodh alarms * Deprecate OS::Glance::Image * Sort JSON output in intrinsic functions * Mark nested stacks unhealthy by refid * Add OS::Neutron::Quota resource * Default to Glance v2 * Add docs of update/replace \*\_FAILED resource for developer * Allow to scale when group is in CHECK\_COMPLETE * Remove leftover install\_heat\_other * Add reality support for senlin cluster resource * Include an OS::stack\_id output when generating a template * Correct output values when generating templates * Correct to 'heat\_config\_notify\_script' * Add translate rules for senlin cluster * Don't replace failed neutron resources always * Check \`resource\_validate\` before validate external * Deprecate designate v1 resource plugin * Add designate recordset support * Add designate zone support * Add note for env prepare of \`Custom image script\` * Do not replace failed server always * Check if image\_identifier is UUID * Do nothing in prepare\_for\_replace if server not created * Fix senlin resources update failure * Updated from global requirements * Release notes for OS::Keystone::Domain * Remove greenlet useless requirement * Replace always if resource is in CHECK\_FAILED * Don't try detach interface when server not found * Remove repeat entity defination * Enable resource \_show\_resource with dict type * Use correct charset when create a text/\* type MIME * To reset metadata for resources when mark unhealthy * Fix a small nit of docs * Add more gabbi REST API tests * Initial heat REST API tests with gabbi * make the rabbitmq configuration simpler * Set access\_policy for messaging's dispatcher * Updated from global requirements * Use heat.engine.resource.UpdateReplace * Enable coverage report * Don't use keystone\_authtoken section for trust * Use 'openstack' commands instead in docs * Make sure heat works with novaclient 7.0.0 * Add OS::Sahara::Job resource * Use \_show\_resource() of super class * Avoid to use same code for aodh resources * Sanitize newly added heat-manage command * Trivial fix some typos in api-ref * Fix for validating firewall resource status * Updated from global requirements * Fix string declaration in environment\_util.py * Returns project info while getting sd with admin context * Add resource\_properties\_data assoc. to resource, event objs * Add the ResourcePropertiesData object * Add resource\_properties\_data data migration * One transaction per encrypt/decrypt batch * map\_replace allow noop colliding replacements * Make \*\_id/name\_url required for api-ref * Skip test\_server\_signal\_userdata\_format\_software\_config * Recreate db only if db service is enabled * Use metadata and personality with server rebuild * Make subnet required for lbaasv2 member resource * Correct the order of assertEqual * Don't validate rsrc properties with external\_id * Several improvements of pluginguide.rst * Avoid Forcing the Translation of Translatable Variables * Update the constraint value of schema 'ACCESS\_TYPE' for Manila share * Allows to create x509 keypair * Allow to create admin context for tests * Updated from global requirements * Use urllib to correctly escape URLs for Zaqar queues * Add convenience properties for alarm queue actions * Add a zaqar.queue custom constraint * Nova Flavor Resource Update * Updated from global requirements * Refactor batch encrypt/decrpyts of params, props * Update fedora image in devstack * Updated from global requirements 8.0.0.0b2 --------- * Refactor BaseAlarm.actions\_to\_urls() * Fix inconsistencies in updating alarms * Default implementation parse\_live\_resource\_data * Correct response of template-version-list * Updated from global requirements * Add DeployedServer resource * Use BaseServer base class for Nova Server resource * Remove db.api wrapper * Support composite alarm * Set default value for 'metadata' of cinder volume * Set default value for 'metadata' of nova server * Cleanup test env after tests * Refactor port tests * Support new osprofiler API * Remove unused mock for server check tests * Use assertIsNone(...) instead of assertEqual(None, ...) * Don't replace failed volume always * Include API version in Zaqar URLs * Updated from global requirements * Ephemeral disk size support for server bdm\_v2 * Use mock instead of mox for keypair test * Updated from global requirements * Fix typo in plugin.sh * Revert "Fix devstack plugin" workaround * Add policy for Keystone resource types * Don't use hardcoded flavors in tests * Allow mark-unhealthy by physical resource ID * Handle ambiguous physical resource IDs * Updated from global requirements * More efficient db resources-per-stack count * Updated from global requirements * Don't validate address when using get\_attr * Updated from global requirements * Use \_\_slots\_\_ for dependencies.Node * Add an OS::Zaqar::MistralTrigger resource type * Use keystone session with zaqar client plugin * Use both domain id and name * Fix a small nit * Make the name of a Zaqar queue optional * Don't return the signed queue URL from get\_resource * Includes project info while admin getting stacks * Supports 'direct-physical' and 'baremetal' vnic type for port * Add validation for conflicting merge strategies * Do not count events for every event created * Refactor, add encrypt/decrypt data dict functions to crypt * Minor encrypt/decrypt unittest refactor * Refactor purge\_deleted, operate on batches of stacks * Avoid re-validating resources in nested stacks * Fix typo * Show team and repo badges on README * Do not set the mime-type for userdata * Updated from global requirements * Keystone::User observe reality implementation * Refactor \_needs\_update() for resource * Use i18n to translate msg in LOG.xxx() * Updated from global requirements * More efficient pruning of events * Avoid redundant validations * Allow 'mac\_address' updatable for neutron port * Use more specific asserts in tests * Use both endpoint and endpoint\_override * Move call trove cluster delete to check complete * Skip test\_cancel\_update\_server\_with\_port * Use endpoint\_override with heat client plugin * Remove oslo-incubator use in other client plugins * Use mock in test\_validate.py * Use apache config templates from local tree 8.0.0.0b1 --------- * Add unit tests for function 'index' * Docs of configuring Devstack to enable heat * Remove extra resource definition loading * Fix get all attributes with cache data * Updated from global requirements * Remove unused pylintrc * Give correct example for translation\_rules definition * Don't use oslo-incubator in glance client plugin * Don't try to delete trust if trustor not found * Replace retrying with tenacity * Use timeout as whole seconds in swift plugin * Cleanup heat apache wsgi configs * Update .coveragerc after the removal of openstack directory * Do not throw an exception if stack outputs is not set * Add OS::Nova::Quota resource * Add tags property to OS::Nova::Server * Add support different versions for nova client * Observe reality for OS::Keystone::Domain * Don't include openstack/common in flake8 exclude list * Updated from global requirements * Updated from global requirements * Adds Keystone Domain resource plugin * Remove oslo-incubator modules * m1.tiny is not always there * Do not load templates in stop\_traversal * Initial PropertiesGroup implementation * Updated from global requirements * Make FloatingIP depend on all RouterInterfaces again * Add filter function * Add OS::Zaqar::Subscription resource * Cleanup service usage * Fix resource-list with nested\_depth in convergence * Updated from global requirements * Support Zaqar signed queue URLs * Updated from global requirements * Speed up lbaasv2 test * Fix resource\_signal with convergence * Ignore merged env if environment files are specified * Imported Translations from Zanata * Don't operate queue if it was not found * Updated from global requirements * Keystone::Group observe reality implementation * Add info to docs about heat devstack plugin * Keystone::Region observe reality implementation * Updated from global requirements * Updated from global requirements * Use osc commands for creating neutron resources * Raise TypeError when a bool property has int value * dd missing memory.resident to NOVA\_METERS * Updated from global requirements * Remove unnecessary install\_heat\_other * Don't query raw\_template in stacks uselessly * Prevent template validate from scanning ports * Updated from global requirements * Adds 5 backport db migration place holder for newton * Squash database patches * Don't resolve attribute pre-storage * Remove the deprecated Stack.resolve\_static\_data() method * Remove support for accessing ResourceDefinition like a dict * Unit tests: Don't use ResourceDefinition as cfn snippet * Remove the Resource.parsed\_template() method * Get rid of cfn-compatibility in ResourceDefinition.Diff * Return condition functions based on the filter param * Add noauth middleware * heat-all: all-in-one heat launcher * Updated from global requirements * Change credentials.create argument * Add OS::Aodh::EventAlarm resource * Use RPC to retrieve nested stack output * Avoid loading nested stacks in memory where possible * Keep same physical\_resource\_name in backup stack * Add a modulo core constraint * Add networking-sfc port-chain resource plug-in * Add new hot function str\_replace\_strict * Keystone::Endpoint observe reality implementation * Add http\_proxy\_to\_wsgi middleware to Heat CFN endpoint * Fix typo in documentation * Updated from global requirements * Correct invalid git URL in LogABug config * Enable release notes translation * Use \_\_slots\_\_ in Parameter classes * Avoid double init of classes with \_\_new\_\_ * Add networking-sfc flow-classifier resource plug-in * Pass region\_name to session client * Create a root Yaql context * Add workaround for functions in translation * Resolve all functions before RESOLVE translation * Use \_\_slots\_\_ in ResourceInfo classes * Improved the descriptions of funtion parameters * Add implicit deps after calculation of all explicit deps * Don't always eagerly load the raw\_template for a stack * Properly compute resource\_properties pickle * Use empty list for None values in repeat function * Don't create yaql context * Make nova server user\_data format configurable * Correct deleting of role assignments * Updated from global requirements * Don't get derived config if resource ID unset * Remove unnecessary setUp and tearDown * Fix a typo in engine\_wrapper.py * Use minimal image wherever possible * Updated from global requirements * Add Apache 2.0 license to source file * Switch fedora mirror * Allow policies for resource\_types with wildcard * Fix typo in docstring * Using assertIsNone() instead of assertEqual(None, ...) * Enforce policy before resource.validate * Break cycle between Resource and Attributes * Keystone role assignment observe reality method * Hidden policies property of OS::Mistral::Workflow * Small refactoring translation mechanism * Speed up environment test * Using assertIsNotNone() instead of assertIsNot(None) * Using assertIsNone() instead of assertIs(None) * Updated from global requirements * Run integration tests with tempest before upgrade * Fix indentation in get\_param example * Fix typo 'duplcate' to 'duplicate' in status.yaml * Fix create/update keystone endpoint with service name * Avoid circular refs more aggressively in DependencyTaskGroup * Use save\_and\_reraise\_exception() in HeatException * Get rid of circular reference in Event class * Increase the timeout for the stop\_stack message * Return error with path in function validate * Wait for deletion\_time in integration tests * Updated from global requirements * Nova::Server observe reality implementation * Do not attempt deletion of a DELETE\_COMPLETE stack in service api * Add a new HOT template version for Ocata * Don't use cast() to do StackResource delete * Don't delete RawTemplate if it referenced by a stack * Add networking-sfc port-pair-group resource plug-in * Set hooks before storing events * Use neutron cli command instead of osc * Add Ocata version '8.0.0' in doc * Trivial:Standardize the output format of 'help' in some files * Remove unnecessary \_\_init\_\_ * Add missing %s in print message * Fix cancel update for nova server with defined port * Re-trigger on update-replace * Trivial refactor of session var in reset\_stack\_status * Updated from global requirements * Add resource OS::Cinder::QoSAssociation * Legacy delete attempt thread cancel before stop * Raise NotImplementedError instead of NotImplemented * Don't acquire the lock when cancelling a stack * Use correct schema for SoftwareDeploymentGroup rolling\_update * delete python bytecode including pyo before every test run * Example for "Replace" function should use self.fn\_name * Allow update inplace for allowed\_address\_pairs * Cancel traversal of nested stack * Update reno for stable/newton * Don't log locked resource ERROR level 7.0.0.0rc1 ---------- * Update link reference * Make get\_attr consistent across template versions * Avoid circular references in Macro class * Do str\_replace in a single pass * Fix sync point delete * Skip resource counting during validation * Correct the response info of template-version-list * Trivial: Replace 'assertTrue(a not in b)' with 'assertNotIn(a, b)' * Add releasenote for conditions function * Always use context manager for DB transactions * Allows condition name using boolean or function * Refactor resource definition parsing in HOT/cfn * Create ResourceDefinitions directly in ResourceGroup/Chain * Allow referencing conditions by name * Refactor boolean condition functions * Make cfn functions inherit from HOT * Ensure cached conditions match stack * Copy correct definition to the backup stack * Add functional test for SDG rolling\_update * Create a public Conditions class API * Raise StackValidationFailed instead of InvalidCondition\* * Revert "Improve validation for some functions" * Add way to use custom paths in translation * Release resource lock when executing reset\_stack\_status * Add test for SoftwareDeploymentGroup resource * Deletion of in-progress stack * Convergence: Run scenario tests synchronously * Convergence: basic framework for cancelling workers * Non-destructive upgrade for structured deployments * Override the default Template.outputs() implementation * Handle outputs with an OutputDefinition class * Updated from global requirements * Update plugin-guide documentation page * Add releasenotes for OS::Cinder::QoSSpecs * standardize release note page ordering * Revert "Allow reference conditions by name" * Restore timezone information in API response * [api-ref] Remove temporary block in conf.py * Allow hyphens in OS::Trove::Instance database names * Lazy-load outputs * Trivial: remove unused LOG attribute * Migrate to keystoneauth * Use keystone session in endpoint\_utils * Allow reference conditions by name * Pre-validate cinder quotas with the real fact * Correcting parameter type * Cinder::Volume observe reality implementation * Get rid of Template.validate\_condition\_definitions() * Evaluate resource conditions in-place * Use physical name in event if resource\_id is None * Get rid of extra\_rsrc\_defn in templates * Modify use of assertTrue(A in B) * Non-destructive upgrade for deprecated resources * Deprecate Template.validate\_resource\_definitions() * Deprecate Template.validate\_resource\_key\_type() * Add unit tests for invalid keys in resources * Prevent direct access to conditions in templates * Don't add new abstract methods to Template class * Provide default implementation of \_parser\_condition\_functions * Call base \_\_init\_\_ from FakeHTTPClient * Remove \_get\_client\_args() from client\_plugin * Use heat functions from plugin for upgrade * Use enginefacade instead of db\_session * raw\_template\_files\_get always use context session * Allow any data to be passed to yaql function 7.0.0.0b3 --------- * Updated from global requirements * Correct link reference in heat/doc * [api-ref] Rewrite the Heat API version * Don't run neutron tests before upgrade * Updated from global requirements * Unify getting properties for method of Server res * Properly evaluate yaql expressions * Config logABug feature for heat api-ref * Add cinder qos specs constraint * Minor fix for hot\_spec.rst * Add OS::Cinder::QoSSpecs * Provide 'or' function * Add doc and reno note for environment merging * Aodh::Gnocchi resources observe reality implementation * Change type of X-Openstack-Request-Id * Updated from global requirements * Fix senlin profile/policy type constraint check * Delete mox.stubs in heat * Updated from global requirements * Improve efficiency of SoftwareDeployment updates * Fix incorrect behaviour of repeat function * Convert props form delimited params to lists * Validate that python3 is ready for loguserdata * Improve validation in OS::Monasca::Notification * Add interrupt points for convergence check-resource operations * Add new resource l7rule * Clean imports in code * Minor fix for senlin cluster update * Check action status instead of cluster status for cluster creation * Updated from global requirements * Fix building derived inputs from a derived config * Provide 'and' function * Stop using mox.stubs in heat * Refactor senlin node update logic * Add 'resources' to error msg path if res' condition invalid * Updated from global requirements * Provides 'not' condition function * Provides 'if' intrinsic function * Add a Macro class to heat.engine.function * Support condition for output * Fix SoftwareDeployment when dealing with deleted configs * Add functional test coverage for files API * Use correct args to resolve senlin node attributes * Support condition for resource * Don't raise error in custom guidelines on IOError * Check action status instead of node status for node creation * Using oslo\_config's min attribute in heat * Add action check function to senlin plugin * Updated from global requirements * Include heat\_integrationtests in setup.py install * Convergence cancel update implementation * Fix problems left in api-ref * Convergence: fix input to check\_stack\_complete * Delete RoleAssignment if user/group does not exist * Refactor validate\_resource\_definitions() * Use param\_schema and merge strategy for merging * Refactor to use param\_schemata with env merge * Improve deep merge for parameters * Use upper constraints for all jobs in tox.ini * Move merge\_environment to environment\_util module * Add valid merge strategies * Migrate stacks from legacy to convergence engine * api-ref - software config status codes * api-ref - template version and functions * api-ref - stack actions * api-ref - events * api-ref - stack snapshots * api-ref - stack resources * api-ref - services/stack-outputs doc * api-ref - stack identity usage in find calls * api-ref - build/resource-type/versions * Updated from global requirements * Add OS::Heat::Value resource * Get ready for os-api-ref sphinx theme change * api-ref doc for stack (5) * Add new environment section for merge strategies * Correct mistaken parameters of test\_hacking.py in tests * Move NoActionRequired exception back where it belongs * Begin move of UpdateReplace back to its rightful location * Add a replace\_on\_change option to the SW Config input schema * Add reno note on volumes.backups\_enabled option * Override client() for RoleAssignment resources * EncryptedVolumeType observe reality implement * Cinder::VolumeType observe reality implementation * api-ref doc for stack (4) * Add v2 glance image props * api-ref doc for stack (3) * api-ref doc for stack (2) * api-ref doc for stack (1) * Split stack api-ref doc into three files * Handle case where the Nova AZ extension is disabled * Add OS::Cinder::Quota resource * Don't use config option sqlite\_db * Parse JSON as JSON when converting to YAML * Log missing clients as WARNING instead of ERROR * Nova::HostAggregate observe reality implement * Remove tenant\_safe flag from rpc and db api * Clean imports in code * A context cache for Resource objects * Always eager load the raw\_template for a stack * Add validating of section 'conditions' * Load resources from DB for resource list * Run heat\_integrationtests as a tempest plugin * Do not use env var conf defaults * Use a variable for which conf file to write to * Use tempest.conf when running under tempest * Don't manipulate config for admin creds * Register heat tempest plugin * Depend on tempest in test-requirements.txt * Perform str\_replace trying to match longest string first * Support maps as argument for repeat/for\_each * Add validate for external resources * Add support for a resource level external\_id * Updated from global requirements * Use is\_admin\_project from context * Updated from global requirements * no need to run integration tests in upgrade * Put common implementation of HOT/CFN into new class * Move 'validate\_section' to hot/template.py * Validate the input/output configs in Software Config * Single definition of top-level SoftwareConfig keys * Catch NotSupported when cancelling a nested stack * Update HOT template guide preface * Set properties to before\_props before calling handle\_update * Fix devstack plugin * Updated from global requirements * Fix resouce group resource removal policy name inconsistency with DB * Fix api-ref doc for software deployment * Fix software config api-ref doc * Don't change properties in regenerate\_info\_schema * Unit tests: Use Properties objects instead of dicts * Don't load stack when getting files * Fix path\_in\_stack for scheduler hints * Adds some infos for stack notification * Fix null param for \_create\_arguments() for volume resource * Rename swift.py to container.py for swift container resource * Fix iteration in floatingip's add dependencies method * Updated from global requirements * Add scenario test\_server\_signal * Release note, api-ref for event list nested\_depth * Make the removed resources in resource group visible on REST * Network validation in Manila * Remove additional purge test * Check policy of resource type again * Adopt tempest plugin config namespace * Support 'conditions' section for templates * Fix two typos * Remove deprecated v1 cinder api support * Updated from global requirements * Fix str\_split function when string is None * New common constraint 'Expiration' * Updated from global requirements * Updated from global requirements * modify the home-page info with the developer documentation * Explicitly set heat.conf logging\_exception\_prefix * Cancel nested stack creation when sibling fails * Allow stack create operations to be cancelled * Use handle\_update\_cancel() to cancel nested stack updates * Don't pass value\_specs when creating internal port * Add Python 3.5 classifier and venv * Add an integration for server using neutron * Fix get\_endpoint() call in is\_using\_neutron * Increase default sighup\_timeout * Always use upper-constraints * Don't log ERROR for remote stack exceptions * Silence swiftclient logging * Retry neutron resource deletion if the physical resource exists * Allow for retries after certain resource delete failures * Fix is\_using\_neutron * Move cinder api version tests * Supplement:use assertEqual() instead of assertDictEqual() * Use keystone session from context in client plugin * Fallback to db for resource show * Use assertEqual() instead of assertDictEqual() * Add reno note for DNS functionality * Add dns properties and attributes * Add dns constraints * Check for empty sections in environment * Don't check alarm state when signaled * Fix some map\_replace issues * Updated from global requirements * Unskip AutoscalingLoadBalancerv2Test * Purge deleted stacks for specific project * Replace while with if in resolve function * Add new resource l7policy * Add reno for map\_replace and fix docs nit * Use exception\_filter from oslo\_utils * Implement map\_replace intrinsic function * Updated from global requirements * Implement the correct total ordering for scheduler.Timeout * Use TaskRunner.as\_task() for the create retry delay * Allow a grace period when cancelling a stack update * Use a queue instead of an event to send messages * Raise the last exception thrown into DependencyTaskGroup * Scheduler: Add a progress callback to TaskRunner * Always call TaskRunner.\_sleep() * Unit tests: add a test resource that takes multiple steps * Scheduler: Allow TaskRunner to be used as a task * Allow individual resources to control the cancellation grace period * Updated from global requirements * Add direct\_use=False flag to constructor of novaclient * Skip AutoscalingLoadBalancerv2Test * Add version keyword argument to RAX glanceclient * Do not show HIDDEN props in res type template * Add reno for yaql function * Fix validate method definitions * Add \_\_ne\_\_ built-in function * Do not raise NotFound for resource\_get\_all\_\* queries * Add new resource Security Group Rule * Scheduler: Allow a per-task customisable grace period * Catch exceptions when cancelling tasks in DependencyTaskGroup * Add a Resource plugin API for cancelling actions * Don't persist\_state of IN\_PROGRESS stack again * Remove remaining methods from db objects * Remove the db object delete method * Only call session.refresh from within db\_api functions * Remove unnecessary checks 7.0.0.0b2 --------- * Use Fedora 24 base image * Use to\_policy\_values from context for policy * Fix doc of OS::Heat::AutoScalingGroup outputs and outputs\_list * Only use client\_plugin() if default\_client\_name is set * Add stack files retrieval API * Propage errors in post test hook * Correct reraising of exception * Create an admin context to refresh template files * Do not populate unused stack and watch rule objects * Remove unused LOG to keep code clean * Updated from global requirements * Updated from global requirements * HAProxy uses milliseconds for its timeout values * Improve validation for some functions * Aodh::Alarm observe reality implementation * Hidden StructuredDeployments and SoftwareDeployments * Add networking-sfc port-pair resource plug-in * Allow admins to create public image by default * To delete the keypair preparing for update replacement * Fail the test run if image download fails * Improve validation during template.parse * Do not show HIDDEN props in res type show * Fix empty values validation in nova server * Correct doc about os-collect-config metadata polling * sqlalchemy tests don't assume same session * Convergence: Cancel message * Convergence: Fix concurrent update resource delete * Add rolling update for SDG * Change namespace 'ceilometer' to 'aodh' * Deprecate combination alarm * Migrate to aodh for gnocchi alarms * Correct parameter when raise NotSupported exception * Updated from global requirements * Keep encrypted\_param\_names environment internal to heat * Fix another test race in test\_update\_restricted * Fix Broken Link in Contributing > Blueprints Doc * Add key/value support for orchestrating images * Use oslo.context's from\_environ for creating context * Use openstack commands for prepare\_test\_network.sh * Use latest HOT version in Resource.build\_template\_dict * Move \_RESOURCE\_KEYS down to class level * Add information about Resolve rule to docs * Migrate to aodh for OS::Ceilometer::Alarm * Use openstack command for prepare\_test\_env.sh * Add default release names for template versions * Add a sleep after delete before purging * Correct the usage of properties.get() with default value * Config: no need to set default=None * Use default client name for cinder resources * Replace raw\_input with input to make PY3 compatible * Revert "Skip AutoScalingSignalTest.test\_signal\_during\_suspend" * Use LOG.exception() properly * Make sure to update image tags successful * Correct message when extension is not available * Add keystone\_session property to context * Updated from global requirements * Careful with OS::Nova::Server dependencies on subnets * Install Guide: Set bug project * Wait for stack status instead of group status * Decouple hot and cfn for outputs * Remove duplicate code of software deployment resource * Add aodh client plugin * Updated from global requirements * Skip AutoScalingSignalTest.test\_signal\_during\_suspend * Updated from global requirements * Fix some spelling mistakes in heat as follows: * Wait for 404 on floatingip delete * Deal with cinder-backup service absent * Added refs\_map attribute to AutoScalingGroup * Add constraint for Security Group * Don't use stored context to reset stacks * Fix non-uniqueness error message for image * Updated from global requirements * Minor reorg of sqlalchemy encrypt test functions * Add context to stack lock function arguments * Replace model\_query with direct query call * del \_session(), use context.session directly * Be consistent about context first argument in db api * Fix service type for Magnum resources * Check immutable and update\_allowed conflict in schema validation * Use Zaqar signed URLs in software deployment * Commented config for unit test sql logging * Added heat.resource\_type custom constraint * Make template available to parameter constraint checking * Add in missing log translation hints * Show 'deletion\_time' for stack-list/stack-show apis * Add launch-instance to install-guide * Updated from global requirements * Deprecate lbaas v1 resources * [api-ref] Correct stack-list api-ref * Add period property to Monasca Notification resource * Remove deprecated auth\_plugin config * Sync context with oslo.context * Fix typo in LBaaS support * Improve unit tests for stack-update-cancel * Improve translation properties * Use the correct action for failure reason * Add wait\_sec for test\_stack\_update\_from\_failed * Pass input\_values when creating SoftwareDeployment resources * Fix test\_update\_restricted timeouts due to timestamp resolution * Remove heat.openstack.common.notifier supports * Add integration tests for admin actions * Authorize super admin actions on all projects * Run orig jobs without convergence engine * Set nested\_depth when creating Stack from db * Implement event list nested-depth * on-delete cascade rule for resource\_data * Fix env passed to test\_replace * Do a single query to fetch all event\_list stacks * Use Event versioned object for event\_list formatting * Updated from global requirements * Adds monasca client plugin config support in heat.conf * Fix tests on Neutron port behavior * Monasca: Don't pass keyword arguments of value None * Clean up tests setup * Updated from global requirements * Fix broken links in developing\_guides index * Fix comment/doc for 1.28 RPC version * Remove \_show\_resource in mistral * Updated from global requirements * Fix creating SDGroup with no properties * Don't hard code subnet * Enable convergence by default * Ignore notfound error when delete image tags * Make sure glance image create success with tags * Add install-guide for heat * Pass filters to iter\_resources for nested * Fix syntax error in yaql hot spec example * Pass keystone session to clients * Use generic auth plugins * Get rid of gratuitous use of six.iterkeys() * Don't use default None for params in handle\_update * Downgrade some exception logs to INFO level * Network resolving in Manila when only subnet passed * Convergence: Catch exceptions in restore\_prev\_rsrc * Convergence: Fix unit tests * Fix building query key for ceilometer alarm * Migrate to nova api version 2.1 * Get rid of Parameters.\_validate\_template\_parameters() * Updated from global requirements * DB query to get all resources by the root stack * Updated from global requirements * Allow deletion\_policy to be lowercase in HOT * Reformat HOT version history * Fix the definition of has\_nested() * Add refs attribute to AutoScalingGroup 7.0.0.0b1 --------- * Imported Translations from Zanata * [api-ref] Correct service-list api-ref * Updated from global requirements * Move heat\_keystoneclient to clients package * Use get\_auth\_ref() rather than auth\_ref property * Move some functions to service\_utils * Updated from global requirements * Allow deletion policies to be versioned in HOT * Correct the docs on deletion\_policy in the HOT spec * Convergence: DB api to get all active resources of stack * Convergence: Throttle to sync point updates * Improve validation of cinder volume resource * Updated from global requirements * Updated from global requirements * Keep Trace Back in Exception * Fix nested identifier when not created * Updated from global requirements * Add \`template\_dir\` to config * [api-ref] Added template-function-list * Correct the validation of server 'networks' * Deprecate Stack.resource\_restart() * Ignore NotFound exception in metadata\_set * Updated from global requirements * Correct redundancies in Scheduler Hints docs * Fix resource loading in resource filtering * Correct type of HeatTemplate20161014 to cfn * Declare and use keyword args for Stack.get\_all * De-duplicate raw\_template.files * Adds clarity to the default value of num\_engine\_workers * Add to resource\_schema returning description * Add to resource-type-list returning description * Provides 'equals' intrinsic function * Don't support floating ip if only specify 'network' * Allow creation of cache classes associated with a context * Use a weakref for the data object context * Don't load nested stack to build the identifier * Lazy-load stack tags * Avoid full stack load for identify\_stack * Stack list does direct stack object query * Simplify url\_for in client\_plugin * Use keystoneauth1 instead of keystoneclient.auth * Fix GetAttThenSelect for convergence * Apply ResourceGroup blacklist at create time * string parameter type mismatch * Add wait\_secs to test\_stack\_update\_from\_failed\_patch * Updated from global requirements * Revert "Don't use stored context to reset stacks" * resource list filtering api-ref update * template validate ignore errors api-ref update * Fixes resource filter to handle physical\_resource\_id properly * Convergence: Set traversal to empty string on failure * Refactor resource update function to reduce complexity * Updated from global requirements * Fixed variable shadowing in test\_software\_deployment * Let setup.py compile\_catalog process all language files * Convergence: show parameters while deleting stack * Mark monasca resources supported in release notes * Glance image tag support release notes * Updated from global requirements * Added refs\_map attribute to resource groups * Remove html\_static\_path from api-ref * Fix Cloud Server image/flavor combination validation * doc: fix issue in template\_guide/software\_deployment * Don't use stored context to reset stacks * migrate to upstream os-api-ref * Fix small nits for tests introduced in bug/1571975 * Don't translate when resource\_validate=False * Updated from global requirements * Adds default policy rule for resources limited to administrator * Clarified servers property description for SoftwareDeploymentGroup * Allow resources to delay polling * Allow scheduler tasks to request longer wait periods * Add devstack plugin * Copy devstack code to heat tree * Fix the documentation for HIDDEN support status * Remove unnecessary usage of stack\_name * Set security\_groups when create internal ports for nova server * Correct filters for resource search * RDO-Manager name change * Migrate nova\_instance to physical\_resource\_id * Revert "Add timeout for software deployments" * Updated from global requirements * Lazy-load context information requiring Keystone calls * Use original request context for logging * Improve logging of unexpected exceptions * Fix api-ref generation errors * Add timeout for software deployments * Avoid passing templates/files over RPC * RPC API: Add a template\_id parameter to stack\_create/update * Make cinder resources available based on extensions * Convergence: Un-skip functional test * Fix heat-keystone-setup-domain * Fixes cooldown logic throws ValueError * Makes monasca plugin as supported * Updated from global requirements * Break reference cycle in KeystoneClient plugins * Add check for server existence on software deployment delete * Remove usages of :linenos: in docs * Add yaql function * Fix DBDeadlock error in stack update * Add deployment ID to deploy signal events * Allow the server name limit to be configurable * Adds tag support for glance image resource plugin * Adding two parameters into Software configuration * Eager fetch stack tags with a subqueryload * Remove stack ObjectField from resource * Updated from global requirements * Refactor confusing code in custom\_guidelines.py * Support neutron QoSDscpMarkingRule resource plugin * Enable client plugin to support dynamic api version * Cleanup magnum client test case * Use '--visibility' instead of '--is-public' * Exclude plugins from custom\_guidelines.py * Update log levels * Revert "Replace SD RPC polling by long RPC call" * Migrate API documentations into the Heat tree * Check for missing param schema in encryption utility * Add --verbose-update-params option to heat-manage * Make parameter decryption more robust * Reset env.encrypted\_param\_names on stack update * Delete snaphots on deleting stack * Functional test for asg cooldown property * Unit tests: Don't use ResourceDefinition as cfn snippet * Use ResourceDefinition API in resource\_facade * Don't treat ResourceDefinition as cfn template in resources * Deprecate the Resource.parsed\_template() method * Unit tests: Eliminate deprecated use of ResourceDefinition.Diff * Don't use two different names for the same flag * Add --insecure in CURL if set True in client option * Functional test for asg max\_size and min\_size * Updated from global requirements * Removes duplicate code autoscale\_complete * Make physical\_network property optional * Check for worker\_service initialization * Convergence: Refactor worker * Make RPC call to abandon nested stack * Revert "Enable abandon option to nested resource" * use thread safe fnmatch * Updated from global requirements * Clarify the help text for error\_wait\_time * Break reference cycle between ResourceRegistry and ResourceInfo * Break reference cycle between Environment and ResourceRegistry * Don't access \`\_stored\_properties\_data\` * Remove redundant properties construction * Add RESOLVE translation for some sahara resources * Updated from global requirements * Fix properties usage in ResourceChain update * Added unit tests for get\_template * Imported Translations from Zanata * Add environment retrieval API * Remove tests for show attribute in cinder * Add senlin to README.rst (github main page) * Use to\_dict() instead for cinder resources * Remove conditional import * Fix stack deleting problem in magnum stacks * Add command to reset one stack status * Magnum::Bay observe reality implementation * Use messaging notifications transport instead of default * Updated from global requirements * Use the ResourceDefinition.Diff API in resources * Implement diffs of ResourceDefinitions * Unit tests: use frozen\_definition() in update tests * Reinstate deprecation warnings * Remove \_show\_resource from barbican resources * Designate::Record observe reality implementation * Designate::Domain observe reality implementation * Change type of raised exception in translation * Updated from global requirements * Fix doc build if git is absent * Set enforce\_type=True on config overrides in tests * Updated from global requirements * Add attribute for extra specs to Nova::Flavor * Squash database patches * Rename source\_path in translation * Remove some redundant resolve\_\* functions * Use RESOLVE translation for lbaasv2 resources * Use RESOLVE translation rules for vpnservice * Use RESOLVE rule for lbaasv1 resources * Use RESOLVE translation for more neutron resources * Use RESOLVE translation for more sahara resources * Imported Translations from Zanata * Add fixtures into test-requirements * Wording fix to list index error message * Update the Administrator Guide links with new ones * Support string index for list in get\_param * Replace SD RPC polling by long RPC call * Updated from global requirements * Updated from global requirements * Fix unfortunate spelling error * Keystone::User: do not update if no changes * Added new property 'image' for bdm\_v2 in Nova Server * Add information about ResourceGroup attributes * Fix typo \`after\_porps\` in resource * Updated from global requirements * Check for missing/unexpected data in encryption utility * Don't scale when action is not complete * Don't try scaling when no change in size * Nova::Flavor get\_live\_state implementation * Convergence: Ignore not found when releasing lock * Remove the unused parameter in method \_build\_properties() * Don't validate template resource parameter defaults in parent * Refactor unit tests for encryption utility and add assertions * Avoid reference loops in DependencyTaskGroup 6.0.0 ----- * Sync integration tests requirements * Warn against API calls in plugin guide * Revert "Check RBAC policy for nested stacks" * Revert "Check RBAC policy for nested stacks" * Imported Translations from Zanata * Add volume\_driver in OS::Magnum::BayModel * Add translation rule to delete ssh auth key from Magnum baymodel * Use a context manager to re-raise local exceptions in StackResource 6.0.0.0rc2 ---------- * Increase timeout of WaitCondition due to ConcurrentTransactions * Increase timeout of WaitCondition due to ConcurrentTransactions * Imported Translations from Zanata * Add translation rule to delete ssh auth key from Magnum baymodel * Fix update issues with autoscaling group * Avoid cooldown when group size does not change * Raise explicit exception when deleting config which has been referenced * Mark resources UPDATE\_COMPLETE when they request replacement * Updated from global requirements * Add update\_replace\_value property to test resource * Fix handle\_delete of HostAggregate resource * Add validate for babican secret * Imported Translations from Zanata * Fix update issues with autoscaling group * Improve guidelines of using devstack of heat * Add id and name properties for flavor resource * Introduce 'immutable' of parameters * Make encryption script log exception and continue * Stop engine service correctly * Create integration tests requirements on the fly * Remove property "ssh\_authorized\_key" from OS::Magnum::BayModel * Removing some redundant words * Imported Translations from Zanata * Set OS\_PROJECT\_NAME in grenade script * Add lbaas v2 scenario test * Reset stack status after resources * oslo config clients\_xxx enabled for all supported services * Fix race condition for WaitCondition with several signals * Refactor BaseWaitConditionHandle.\_metadata\_format\_ok() * Downgrade WaitCondition logs * Handling concurrent transactions in metadata\_set method * Imported Translations from Zanata * Make sure to delete the credentials when stack deletion * Add a new HOT template version for Newton * Don't create an "update task" inside a try block * Add validation check for barbican order * Remove property "ssh\_authorized\_key" from OS::Magnum::BayModel * Tidy up BarbicanClientPlugin * Use domain env variables as defaults * Add validation for mistral cron trigger * Use region from config in functional tests * Restrict use of iteritems, iterkeys and itervalues * Added constraint for mistral workflow * Fix race condition for WaitCondition with several signals * Handling concurrent transactions in metadata\_set method * Add retries to avoid dberror for user\_creds\_delete * Imported Translations from Zanata * Added constraint for barbican order * Imported Translations from Zanata * Made workflow name required in crontrigger * Remove unknown parameters in patched update * Imported Translations from Zanata * Make sure to delete the credentials when stack deletion * Avoid cooldown when group size does not change * hacking log warn * Imported Translations from Zanata * Add retries to avoid dberror for user\_creds\_delete * Remove unknown parameters in patched update * Explicitly naming resources in "unsupported" warnings * Add length constraint for workflow tasks * Imported Translations from Zanata * Convergence: Fix rollback considered as failed concurrent update * Fixes the sequence of release notes * Added missing dot * Update reno for stable/mitaka * Update .gitreview for stable/mitaka * Explicitly naming resources in "unsupported" warnings 6.0.0.0rc1 ---------- * Remove redundant lines in test\_instance\_group.py * Imported Translations from Zanata * Check RBAC policy for nested stacks * Make sure create ceilometer alarm successful * Move launchconfig reference validation to validate() * Add functional lbaas v2 tests * Fix race condition in reload\_on\_sighup functional * Resolve name/id using translation rules for Server * Fixes external hyperlink format in heat architecture doc * Allow using 'get\_param' for 'deletion\_policy' section * Don't raise oslo\_db exceptions from heat * Don't encrypt default parameters in heat-manage encrypt script * Moved CORS middleware configuration into oslo-config-generator * Make ConcurrentTransaction exception common * Ignore image and flavor validations * Make backup stack naming more consistent * Fix prepare\_for\_replace/restore\_prev\_rsrc handing for server * Updated from global requirements * Unit tests: compare stack names in PhysName * Fix stack preview * Skip the in-built dependencies while validating template * Handle network names in Manila resources * Don't RESOLVE translate in resource init * Imported Translations from Zanata * Modify the message of ERROR in stack\_cancel\_update() * Fix AWS::EC2::SecurityGroup update problem * Refactor validation of arguments to 'repeat' intrinsic function * Get watch\_url via get\_heat\_cfn\_url * Imported Translations from Zanata * Remove unused stuff in test\_launch\_config.py * Allow resource name as reference if using depends\_on * Catch exceptions calculating implicit dependencies * Remove required=True for name property * Convergence: Avoid cache when resolving input data * Convergence: Enable resource type aliasing test * Fix for resource search with invalid filter keys * Fix potential race condition in lbaas v2 logic * Heat integration tests failing against https endpoints * Resolve name/id using translation rules * Updated from global requirements * Resolve arguments to 'repeat' function at runtime * Make auth\_url lookup dynamic * Fix error msg for wrong auth\_url in functional * Use transactions instead of session.flush * Fix problems in unicode template support * Fixed incorrect exception raising in ManilaShare * Regenerated heat\_integrationtests.conf.sample * Don't translate when loading resource from db * Remove unused LOG variables * Add reno for barbican container * Add user\_data\_update\_policy property to OS::Nova::Server * Do not try to save event resource if too big for db column 6.0.0.0b3 --------- * Rally tests plugins for Heat * Add release notes for new v2 Load Balancer resources * Ignore template res types during guideline checks * Updated from global requirements * Return HTTPBadRequest error from API for immutable parameters * LBaas v2 HealthMonitor * Ignore TypeErrors on old properties during update * Clean initial registered messages * Add guide about using Rally on Heat gates * Remove unused pngmath Sphinx extension * Re-add str\_replace parameter validation, and fix test * Stop using Hidden property for RandomString * LBaaS v2 Pool Member * LBaaS v2 Pool * LBaaS v2 Listener * Add release notes for senlin resources * Add release notes for Immutable Parameters feature * Add functional test for immutable parameters * Fix all trailing spaces for custom guidelines * Fix all method errors for custom guidelines * Fix resources descriptions for custom guidelines * Fix all attributes error for custom guidelines * Fix all properties errors for custom guidelines * LBaaS v2 Loadbalancer * Allow external fixed IP address to be set on Router in template * Release note for resource update restrict * Updated from global requirements * StackResource/RemoteStack replacement * Rename test classes for consistency * Adding index to stack.owner\_id * Add one general testing of resource\_mapping * Add OS::Senlin::Node resource * Resource mark unhealthy RPC and ReST API * Swift container get\_live\_state implementation * Make ZaqarEventSinkTest more lenient * Optimize nested stack status check * Updated from global requirements * Stop using first\_address Hidden attribute in tests * Mark 'replacement\_policy' as deprecated * Fix a small typo again * Add retries to Nova client methods for connection errors * Revert "Check RBAC policy for nested stacks" * Immutable parameters * Add image/flavor validation to Rackspace Server * Add parse\_live\_resource\_data for zaqar queue * Remove usage of WritableLogger from oslo\_log * Add function tests for event sinks * Updated from global requirements * Don't resolve outputs during polling stack status * Use yaml.safe\_dump instead of yaml.dump * Use oslo.config fixture to avoid gate break * Updated from global requirements * Add \_show\_resource method to zaqar queue * Implement custom guidelines * Pass all options when doing keystone discovery * Add functional tests for update restrict * Convergence replace restriction for type change * Fix several nits in os\_database trove resource * Fix test\_encryption\_vol\_type to take admin creds from conf * Add transaction context for stack update * Make AutoScale sub-template a string instead of map * Alphabetized heat.constraints for cleanliness * Cleanup neutron finder functions * Remove server uuid property specific checks * Use caching for resource name/id finders * Ignore connection error when testing load balancer * Fix a small typo * Refactor mistral workflow handle\_signal * Don't check existence of keystone resource for empty value * Map RequestLimitExceeded exception in heat-cfn-api * Add OS::Senlin::Policy resource * Force config\_drive and transport for sw config * Don't use hidden image property in sahara cluster * Adds release notes for resource-search * Refactor OS::Senlin::Profile resource * Convergence: Check resource class before updating * Add descriptions to openstack resources (Part 3) * Make Functions unhashable * Updated from global requirements * Eliminate bogus deprecation warning * Build list of enabled os-collect-config collectors * Create watch tasks in its own thread * Use yaml.safe\_load() instead of yaml.load() * Stack resource search * Use oslo.utils.reflection to extract class name * Add OS::Senlin::Receiver Resource * Add senlin constraints * Don't pass both network\_id and port\_id when attach interface * Fix parameter constraint formatting * Release notes for server-side env resolution * Add support for launch\_stack launchConfiguration type * Don't useless fetch resources on update * Check for resource\_id when resolving attributes * Simplify event count by stack * Move Developer guides to separate directory * Fix rally internal Heat job * Don't query stack tags twice * Do not convert resource\_id to string * Add image/flavor validation to OS::Nova::Server * Updated from global requirements * Add note about cron trigger live state impl * Add test for performance in constraint validation * Don't use convergence deletion way under non-convergence engine * Hook into environment merging on server * Glance::Image get\_live\_state implementation * Add more validation to barbican order * Retry on DBDeadlock * Fix scheduler compatibility with Python 3.7 harder * Ignore errors on old properties during update * Always do cleanup after a failed stack update * Updated from global requirements * Revert "Resolve name/id using translation rules" * Separate get\_live\_state on several methods * Handle missing plugin in is\_service\_available * Add post hooks * Remove db refresh in Stack object get * Resolve name/id using translation rules * Convergence: Consider resources from old template * Mark shared property in Firewall unsupported * Add test for zaqar-based wait conditions * Add note about template format for url reference * Add new translation rule to resolve with client * Refactor property translation rule(2/2) * Refactor property translation rule(1/2) * Restrict update/replace of resource * Fix a grammatical mistake of the example online * Replace ex.message with exception\_to\_unicode(ex) * Add OS::Barbican::\*Container * Fix zaqar queue creation workflow * Don't mask exceptions in is\_service\_available * Refactor resource specific replace logic * Add length validation to \_validate\_stack\_name() * Updated from global requirements * Don't recompute metadata after clearing a user hook * Log all writes to resource metadata * Updated validation for OS::Trove::Instance * Add floating\_ip property to Nova::Server nics * Release notes for Keystone Region resource plugin * Fix imports for pep8 check * Release notes for template validation improvements * Updated from global requirements * Remove extraneous fields from Cloud LoadBalancer access list * Adds router\_external Boolean to ProviderNet * Accommodate v2 and v3 auth for integration tests * Adds ignore\_errors for template\_validate REST API * Adds ignore\_errors for template\_validate in engine * Use OSprofiler options consolidated in lib itself * Refactor StackResource create/update stack args * Translate all properties during update * Updated from global requirements * Fix update preview to handle nested stacks * Allow str\_replace to reference parameters/attributes * Add snapshot\_support property to ShareType * Fix some word spellings * Don't update the name of keystone resources if name don't change * Check RBAC policy for nested stacks * Add validation for glance image * Allow updates for OS::Trove::Instance * Edit backslashes for lines continuations * Fix import order * Enable pep8 to check files in directory tools * Remove implementation\_signature check * Add default value to secret\_type in Barbican::Secret * Add release notes for new added resource OS::Neutron::RBACPolicy * Adds validation to support 'port' only if using neutron * Assign defaults for Cloud Loadbalancer node type and weight * Add environment\_files to REST and RPC APIs * Refactor get\_live\_state using during update * Add OS::Neutron::RBACPolicy resource * Allow stack\_context to create convergence and legacy stacks * Don't log a failed software deployment at ERROR level * Prevent phantom user hooks * Add Rackspace::Cloud::LBNode * Stop using hidden property l3\_agent\_id * Add \_show\_resource to Neutron SecurityGroup * Add test for stack outputs * Add validation to barbican order * Update heat\_integrationtests.conf.sample * Don't pass [] for fixed\_ips to neutron * Fix software configuration doc * Use custom find functions for image lookup * Updated from global requirements * Add timeout property for resolving attributes * Return stack outputs when in progress * Catch correct not found error in senlin plugin * Allow StackLock to be used as a context manager * Remove redundant \_stack\_rand\_name from func tests * Handle NotFound in Stack get\_all * Updated from global requirements * Software config zaqar integration tests * Update resource type exceptions with error\_code * Updated from global requirements * Add OBJ\_PROJECT\_NAMESPACE for Heat project * Make JsonField actually do it's work * RPC API: Define correct constants for resource data * ReST API: Use constants in get\_allowed\_params whitelists * Don't calculate attributes for metadata request * Filter out deployments with None config * Add heat contribution guidelines * InstanceGroup to keep FAILED resources in template * Updated from global requirements * Ignore ValueError when adding dependencies * Refactor handle\_update to use prop\_diff * Fix port handle\_update to use prop\_diff * Add REST API for stack export * Adds RPC api for export action * Update OS::Magnum::BayModel with latest Magnum changes * Add default values to several Glance::Image props * Remove warnings in heat * Convergence: Fix FnGetAtt to fetch value from cache\_data * Add handle\_update for senlin cluster 6.0.0.0b2 --------- * Push deployments metadata on delete * Make ASG resource work when no lb is specified * Updated from global requirements * Provide software deployment id on create * Edit backslashes for lines continuation * Replace the word "printf'd" with "formatted" * Support neutron address scope * deprecate module heat.api.middleware.ssl * JSON size violation gives a bad error with nested templates * Attempt to delete internal resources if create server fail * Load template files only from their known source * FunctionalTests don't run non-test check\_skip\_test * Unify workers options for API services * test\_preview\_update only create one stack per test * Fix update preview to consider type comparison * Imported Translations from Zanata * Do not pass both port-id and fixed-ip to create server * Don't allow specify fixed\_ip and port at the same time * Use correct user\_domain\_id when create trust auth plugin * Add entity and name attribute to EntityNotFound * Support unicode in parameter values * Use EntityNotFound instead of SyncPointNotFound * Incorrect grammar with dot * Use wrapped message in error log * use stderr for error echo message * Updated from global requirements * Update links for CLI Reference * Make metadata\_server\_url config optional * Convert from mox to mock in test\_signal * Handle invalid stack names which are non-string * Raise with traceback * Remove extra whitespace * Remove unconditional return of user\_id * Fix for the deprecated library function * Fixup ceilometerclient tests * Add release notes for event-transport * Make volume type is\_public property updatable * Pass environment variables of proxy to tox * Set DB max\_overflow to match thread pool size * Use client\_plugin as a function * Don't wait for undefined actions in SoftwareComponent * Add descriptions to all openstack resources (Part 2) * Create zaqar queues with the proper token * Enable commented software component test * Make minimum default num\_engine\_workers>=4 * Fix OS::Neutron:Net handle\_update * Fix provider\_net resource update * Added Keystone and RequestID headers to CORS middleware * Optimize the fault map for EntityNotFound * Populate context roles when using stored context * Updated from global requirements * Add tests for heat template apis * Add resolve\_outputs parameter to stacks API * Convergence: Pick resource from dead engine worker * Fix race condition in tests with swift key * Fix validation of server personality property * Improve gateway\_ip updation for subnet * Remove stray debug from context.py * Event transport * Replace deprecated LOG.warn with LOG.warning * Use user\_domain for password auth\_plugin * Fix resource definition loading in resource groups * Revert "Disable CeilometerAlarmTest.test\_alarm" * Fix grammatical mistake, Changed character from "an" to "a" in below files: * Pass domain id to ceilometer client * Init local request context with user/project domain infos * Replace logging lib * Replace assertTrue(isinstance()) with assertIsInstance() * Updated from global requirements * Add basic get\_live\_state implementation * Add join to workflow (mistral resource) * Add OS::Senlin::Profile resource * Add release note for bp/api-call-output * Using LOG.warning replace LOG.warn * Fix some inconsistency in docstrings * Use flavors.get when finding with id * Wrong usage of "an" * Make sure update access mode for volume in available * Wrong usage of "a" * Trivial: Remove unused logging import * Fix using mock return\_value in unittests * Add descriptions to all openstack resources (Part 1) * Disable CeilometerAlarmTest.test\_alarm * Remove defaults for handle\_update parameters * Use create\_with\_template for RG create * Remove meaningless default value in \_\_get\_\_() * Add OS::Senlin::Cluster resource * Add release note for bp/support-host-aggregate * Add release note for bp/support-neutron-qos * replace deprecated oslo\_messaging \_impl\_messaging * Add neutron vpnaas configuration in integration tests * Support RackConnect V3 LB in Rackspace AutoScaleGroup Resource * Remove duplicate keys from dictionary * Added ResourceChain plugin * Neutron port allow switching between network\_id and network * Use flavors.find interface to find flavors * remove the mutable default arguments "[]" or "{}" * Don't call neutron when there is no prop\_diff * Updated from global requirements * Add note for subnet pool support * Enable simple json format in workflow signal * Fix database purge query * Neutron port, tolerate switching network name/id * Flag to observe live state for resources * Add neutron provider constraints * heat-manage resource\_data\_list * Make value\_specs updatable for firewall resource * Fixes the error logic in resource\_data\_get\_all() * Remove check for managed cloud role * Make SoftwareDeployment name updateable * Use ClientPlugin.ignore\_not\_found as a context manager * Provide the QoS capability for port * Correct errors of HostAggregate handling * Use specified client service name for client usage * Stop ignore skipped crypt\_operation option * Remove unused argument 'current\_version' * Refactor neutron constraints * Fix \_show\_resource in Designate::Record * Fix property TTL in Designate::Domain * Provide QoS capability for neutron network * remove containers on delete * Make root\_stack\_id determination more robust * Updated from global requirements * Call \_persist\_state for UPDATE in 'state\_set' * Fix min value in ttl range of Designate::Record * Use EntityNotFound instead of NotFound from Manila * Add validate\_with\_client in BaseCustomConstraint * Fix time mocking on wait condition timeout tests * Support neutron QoSBandwidthLimitRule resource plugin * Fix mocking in several tests causing excessive run-times * Remove unused LOG variable with logging import * Fix event filtering in event-show * Don't remove user from groups if groups don't change * Updated from global requirements * Support neutron QoSPolicy resource plugin * Eliminate unnecessary sleeps during no-op update * Add trustee config group to sample config * Add tests for api calls show and list outputs * Use user id instead of user name in notification body * Re-enable ceilometer test * Skip CeilometerAlarmTest.test\_alarm * Improve log messages from scheduler * Get rid of bogus debug logging in parameter groups * Make sure update successful if there is encrypt param * Correct reset\_state\_on\_error() handling * Updated from global requirements * Improve output when output resolve raises error * Fix to send only one notification when update completes * Remove version from setup.cfg 6.0.0.0b1 --------- * Don't remove role assignment if no change * add "unreleased" release notes page * Update OS::Magnum::BayModel to not require network\_driver * Add subnetpool property to subnet resource * Add SubnetPool neutron Resource * Add neutron address\_scope constraint * Allow many-to-one glob mapping in registry * Fix some line wrap problems in doc * Move update\_policy parsing to Resource * Fix tox -e docs build in py3 * Unhelpful error message when api-paste.ini is missing * Check resource\_id before calling network delete * Fix some inconsistency in docstrings * Remove deprecated method * Add reno for release notes management * Add profile constraint to senlin\_plugin * Use constants for URL schemes in template\_resource * Refactor template\_resource.generate\_class() * Get rid of the Resource.resource\_class() method * Add a separate get\_class\_to\_instantiate() method to Environment * Raise EntityNotFound in get\_resource\_info() * Make Server software\_config\_transport updatable * Simplify and correct logic for updating SSL Termination * Reauthenticate on token expiration * Fix show output with unresolved stack outputs * Remove default value for mem\_limit to keep up with docker-py * Use negative timeout for convergence unittests * Remove useless file\_name value from test * Use EntityNotFound as super class for exceptions * Use EntityNotFound instead of ServiceNotFound * Use EntityNotFound instead of WatchRuleNotFound * Add 'parent' property for keystone project * Updated from global requirements * Fix Template Version in Hot-Guide * Skip some functional tests for convergence until fixed * Convergence: Persist state for stack adopt * Optimize "open" method with context manager * Convergence: send notification when a stack action starts * Add \_show\_resource to EncryptedVolumeType * Fix VolumeType projects property handling * Updated from global requirements * Change namespace for Heat resources and tests * Change namespace for Barbican tests * Use EntityNotFound instead of FlavorMissing * Convergence: Re-trigger failed resource for latest traversal * Convergence: Concurrency subtle issues * Convergence: Load resource stack with correct template * Remove port test from floating\_ip test module * Better schema for Rackspace::AutoScale::Group image and flavor * Correct the spelling for the word constraint * Updates keystone region constraints for endpoint * Adds OS::Keystone::Region resource plug-in * Translate properties before update * Remove the commenting code * Fix variable 'url' referenced before assignment * Fix some inconsistency in docstrings * Support shares in sahara clusters * Support shares in sahara cluster templates * Wrong entity name for Host Aggregate resource * Fix MagnumClientPluginTests * Fix wait condition doc sample * Don't snapshot if server hasn't been created yet * Add 'enabled' property for keystone endpoint * Skip senlin\_plugin tests until bug #1519185 is fixed * Correctly determine when SSL termination config changes * Add references on template versions in documentation * Change namespace for Nova Host Aggregate test * Fix HTTP error codes due to invalid templates * Use EntityNotFound instead of UserKeyPairMissing * Split abandon into pre-abandon(export) and abandon * Don't force Fn::Select index to integer * Updated from global requirements * Change namespace for Ceilometer resources and tests * Change namespace for Cinder resources and tests * Change namespace for Glance resources and tests * Change namespace for Keystone tests * Change namespace for Magnum tests * Change namespace for Manila tests * Change namespace for Mistral tests * Change namespace for Neutron tests * Use EntityNotFound instead of PhysicalResourceNotFound * Use EntityNotFound instead of ResourceTypeNotFound * Convergence: Fix duplicate events for stack actions * Use EntityNotFound instead of StackNotFound * Add senlin client * Define engine service in setUp() * Updated from global requirements * Implement pre-delete hook * Use attribute instead of passing parameter * Clarify convergence logging * Adds keystone.region constraint * Adds 5 backport db migration place holder for liberty * Fix ResetStateOnErrorTest.test\_success * Change namespace for Swift tests * Change namespace for Zaqar and tests * Change namespace for Trove resources and tests * Change namespace for Sahara resources and tests * Change namespace for Nova resources and tests * Move kombu as a test dependency only * Ensure that stacks can't get stuck IN\_PROGRESS * Register correct nova.host constraint * Do not use api-paste.ini osprofiler options * Add subnetpool custom constraint * Add resource OS::Nova::HostAggregate * Reset stack status even when lock engine\_id is None * Fix stack lock ActionInProgress in the admin case * Updated from global requirements * Add Baymodel contraint to OS::Magnum::Bay * Allow in-place updates for all compatible types * Add nova.host constraint * Convergence: Avoid sync point delete for stack CREATE * Convergence: Fix unittest test\_updated\_time * Updated from global requirements * Correct list\_join function * Remove unnecessary detachment * Adds get\_region\_id() in keystone client plugin * Remove the unnecessary log message * Remove unused common exception * Use flavor instead of flavour * Updated from global requirements * Add a test for environment change in failed update * Stack update to use \_send\_notification\_and\_add\_event * Deprecate heat-keystone-setup * Copy the env to the backup stack in failed update * Use EntityNotFound instead of NovaNetworkNotFound * fix misspelled function name * Add caching for nova extensions * Updated from global requirements * Conditionally check for service extensions * Change to 'has\_extension' for a test mock * Updated from global requirements * datetime.datetime.utcnow() should be replaced * Fix garbled docstrings * Fix scheduler compatibility with Python 3.7 * Add tests for pre-create hooks * Add \`is\_public\` property to Nova Flavor resource * Support 'multiattach' for cinder volume * Remove default None value for config options * Do not resolve keystone values if it is None * Add 'enabled' property for keystone service * LBaaS v2 custom constraints * Make nova resources available based on os-api ext * Improve UserWarning messages * Always process node addresses * Add caching to neutron extensions * Adds error\_code in heat exceptions * Enable scenario test 'test\_autoscaling\_loadbalancer\_neutron' * Remove the redundant spaces in function doc * Log an error on an uncaught exception in a thread * Update instructions to generate GMR error reports * Skip scenario test 'test\_autoscaling\_loadbalancer\_neutron' * Improve parameters obtaining logic from adopt stack data * Clean up convergence error message * Use pbr for installing wsgi scripts * Catch exceptions for restore\_prev\_rsrc/prepare\_for\_replace * Move function for member\_definitions to grouputil * Use rsrc\_defn\_from\_snippet for ResourceGroup * Don't set stack updated\_time when creating it * Support shares in sahara node group templates * Change assertTrue(isinstance()) by optimal assert * Allow to update subnet without 'allocation\_pools' * Raise StackValidationFailed on parameter validation * Updated from global requirements * Enable abandon option to nested resource * Add net\_cidr constraint for destination of subnet * Allow 'allocation\_pools' updatable for neutron subnet * Remove spurious logs from test\_loguserdata * Fix grenade upgrade script dependency * Remove refresh in Stack update\_and\_save * Add APIs implementation for output functions * Add functions for outputs to heat service * Use ClientPlugin.ignore\_not\_found as a context manager * Use assertTrue/False instead of assertEqual(T/F) * Use assertIn and assertNotIn * Resource.has\_interface check get\_resource\_info result * Use assertIsNone instead of assertEqual(None, \*\*\*) * Use correct constraint for allowed\_address\_pairs * Do nothing in prepare\_for\_replace if port not created * Fix handling of FAILED ResourceGroup members on rolling update * Updated from global requirements * Expand test in-progress workaround * Fix mixin class clients * Replaced mox usage with mock in test\_swift * Imported Translations from Zanata * replace git protocol by https * Implement new map\_merge intrinsic function * Do not pass rich objects in Cloud LoadBalancer create * Do not pass rich objects in Cloud LoadBalancer update * Update OS::Magnum::BayModel with tls\_disabled * Fix race condition in stack listing * Manually sync functional test requirements * Break circular references in client plugins * Replace github with openstack git repo * Refactor unit tests to support ExceptionFilters in clients * change stackforge url to openstack url * Updated from global requirements * Added CORS support to Heat * Add Bay to Magnum resources * Updated from global requirements * Unit test for checking that migrations don't cause downtime * Make neutron resources available based on service extensions * Allow get\_attr: [res\_name] format to get all attribute * Replaced mox with mock in test\_metadata\_refresh * Updated from global requirements * Add functional test for ResourceGroup rolling\_update * Change support\_status to HIDDEN in res props * Updated from global requirements * list\_template\_functions raises NotFound exception * Allow LBaas integration tests to dynamically skip * Add more informative error during parsing * Fix grenade shutdown script * improve readme content * Fix purging of raw\_template rows * Delete previous template upon update * Use oslo\_config IPOpt support * Replaced mox with mock in test\_watch * Use oslo\_config PortOpt support * StackUser tolerate missing user on delete * Updated from global requirements * Fix parameter\_defaults for comma\_delimited\_list and json * Remove ceilometer specific config for grenade plugin * Remove unnecessary update\_replace parameter * Update Baymodel in Magnum resources * Add signal\_transport property to Heat wait conditions * Support update for sahara node group template * Encode Location header in utf-8 * Use generated auth\_token instead of that in context * Remove unneeded is\_service\_available * Updated from global requirements * Refactor keystone resources codes * Assign updated stack ID during stack update preview * Add stack tags to stack abandon output * Replaced mox with mock in test\_loguserdata * Optimize test\_server unit tests * Convergence: Fix restore on rollback for server and port * Remove [H405] and [H404] ignoring in tox.ini * Fix [H405] pep rule in heat/tests * Add port\_extra\_properties to Nova::Server nics * Add testresources used by oslo.db fixture * Do not return None when get\_attr if res is in SNAPSHOT/CHECK * Correct expected and observed order of assertEqual * Updated from global requirements * py34: cleanup * Assert has\_calls in tests * Fix [H405] pep rule in heat\_integrationtests * Fix [H405] pep rule in heat/resources * Fix [H405] pep rule in bin * Fix [H405] pep rule in doc/source * Fix [H405] pep rule in contrib * Fix [H405] pep rule in heat/rpc * Fix [H405] pep rule in heat/objects * Fix [H405] pep rule in heat/common * Add OS::Sahara::ImageRegistry resource * Use LOG.error when no exception handler is used * Fix typo in document * Convergence: Fix to persist stack status in DB 5.0.0 ----- * Do no net/subnet checks during validate * Correctly filter events on resource name * Updated from global requirements * Check if os-interface extension is present before saving ports * Fix translating for props with get\_param value * Correctly filter events on resource name * Announce Python 3.4 support * Grenade: Run select heat\_integrationtests instead of tempest smoke * Imported Translations from Zanata * Try polling swift object before creating stack * Include nested stacks in reset\_stack\_status * Update preview\_update\_stack to align with PATCH updates * Reduce frequency of logging environment resources * Fix action (CREATE) in progress error for TemplateResource/RG * Updated from global requirements * Do no net/subnet checks during validate * Organise doc links for Operating Heat * Aim first doc link list at end users * Align the docs intro text with the old wiki page * Fix translating for props with get\_param value * Revert "Use the correct filter key in reset\_stack\_status" * Cleanup of Translations * Align update\_policy section heading with HOT * Check if os-interface extension is present before saving ports * Add manila data source type to OS::Sahara::DataSource * Add functional test coverage for PATCH updates * Switch to mox3 * Split engine service test cases (11) * Add \_needs\_update() to AWS::EC2::EIPAssociation * Include nested stacks in reset\_stack\_status * Use the correct filter key in reset\_stack\_status * Update preview\_update\_stack to align with PATCH updates * Fix action (CREATE) in progress error for TemplateResource/RG * Consolidate keystone v3 hacks * Imported Translations from Zanata * Convergence: Fix to use cache\_data for FnGetRefId (3) * Convergence: Fix to use cache\_data for FnGetRefId (2) * Convergence: Fix to use cache\_data for FnGetRefId (1) * Change cinder client version to 2 for integration tests * Remove tests for \_show\_resource in manila * Use oslo.middleware SSLMiddleware * Convert to int can cause different error messages * Do not pass rich objects in Cloud LoadBalancer delete * Reduce frequency of logging environment resources * Add value\_specs property for Firewall Resource * replace assert statement with unittest.assertXXX * py34: Fix integration tests * Add mitaka version '6.0.0' in doc * Make sure we can use nova-network * Cleanup of Translations * Convert to int can cause different error messages * Add node\_processes validation to sahara node group * Make OS::Monasca::AlarmDefinition expression property non-updateable * Fix [H405] pep rule in heat/httpd * Fix [H405] pep rule in heat/cmd * Fix [H405] pep rule in heat/api * Remove dead code from StackResource update\_with\_template * Update .gitreview for stable/liberty * Only fail Volume deletion in 'error\_deleting' state * Only fail Volume deletion in 'error\_deleting' state * Add value\_specs property for Firewall Resource * Some lambda were replaced on def * Don't inject extra config into neutron-vpnaas.conf 5.0.0.0rc1 ---------- * Make sure we can use nova-network * Make ClientPlugin.ignore\_not\_found a context manager * Open Mitaka development * Fix file permissions * Make re-raising of client exceptions safer * py34: Get rid of py3-testlist * py34: heat.tests.api.\* * py34: heat.tests.api.cfn * py34: test\_loguserdata/test\_ec2\_token * py34: contrib resources * py34: heat.tests.mistral/convergence * py34: heat.tests.test\_fault\_middleware * Convergence: Fix to use cache\_data for nested stack * Updated from global requirements * Allow nested validation for template-validate * Don't pass defaults as parameters for TemplateResource * Fix [H405] pep rule in heat/db * Fix [H405] pep rule in heat/engine/cfn * Use root\_stack\_id for stack\_count\_total\_resources * Add resource.root\_stack\_id column * Add integration tests for preview update * Change ignore-errors to ignore\_errors * Add a functional test proving OS::Heat::None works with validate * Convert validate\_template validation path * Fix [H405] pep rule in heat/engine/hot * Fix [H405] pep rule in heat/engine/clients * Fix [H405] pep rule in heat/engine * Fix [H405] pep rule in heat/scaling * Delete children handle\_delete testing (Sahara) * Delete children handle\_delete testing (Nova) * Delete children handle\_delete testing (Mistral) * Use rsrc\_defn\_from\_snippet in heat AutoScalingGroup * Refactor rsrc\_defn\_from\_snippet for template classes * fix : removing policies from mistral types * Support update for sahara cluster template * Add table of custom constraints to hot spec * Always return default via template-validate "Default" * Adding basic test to exercise the heat event APIs * Convergence: Work on IN\_PROGRESS resources once lock acquired * Convergence: Assign current\_template\_id when resource fails * Add data-processing-cluster hidden tag * Assign parent\_stack during validation * Handle replace and rollback cases for Server * Store external ports in Server data * Revert "Additional unit tests for update-preview" * No need to detach if there is no attachment * Set 'ZAQAR\_MESSAGE', 'ZAQAR\_SIGNAL' as a default config option * Only write to template files if template data changes * Account for error status during volume delete * Add intrinsic creating port for server * Copy resource data in \_delete\_backup\_stack * Remove tests for \_show\_resource in trove * Validate deletion policy during template parsing * Allow selectively disabling resource validation * Wire in files to template validate * Add initial functional test for template-validate * PATCH update reuse existing template * Imported Translations from Zanata * Add \_needs\_update() to AWS::AutoScaling::LaunchConfiguration * Allow map/list items for str\_replace * No need to stub is\_service\_available * Additional unit tests for update-preview * Convergence: Fix FnGetRefId to fetch value from cache\_data * Handle replace and rollback cases for Port * Do not lose traceback while raising exc * Delete children handle\_delete testing (Manila) * Delete children handle\_delete testing (Magnum) * Delete children handle\_delete testing (Glance) * Delete children handle\_delete testing (Cinder) * Delete children handle\_delete testing (Ceilometer) * Convergence: small fixes in tests * Fix filter name inconsistency in stack\_list * Add test for \_show\_resource * Allow map/list items for list\_join * Save previous template on non convergence updates * Use endpoint\_url instead of base\_url * Convergence: Resolve attribute with path using cache data * Move test\_scaling\_template to autoscaling folder * Add \_needs\_update() to OS::Heat::TestResource resource * Work around parameter error deleting backup stack * Add \_needs\_update() to OS::Nova::Server resource * Convergence: Store resource status in cache data * Enable ceilometer services using new plugin model * Add command to clean dead engine from service list * Make the stack tags template non-empty * Fix syntax in "Heat Orchestration Template (HOT) specification" * Convergence: Fix failing integration tests * Use Class method instead of deprecated method * Make ResourceDefinition round-trip stable to avoid extra writes * Remove 'names' parameter from '\_run\_update' function * Work around problems storing huge properties in events * Revert "Add intrinsic creating port for server" * Fix empty device\_name for bdm\_v2 Nova::Server * Add missing value types for logging messages * Add validation of update\_policy to resource * Fix mounpoint value of VolumeAttachment * Fix url for image in getting\_started doc * Move new capacity calculation to scaling library * Handle pre-replace and pre-rollback actions * Add intrinsic creating port for server * Fix scenario names in rolling update test * Add integration test for UPDATE\_FAILED recovery * Clarify hot\_spec description of latest HOT version * Set resource status to FAILED when engine is down * Updated from global requirements * Retry if Swift objects are not available yet * Use self.\_resource\_names() without size parameter * Fix code compatibility with Python 3 * Fix for failing convergence functional tests * Remove SoftwareDeployment nova.server custom constraint * Round the elapsed time to the nearest second * Return error message if validate fail when clearing hook * Add batching create to ResourceGroup * Wait for metadata actually set to server * Change revision to version in heat-manage db\_version command * Add server validation check for deployments metadata * Delete children handle\_delete testing (Barbican) * Add tests for parent handle\_delete method * convergence scenario tests * Updated from global requirements * Don't repeatedly overwrite definitions in RG rolling update * Allow ResourceGroup rolling update to scale down * Allow ResourceGroup rolling update to scale up * Handle scaling up in scaling library next\_batch() function * Don't return resource names from ResourceGroup.\_get\_batches() * Refactor ResourceGroup.\_get\_batches() to be much, much simpler * Use the member\_definition library func in ResourceGroup rolling updates * Add unit tests for ResourceGroup.\_assemble\_for\_rolling\_update() * Return max\_upd from ResourceGroup.\_get\_batches() * Allow member\_definitions() to customise each member that it defines * Allow a custom new ID function for member\_definitions() * Add hadoop\_version validation to sahara resources * Add sahara.plugin custom constraint * Updated from global requirements * Remove unnecessary validation for resource group * Clarify definition of server network prop in doc * Use parent handle\_delete for keystone * Add immutable parameter for schema in pluginguide * Add show resource function to Keystone * Add OS::Sahara::JobBinary resource * Support string format 'tags' for stack preview * Clarify name of scaling resource\_templates() function * Don't do unnecessary updates in ResourceGroup rolling updates * Return the correct size for the ResourceGroup from \_get\_batches() * Calculate ResourceGroup batch sizes using scaling library * Refactor ResourceGroup batched updates and add tests * Start scaling down in an InstanceGroup rolling update ASAP * Split out calculation of the next batch into a separate function * Fix outdated link in sample plugin * Imported Translations from Transifex * Fix validation failure for TemplateResource * Move Resource exceptions to common module (5) * Move Resource exceptions to common module (4) * Move Resource exceptions to common module (3) * Move Resource exceptions to common module (2) * Move Resource exceptions to common module (1) * Split engine service test cases (10) * Convergence: Stack concurrent update * Convergence: Resolve attributes during rollback * Fix typo in prop description in VolumeType * Move TestResource in-tree * Make the TestResource a bit smarter 5.0.0.0b3 --------- * Remove unused requirement * Remove iso8601 dependency * Convergence: pass the input\_data into Stack.load() * Updates resource type filtering with name, version * Search resource type based on version * Add console\_scripts entry points for all heat services * Test case for resource\_facade * Split engine service test cases (9) * Set correct tenant id when python-client init * To use id instead of name when making credentials from context * update integration list in README * Updated from global requirements * Run py34 first in default tox run * Support use\_autoconfig in sahara clusters * Support use\_autoconfig in sahara cluster templates * Use the new (and default) glance v2 cli options * install.sh: stop using deprecated option group for rabbit * Support use\_autoconfig in sahara node group templates * Support volume\_local\_to\_instance in sahara node group templates * Support is\_proxy\_gateway in sahara node group templates * SoftwareDeploymentGroup allow arbitrary keys for attributes * Add information about new get\_attr functionality * Add get\_attr which returns all attributes * Add Keystone User/Group RoleAssignment resources * Removes unused posix-ipc requirement * Engine method validate\_template fails for unavailable resource type * Handle NotFound error for all \_resolve\_attributes * Make RoleAssigment class to RoleAssigmentMixin class * Add subnet property to Nova::Server nic * Use \_get\_network\_id in other methods of mixin class * Refactor \_get\_network\_matches method * Convergence: in resource\_by\_refid() don't check the state * Convergence: add support for the path\_component * enabling the stevedore.sphinxext extension * Updated from global requirements * [Heat Docs] Update links to Cloud Admin Guide * Revert "Make sure all "updated\_at" fields store fractional seconds" * SoftwareDeploymentGroup - make path based attributes work * Add a preview endpoint for stack updates * Add OS::Sahara::DataSource resource * Move Server network stuff to separate mixin class * Search based on the resource type name * Validate support\_status while searching resource registry * Use min and max on IntOpt option types * Updated from global requirements * Fix docs for Hello World and WP Single templates * Removing unused dependency: discover * Support project access manager for volume type * py34: heat.tests.api (1) * Removes dead code from context.request\_context * Increase num\_engine\_workers to 4 in functional tests * Adds resource uuid, volume support to lifecycle scheduler hints * Use latest stable version for RG & ASG nested templates * Use default client name for neutron resources * py34: heat.tests.test\_parameters * Invert logic of counting in InstanceGroup \_get\_batches() * Refactor InstanceGroup batch size check * Refactor InstanceGroup batch sizing logic * Use the official mission statement in index.rst * flake8 check doc/source * Use sections for individual properties and attributes * Use latest stable template version in snippets * Use code-block:: yaml for all template snippets * Raise exception if asg in cooldown * Fix some files permissions * Provide signal\_url for DELETE action when using other transports * py34: heat.tests.test\_common\_serializers * Don't metadata\_update all resources for deployment signals * unify REST word * Add resource\_type-specific policies * Ensure traversal ID is updated * Improve docstrings for software deployment properties * Add tests for show\_resource function * Quieten the unit test logs down * SoftwareDeployments modify validation to use properties * Small improvements of OS::Nova::Server resource * Fix Software Deployment DELETE action for CFN\_SIGNAL transport * convergence: populate stack.resources in Resource.load * Revert "Refactor format\_resource\_attributes" * Correct http method to 'POST' for stack-preview test * Updated from global requirements * Fix sample snippet in the template guide * Modify tests to load trustee user from plugin * Use auth plugin for trustee * Do not pass rich objects in CloudNetwork resource * Rolling update max\_batch\_size should be greater than 0 * Updates monasca plugins doc string to install python-monascaclient * Add properties grouping by necessity in docs * Move all tasks objects into progress module * Use correct timeout value in convergence tests * Remove redundant code * Updated from global requirements * Fix description for "Not exact spelling" * Split engine service test cases (8) * Fix Rackspace nova server addresses attribute * Update encrypted param template Added the encrypted parameter as a property for a Nova server * Add alternative way to use debugger for unittets * Fix "{}" is not a list error for json parameter type * Add and apply cinder backup constraint * Fix heat-api-cfn 500 error on an unknown action * Adds \_show\_resource support to designate plugins * Fix create trove instance with a neutron port failed * Fix incorrect resource's information while describing * resource failure causes nested stacks to be rolled back * Add secret\_type property to Barbican secret * Improve unit tests to succeed without hash tweak * Add info about refactored handle\_delete to doc * Refactor repeated handle\_delete * Improve test coverage for nova client plugin * Convergence: Fix string formatting while logging * Make sure 'SubnetId' update works for instance * Assert DELETE\_COMPLETE on all stack delete cleanup * Allow empty/None output values * Do not use rich objects is servers update * Revert failing tests and use v3 for ec2 tokens * Remove \_get\_extensions method * Add show resource function to swift container * Order type property should be required * Increase the concurrency of software-config functional test * Convergence: input\_data physical\_resource\_id -> reference\_id * Convergence: pass the resource name into has\_cache() * Updated from global requirements * Add attribute types to Mistral resources * Fix configuration in tests * Fix a typo in method name * Fix stack-list after failed update * Add show resource function to Barbican * Correct volume restore behavior * Fix typo error in the message * Adds show resource support for monasca resources * Fix docs about using SupportStatus during remove * Add base\_attributes\_schema to documentation * py34: heat.tests.test\_os\_database * py34: heat.tests.client/openstack * Add option to specify metadata for RG resources * Use atomic\_key for deployment metadata updates * Updated from global requirements * Move extensions to separate method in NovaClient * Add default value for boolean type to pluginguide * Convergence: Tests for convergence graph * py34: test\_hot and test\_validate * heat.tests.aws.\* * Remove 'wrap\_exception' function * Monasca Alarm definition resource plugin * Monasca Notification resource plugin * Convergence: Consolidate convergence stack unit tests * Updated from global requirements * Get auth\_uri from [clients\_keystone] section for ec2tokens * Correctly determine keystone v3 endpoint * Adds option to skip specific tests * Skip failing integration tests * add ceilometer notification agent to docs * Mock out ceilometerclient redirect\_to\_aodh\_endpoint * Monasca client plugin * Fix common serializers with test case * Don't use Ref in hot template (functional test) * Add show\_resource function to Mistral resources (4) * Support attributes with dynamic scheme * Add cleanup when skipping tests for stack actions * Fix test\_stack\_collect\_attributes * Updated from global requirements * Add note on the use of intrinsic functions * Functional test for encryption volume type * Don't use default None for params in handle\_update * Add config entries to skip integration tests * Add support status for rolling update policy schema * Don't raise exception when get nested stack * Convergence: Implementation of timeout * refactoring update\_task * Remove instance\_user and admin\_user options * Add cron\_expression constraint to OS::Mistral::CronTrigger * py34: heat.tests.nova * py34: heat.tests.autoscaling * py34: test\_sahara/software\_deployment * Try to get the version of cloud init via popen * Support boolean inputs for SoftwareConfig's * Replace tag 2015.2 to 5.0.0 * Convergence: Fix concurrent update rollback * Support 'severity' for ceilometer alarm * Split OpenStack API V1 unit tests * Resource-type-show does not report unavailable resource type * Split engine unit test cases for resource type * Fix pre\_test\_hook.sh encryption setting * Fixes Resource object refresh to use db object * py34: heat.tests.test\_template * py34: test\_auth\_\* * py34: test\_engine\_\* * Validate TemplateResource schema when based on other templates * Add basic stack-preview functional test * OS::Cinder::VolumeType help doc string contains redundant info * Updated from global requirements * Fix handle\_delete for zaqar queue * Refactor format\_resource\_attributes * Use default client name in nova - afterfixes * Revert "Temporarily skip failing scenario tests" * Add functional test for resource exposure * Add show\_resource function to Magnum resources (8) * Remove redundant parameter from EngineService * Use base attributes with attribute\_schema of class * Add test for template resource suspend/resume * Imported Translations from Transifex * add time\_constraints property in OS::Ceilometer::Alarm * Refactor wait condition handles * Add \_show\_resource function to Cinder resources (6) * Updated from global requirements * Make sure all "updated\_at" fields store fractional seconds * py34: heat.tests.test\_engine\_service * Add show\_resource function to Manila resources (5) * Add show\_resource function to Ceilometer resources (9) * Add show\_resource function to Trove resources (7) * Convergence: Do create operation only if action is INIT * Add show\_resource function to Glance resources (2) * Add show\_resource function to Nova resources (1) * Add base resolve method for attributes * Convergence: Fix concurrent update resource cleanup * move ceilometer constraints to common constraint * move network constraints from neutron to common constraint * Import magnum python client directly * Adds python-magnumclient>=0.2.1 * Add rolling\_update to ResourceGroup * Use default client name for glance image resource * Integration test check for OS\_PROJECT\_NAME too * Use OS\_TEST\_PATH for integration tests * collect common constraints * py34: heat.tests.neutron * py34: heat.tests.test\_resource * py34: heat.tests.db.\* * py34: test\_environment\* * Add cancel\_with\_rollback flag to stack cancel update * Convergence: fix functional test test\_nested\_stack\_adopt\_fail * Convergence: Refactor convergence dependency * Make convergence functional * Convergence: Don't try to unlock a resource after the DB row is deleted * Convergence: clarify what "data" is * Clean up the worker service logging * add new constraints to ceilometer * Updated from global requirements * Fix \`DummyResource missing in provider\` error * Temporarily skip failing scenario tests * Add keystone.user custom constraint * Convergence: fix KeyError when creating stack * Add tenant\_id to heat cache key 5.0.0.0b2 --------- * Imported Translations from Transifex * Convergence: Fix for resource needed\_by * Add a functional test option to skip notification tests * ReST API: Refactor error handler as a context manager * Do not use VolumeTasks in AWS Instance create * Reuse existing environment on PATCH update * Remove patch\_previous\_parameters() from Environment * Fix formula for calc update\_timeout in instance group * Support to view all attributes of resource * Correct stack identity when delete nested * Do not use rich server objects in servers' create * Remove dogpile from heat requirements * Refactor template resource to use grouputils * Convergence: Handle InvalidTemplateAttribute in worker * Scan for output errors in functional tests * Catch output error and re-raise them in nested stacks * Add HIDDEN status to Cinder::Volume image\_ref * Add HIDDEN status to Neutron::Port * Add HIDDEN status to Neutron::RouterInterface * Add HIDDEN status to Neutron::Pool * Add HIDDEN status to Neutron::VPNService * Add HIDDEN status to Neutron::NetworkGateway * Add HIDDEN status to Neutron::FloatingIP * Add HIDDEN status to network\_id Neutron::Subnet * Add to TranslationRule REPLACE rule value\_path del * Import mistral python client directly * Get 'update' paragraph from top-level schema * Convergence: Re-trigger stack operation * Fix four typos on heat documentation * Updated from global requirements * Adding functional integration test for encrypted parameters * Removes replace-on-update for SwiftSignalHandle resource * Move internal test resources to generic\_resource * Add sighup\_timeout to heat\_integrationtests.conf.sample * Make 'server' property of SoftwareDeployment mandatory * Always commit after deployment db operations * Fix RS CLB resource to handle HTTPS\_REDIRECT correctly * Add test covering PARAM\_CLEAR\_PARAMETERS for patch update * Fix/refactor test\_stack\_update\_existing\_parameters * Use default\_client\_name for mistral * Refactor and correct purge\_deleted * test\_engine\_service remove spurious deletes * Add LbImageId magic param to aws loadbalancer nested template * Use default\_client\_name in aws s3 resource * Stop using eventlet threads in test\_engine\_service * Adds python-mistralclient>=1.0.0 in requirements.txt * Fix test\_signal\_returns\_metadata wrong assertions * Convergence: fix current traversal * Imported Translations from Transifex * Convergence: Refactor worker * Updated from global requirements * Convergence: Fix concurrent update * Use default client in Cinder resources * Enable caching for property constraints * Fix StackResourceUnavailable exception * Ignore .eggs directory (created by the new pbr) * Catch NotFound in format\_stack\_resource for nested() * Use default\_client\_name for keystone * Add OS::Heat::None resource * Add test for ceilometer client * Move core engine related unit tests to tests/engine * Adds coverage for AWS EIP resource in scenario tests * Add doc about db being offline to encryption utility * Remove unneeded stub from test/common * Early initialization of worker rpc client * Move rollback logic to stack class * Use default client in nova * Fix the project\_id to project\_name when initializing ceilometerclient * Use default\_client\_name for swift * Add HIDDEN status to Server uuid * Add HIDDEN status to RandomString sequence * Add documentation page for Support Status * Add translate\_properties for Resource * Use default\_client\_name for barbican * Use default\_client\_name for ceilometer client * Fix unsupported format character error for multipart mime * Convergence: Fix resource loading on cleanup * Updated from global requirements * Add batching for heat-manage encrypt/decrypt * Refactor timeout calculation to utility * Make "heat-manage update\_params encrypt" idempotent * Add properties\_data encryption to heat-manage * Add base\_attribute schema for all resources * Use default\_client\_name for trove * Fix integration tests hooks * Fix test novaclient.create * Minor efficiency improvements to ResourceGroup * Disable instance\_user by default * Updated from global requirements * Use ResourceDefinitionCore methods for lbutils * Add MTU attribute for OS::Neutron::Net * Update SupportStatuses for objs where it needed * Add PhysicalResourceNameAmbiguity to exc mapping * Updated from global requirements * Refactor Adding service\_types to client\_plugins * Move signals to SignalResponder class * Convergence: Allow creating stacks of empty templates * Generate correct names for sahara templates * Return EIP resource name during template validation * Get heat.tests.test\_stack\* working in py34 env * Don't copy exception classes * Updated from global requirements * Fix typos in hot\_spec documentation * Add missing test for manila share attributes * Use mock in test\_attributes.py instead of mox * Removed typo in log when stack not found * Use \_\_iter\_\_ method of Attributes class in \_\_repr\_\_ method * Wait until child process will be killed * Move qpid-python to test-requirements * convergence: add adopt support * Imported Translations from Transifex * Rename api unit test folder name * Updated from global requirements * Designate Record resource * Designate Domain resource * Fix failures related to the mock 1.1.0 release * Add template-function-list * Re-enable the ceilometer alarm test * Port short\_id to return unicode * Add a way to run py34 tests from file * Adopt @six.python\_2\_unicode\_compatible decorator * Temporarily skip the ceilometer alarm test(again) * tox environment for \`bandit\` * Extract tags before pass them in create/update * Added required name property to Create a key pair example * support list resources with details * Add HIDDEN status to SupportStatus * Imported Translations from Transifex * Fix external references in glossary doc * Move all api tests to /tests/api * Split engine service test cases (7) * Add Boolean type to attributes schema * Refactor test\_share\_create\_failed test for Manila * Support snapshot deletion policy in Server * List resource\_type based on availability * Conditionally expose resources based on available services * Remove hotref links in the documentation * Add a new crypt method using cryptography * Convergence: Compute resource dependencies * Convergence: Handling resouce clean-up * Allow suspend and resume again if failed last time * Keep the path when re-registering the template resource * Update wsgi.py to support reload from conf on SIGHUP * Support time-delays in server.resize * Add types to barbican resource attributes * Adds designate.domain constraint * ASG scaling account for cooldown timestamp & in-progress * Use the default when creating schema from a template * Remove unneeded OS\_TEST\_DBAPI\_ADMIN\_CONNECTION * Updated from global requirements * Don't stop operations immediately when an error occurs * Revert "Add a new crypt method using cryptography" * ignore sample config file generated by tox -egenconfig * Move ceilometer resource tests to /tests/ceilometer/ * Move mistral resource tests to /tests/mistral * Move manila tests to /tests/manila/ * Move the nova resources tests to /tests/nova/ * Move all client tests to /tests/clients * Remove old JSON and YAML docs syntax * In-tree grenade support for Heat * Add doc generation for UpdatePolicy * Introduce Guru Meditation Reports into Heat * Fix import in keystone resources * Add \_\_bool\_\_ for classes that implement \_\_nonzero\_\_ * Add \_\_hash\_\_ functions where necessary * Add a new crypt method using cryptography * Convergence: Fix stack status\_reason * Override mox in sys.modules to mox3 in a py3 env * Imported Translations from Transifex * Updated from global requirements * Circumvent utf-8 decode error by logging it * Fix TypeError on joining list parameters * Remove (test-)requirements-py3.txt files * Add domain when list users in heat-keystone-setup-domain * Add str\_split function to HOT 2015-10-15 * Add template-version-list * Use percent sign as string formatting operator * Add nova.network constraint to ManilaShareNetwork * Specify network for server in test\_validation * Resource plugin for cinder volume encryption * Consolidates cinder unit tests * Convergence: Update stack attributes * Convergence: Fix for finding best existing res * Use public discover\_extensions from novaclient * Prepare SignalResponder class for more signal types * Fix validation error for parameter group * Convergence: Correct the class name EngineListener * Remove default of port\_security\_enabled * Update logging according oslo.i18n recommendations * Re-enable ceilometer alarm test * Reduce size of stack\_identity in heat notifications * Should execute 'resolve' before check the values of 'for\_each' * Coverage: Full coverage for heat identifier * Coverage: Full coverage for engine function methods * Fix config generator for oslo.service * Abstract handle\_delete() for stack resource * Use right oslo.service entry points * Convergence: Update if the resource is CREATE\_{COMPLETE,FAILED} * Convergence: Fix Resource Replacement * Convergence: Make SyncPoint.update\_input\_data actually atomic * Convergence rollback implementation * Allow multiple lists for list\_join intrinsic functions * Fix docstring error for Join functions * HOT version 2015-10-15, remove Fn::Select * Remove usage of sqlalchemy mutables * Enable convergence in zuul functional testing * Support to list software configs * convergence: Use the correct template when updating the resource * Convergence: concurrent workflow * Handle UnicodeDecodeError in db\_decrypt\_parameters\_and\_properties * Temporarily skip the ceilometer alarm test * Fixes JSON to YAML conversion bug * Add nova.network custom constraint * Get capacity when notification send if resize failed * wrong argument order for assertEqual in test * Convergence: Handle resource failure * Add port\_security\_enabled for Neutron 5.0.0.0b1 --------- * Add share network resource for manila * Move WritableLogger in-tree as it is deprecated in oslo\_log * Manually sync functional test requirements * Fix heat-db-setup error on rhel7.1 * Convergence: No back-up template for stack create * Produce more meaningful exception messages in nested stacks * Implement update for Manila::Share * Implement create-delete-check for Manila::Share * Switch to oslo.service * Updated from global requirements * Add BayModel to Magnum resources * Update version for Liberty * Imported Translations from Transifex * Remove PROTOTYPE support status * Coverage: Removed unreachable code from heat engine * Removes redundant validation of template (1) 5.0.0a0 ------- * Fix description for trove cluster IP attribute * Fix description for ResourceGroup count property * Fix ceilometer backend in heat docs * Move listener rpc client to rpc/listener\_client.py * Add the convergence resource replacement logic * convergence: sync\_point fixes * convergence: (temporary) convert int entity\_id to string * Fix the ThreadMgr mocking in test\_stack\_create\_max\_unlimited * Make the objects behave more consistently * Switch from MySQL-python to PyMySQL * Move Magnum client into main tree * Make requirements.txt python clients in ascending order * Make sure default\_client\_name declared for required resources * Removes is\_available() from manila client plugin * Adds service\_types to client\_plugins * Correct mocks for group adjust tests * Coverage: Full coverage for engine plugin manager * Missing template file on update fails silently * Not all exceptions from remote stacks are internal exceptions * Coverage: Additional test coverage for engine event * make heat-manage a console\_script entry point * Permit DRAINING condition for RS lb * Reusable empty template * Add apache2 support for heat API services * Added tests for checking of handling AssertionErrors * Stack updated error if creation fails * Remove unnecessary has\_client() checks * Designate client plugin * Imported Translations from Transifex * Updated from global requirements * Add additional info for DEPRECATED objects * Add previous\_status to SupportStatus * Add \_add\_event at the end of update\_task * Remove identical modules versions.py * Use pbr new autodoc feature * Coverage: Additional test case for better coverage * Add attribute type for openstack resources * Add attribute type for heat resources * Fix KeyError exception when stack snapshot deletion * Remove unnecessary registration of glance resource * Remove deprecated headers in auth\_password * Remove deprecated metadata\_update method * Move registration of GenericResource to HeatTest * Move registration of resources to HeatTestCase * Register ResourceWithPropsAndAttrs in HeatTestCase * Register ResourceWithProps in HeatTestCase * Register ResourceWithComplexAttributes in HeatTest * Register ResWithComplexPropsAndAttrs in HeatTest * Updated from global requirements * Continue to check if nova task is in progress * Don't access nova Server private attributes * Catch exceptions in service status report * Check that env is not None before decrypting * Test manila and zaqar exceptions * Convergence soft delete stack after delete action is completed * Fix RouterInterface properties validation * Update unit test case for Keystone client plug-in for service * Add manila client to heat requirements * Remove predecessor column from raw\_template * Split engine service test cases (6) * Updated from global requirements * Copy environment before decrypting * Add explicit return to \_get\_property\_value() * Clean openstack common modules * Add unit test case for Keystone client plug-in for group * Add unit test case for Keystone client plug-in for domain * Add unit test case for Keystone client plug-in for project * Add unit test case for Keystone client plug-in for role * Signal SoftwareDeployment resource * Sync with latest oslo-incubator * Convergence resource operations * Modify heat-engine's description in developer docs * Fix block\_device\_mapping property validation when using get\_attr * Move the heat\_keystoneclient\_v2 contrib package * Updated from global requirements * Move mistral resources in-tree * Fix wrong definition of assert * Register ResourceWithResourceID in HeatTestCase * SignalResponder \_get\_signed\_url should use cloudformation endpoint * Add test for barbican client * Provide a signal URL attribute for alarms * Make 'name' updatable for cinder volume type * Add 'description' for cinder volume type * neutron loadbalancer resource: provider property * Move manila resources in-tree * Give client plugins the chance to not register * Add replication properties to OS::Trove::Instance * Allowing params to be sent to the workflow * Add 'is\_public' property for cinder volume type * Drop use of 'oslo' namespace package * Support for encrypt/decrypt parameters in heat-manage * Fetch endpoint from service catalog * Support check for remote stack * Support snapshot/restore for remote stack * Remove redandunt build-in functions * Add NoOp dogpile cache backend * Unlimited option max\_resources\_per\_stack * Add support\_status to all resources in contrib * Updated from global requirements * Do not pass rich objects on servers' delete * Modify heading of the template sample page * Add deprecation warning for ResourceDefinition * Do not pass rich objects in server's suspend * Do not pass rich objects on server's resume * Move barbican resources in-tree * Move zaqar resource in-tree * Use Zaqar for software-config transport * Updated from global requirements * Change "ReST" to "REST" in developer doc * Remove deprecated old attribute schema * Add missing attribute types for neutron resources * Improve StackValidationFailed resp param\_groups * Move \_check\_active to nova client plugin * Change "Devstack" to "DevStack" in headings * Inherit files when restore * Use EntityNotFound instead of Keystone\*NotFound * Use EntityNotFound instead of VolumeSnapshotNotFound/VolumeTypeNotFound * Use EntityNotFound instead of VolumeNotFound * Use EntityNotFound instead of ServerNotFound * Use EntityNotFound instead of ImageNotFound * Move gnocchi resource in-tree * Stop using oslo\_utils.timeutils.isotime() * Move cinder\_volume\_type resource in-tree * Stop using deprecated oslo\_utils.timeutils.strtime() * Updated from global requirements * Update heat\_integrationtests.conf.sample * Freeze rsrc\_defn base on properties.data when restore * Add validation to set one of network, port or uuid * Backup new resource as soon as possible * Reload logging options when receiving SIGHUP * Move nova\_flavor resource in-tree * Switch total\_resources to use stack\_count\_total\_resources * Count all nested stack resources with DB operations * Get rid of oslo-incubator copy of middleware * Convergence: Check-Resource skeleton * Move keystone resources in-tree * Encrypt properties data * Remove deprecated list\_notifier\_drivers option * Fix config file generation * Eventlet green threads not released back to pool * Add attribute type for neutron resources * Report status when engine start * Disable cloud-watch-lite by default * Imported Translations from Transifex * Updated from global requirements * Simplify handle\_check in Nova server * Switch to oslo.policy * Split engine service test cases (5) * Add functional test for neutron port * Squash Havana migration scripts * Move extraroute resource in-tree * Add unsupported resources page to documentation * Heat could not create samples with Ceilometer * Stop monkey-patching global namespace * Fix py27log env in tox * Removes deprecated metadata property from Resource class * Include support status in resource schema * Avoid crash when registering resources * Revert "Add validation to set one of network, port or uuid" * Use network 'heat-net' for integration\_tests * Move zaqar client into main tree * Delete deprecated old-style client access * Raise HTTPBadRequest instead of ValueError for API validation * Should raise error if hook is invalid * Added documentation on resource contributions * Rename OS::Heat::StructuredDeployments * Rename OS::Heat::SoftwareDeployments * Remove deprecated nova\_utils * Run functional tests when no ceilometer endpoint * Add note on Barbican Order's order\_ref structure * Do not pass rich objects in Swift Container * Do not verify requirements on extension loading * Remove deprecated resolve\_runtime\_data * Remove deprecated parser module * Add note that OS::project\_id is available since Kilo * Save snapshot to db before stack snapshot complete * Check for encrypted\_param\_names key in environment * Find root stack ID with database operations * Remove TaskRunner from Volume resources * Add validation for parameter\_groups * Get rid of circular references in Resource and Function * Don't swallow AssertionErrors * Change user\_data\_format default value in Rackspace server * Improve cinder volume validation and tests related * Add CIDR format validation * Fix property validation for TemplateResource during update * Update the stack state as late as possible * Updated from global requirements * Pass stack to thread in resource\_signal * Retain references to stacks in all unit tests * Reference the parent stack, not parent resource in Stack * Fix integration tests for tox>2.0 * Catch warnings consistently during tests * heat\_keystone README update for service and endpoint * Resource plug-in for keystone endpoint * Resource plug-in for keystone service * Replace self.properties.get on self.properties[] * Fix docs about configuring heat with devstack * Add network uuid to server networks attribute * Don't raise error if actions are mismatched * Split engine service test cases (4) * Constraint port property range from 0 to 655535 * Add validation for cinder volume * Add mac address format validation * Add basic Ceilometer alarm test * Encrypt Heat template hidden parameters * Add a py34 env * Sync oslo incubator * Support additional Barbican orders * Import python modules instead of objects * Add address format check for property * Add attribute type for aws resources * Fix resource-signal for OS::Mistral::Workflow * Update cirros version * Assert that we can update TemplateResources with a new file path * Updated from global requirements * Move barbican client in main tree * Remove DatabaseInstance note from README * Save updated-in-place resources to backup stack * Custom constrain for keystone service * Update template paths for environment-mapped TemplateResources * Run heat\_integrationtests in parallel * Fix call to ignore\_not\_found() in SwiftSignal * Updated from global requirements * Support set 'read\_only' access mode for cinder volume * Use action in check\_\*\_complete method * Add type field to the resource attributes schema * Split engine service test cases (3) * Not allow to delete in-progress snapshot * Expose create time in stack resource list: * Convergence: Allow creating lightweight stacks * Decouple volumes of aws and os * Don't create events when signals don't perform an action * Add functional tests for stack tags/hidden stacks * Don't assert against all the lb-members * Prevent false positives of \*\_FAILED status * fix for retrieving leaf nodes in convergence stack delete * Imported Translations from Transifex * Updated from global requirements * Add Magnum client plugin * Add remaining\_executions attribute to OS::Mistral::CronTrigger * Wait for the stack lock to be released * Add validation to set one of network, port or uuid * Add support status for current\_size ASG attribute * Do constraint validation for None value property * Do not specify version for contrib plugins * Remove unneeded MANIFEST.in * Convergence prepare traversal * Don't use scoping information for admin auth * Use auth plugin provided getter methods * Generate stack events for stack state transitions * Updated from global requirements * Add more stack\_resource unit tests * Add unit tests for mistral workflow * Prevent false positives of UPDATE\_COMPLETE in integration tests * Enable SecurityGroups property for AWS LB resource * Add timeout hidden parameter to AWS LB * Remove empty properties from workflow definition * Use ipv4 address for connectivity in lb integration test * Add min\_adjustment\_step property to ScalingPolicy * Delete redundant resource.id checking * Use $DEST consistently in the post\_test\_hook.sh * Code improvement: avoid reduntant if conditions * Use ipv4 subnet in Heat scenario tests * cleanup of hacking.rst heat doc * Add note on SoftwareDeployment object structure * Support to generate hot template based on resource type * Fix logging during delete stack * Move aws resources tests to heat/tests/aws/ * Use the AccessInfoPlugin from keystoneclient * Use an auth plugin instead of manual auth * Remove the is\_id boolean check for domains * minor change to on\_other.rst file * change to environment.rst heat doc * made change to architecture rst heat doc * Replace regionOne with RegionOne * Use list instead of iterator in \`for\` loop for modifiable collection * Fix server creation with block\_device\_mapping\_v2 * Fix snapshot image/backup residue in backend * Stop snapshot creation checking if image in DELETED * Add details of volume backup failed reason * Fixes README to include saharaclient info * Fix TypeError exception during cancel stack update * changed heat dev docs to comply with conventions * Allow specific floating\_ip\_address when creation * Fix error network updation when stack-restore * changed heat dev docs to comply with conventions * Do not pass rich objects in Zaqar Queue * Do not pass around rich objects in Trove resources * Updated from global requirements * Add parameters types table to docs * Updated from global requirements * Do not filter stacks if tags is empty list * Update the rest of the code to satisfy flake8 in a py34 env * Use six.text\_type and six.reraise * Use six.moves.map/filter/zip * Change instances of x.next() to next(x) * Use SHA256 instead of SHA1 for resource signature * Use snapshot's environment when stack restore * Split engine service test cases (2) * Remove downgrade functions * Updated from global requirements * Use six.iterkeys(x) instead of x.keys() * Update xrange and lambda for python3 * Update urllib/httplib/cStringIO to use six.moves * Replace dict.itervalues/dict.iteritems and use len over filter function 2015.1.0 -------- * Improve StackValidationFailed response in nested * Fix ResourceGroup validate when there are removal\_policies * Split engine service test cases (1) * Fix ResourceGroup validate when there are removal\_policies * Fix unicodeerror when heat-engine start * Add v6-fixed-ip support for nova server * Fix usage of novaclient * Add filtering for stack-list by stack\_id * Fix wrong type of exception raised * Persist parent\_resource\_name and make sure it's available * Fix unicodeerror when heat-engine start * Novaclient v2 instead of v1\_1 * Don't re-bind environment for get\_file during stack update * Cleans nullable=True in db model column declaration * Set IMAGE\_UPDATE\_POLICY default to REBUILD * To attach interface for server when using 'uuid' * Set auth\_encryption\_key option to be secret * Implement OS::Manila::SecurityService resource type * Add v6-fixed-ip support for nova server * Docker plugin add cpu set property * Use six.itervalues(x) instead of x.values() * Imported Translations from Transifex * Pass stack id to init stacklock * Cancel nested stack updates when appropriate * Set auth\_encryption\_key option to be secret * Updated from global requirements * Remove redundant checks of stack status * Split engine service test case * Add version for device\_block\_mapping\_v2 * Deny to migrate to lower schema version * Correct properties.Schema.NUMBER to INTEGER * Release Import of Translations from Transifex * Fix sqlalchemy migration script 061 for DB2 backend * Adds --version into command docs * update .gitreview for stable/kilo * Remove unnecessary required=False * Don't re-bind environment for get\_file during stack update * Add ability to filter stacks by tag * Add additional validation for fip properties * Make SoftwareDeployments work for non-CREATE actions * Add manila share type * Add env storing for loaded environments * Add OS::Mistral::CronTrigger resource * Clarify \`attributes\` support status for AutoScalingGroup * Update documentation for path based nested attribute access * Add support for the httpsRedirect property * Make SoftwareDeployments work for non-CREATE actions * Add version to manila plugin * Show deprecated warnings when import parser * Start use error\_exit function in AWS LB * Docker plugin add host devices property * Docker plugin add cpu share property * Fix sqlalchemy migration script 061 for DB2 backend * Improve StackValidationFailed response in outputs * Improve StackValidationFailed response in properties * Add version to support\_status where it omitted * Make sure snapshot belongs to stack for actions * Fix Zaqar Client's service\_type * Use helper functions stack\_suspend and stack\_resume * Persist parent\_resource\_name and make sure it's available * Docker plugin add the 'support\_status' for the properties of 'RESTART\_POLICY','CAP\_ADD' and 'CAP\_DROP' * Add '2015.2' version for Liberty in doc * Use stack\_object directly in test\_engine\_service.py * Correct stack\_object.Stack get\_all mock * Add a "show\_hidden" parameter to stack-list API * Add ability to hide stacks based on tag * Database API and engine changes for stack tags * Update openstack-common reference in openstack/common/README * Fix NeutronLoadBalancerTest.test\_neutron\_loadbalancer timeout * Deprecate using required=True with default value * test\_resource for functional tests * Make disk property of flavor default * Add OS::Mistral::Workflow for Mistral workflows * Fix resources allocation in documentation * Open Liberty development * To attach interface for server when using 'uuid' * Make sure UpdatePolicy is unset for Heat scaling group 2015.1.0rc1 ----------- * Fix functional test\_signal\_during\_suspend * Imported Translations from Transifex * Cleans nullable=True in db model column declaration * Cleans default declaration nullable=False from heat objects * Do not resolve neutron resource attributes when resource\_id is None * Do not detach/re-attach volumes in AWS Instance * Novaclient v2 instead of v1\_1 * Updated from global requirements * Implement Manila client plugin * Set IMAGE\_UPDATE\_POLICY default to REBUILD * Fix stack update issue * Fix stack-update for OS::Nova::Server resource * Imported Translations from Transifex * Set stack status to FAILED when engine is down * Create an event when signalling fails * Do sleep(0) for first task sleep * Ignore migrating environments for deleted stacks * Fixes migrate\_data utils to avoid created\_at filed * Add separate requirements.txt to integration tests * Updates migrate\_repo README * Fix typo in doc * Prove that we can't signal during a suspend * OS::Neutron::Port default replacement\_policy=AUTO * Re-factor db sqlalchemy tests * Use HeatTestCase as parent instead of testtools * auth\_encryption\_key is being checked to be 16, 24, or 32 * Correctly initialize copies of stack during updating stack * Change the default num\_engine\_workers to get\_worker\_count() * Move generic resources to properties schema * Cleanup snapshot records when stack deletion * Make sure to delete stack when SNAPSHOT\_IN\_PROGRESS * Add versions to all contrib plugins * Set state to failed if we get a base exception * Update all templates in neutron tests * Split net and subnet tests to different files * Move provider\_net test to separate file * Move router tests to separate file * Move floating ip test to separate file * Move tests for port resource to separate file * Move constraint's tests to test\_neutron\_client.py * Make 'refs' attribute of ResourceGroup resource indexable * Move common neutron module tests to separate file * Move all neutron test in separate directory * oslo-incubator sync * Add user\_identity to RequestContext.to\_dict() * Add dependency for FIP if used network in port * Add function 'digest' doc * Imported Translations from Transifex * test\_hooks remove race-prone status wait * Add extra check for signal during DELETE or SUSPEND * Add SupportStatus to vnic\_type * Docker plugin add read\_only property * Make the status\_reason field Text instead of String(255) * make actions property optional * Move to hacking 0.10 * Remove return for rpc casts in rpc worker client * Add /usr/local/lib/heat to default plugin\_dirs * Using OS\_TENANT\_NAME in heat-keystone-setup-domain * Fix common misspellings * Adds version reporting for heat commands * Fix some new PEP8 errors found at gate * Don't assume that there is one service per host * Fix the topic and server that the listener client uses * Use oslo.log in wsgi.py * Don't use a different thread local store to oslo.log * Fix typo in pluginguide * Add note that OS::stack\_id is available since Kilo * Add minimal\_instance\_type config option * Add floating network config option * Fix SupportStatus msg appearing in doc generating * Use Service objects instead of db\_api * gnocchi: ceilometer alarm update * Add way to collect map of needed attributes * Versioned-object StackLock * Unit test case migration for Stack object * Move stack\_user\_domain warning to startup * Func tests use fedora-heat-test-image * iniset heat\_integrationtests.conf * passed version information while parsing arguments * Updated from global requirements * Implements stack lifecycle scheduler hints * Fix barbican resources * Unit test case migration for Watch data and Rule object * Unit test case migration for Event object * Unit test case migration for Resource object * fix mocking of db\_api.stack\_count\_all() * Imported Translations from Transifex * Use auth plugins for domain client and admin client * Correct confusing "cls" argument on non-static method * Call db refresh in Stack object refresh * Update integrations tests config sample * Use outputs section for getting ip addresses 2015.1.0b3 ---------- * Add a functional test for hooks/breakpoints * Add breakpoint support * Store Resources before they are created * Switch config deferred\_auth\_method to trusts by default * Fixes SoftwareConfigService to use Resource object * Fixes StackWatchService to use objects in place of db * StackResource convert operations to use RPC * Versioned object - WatchRule and WatchData * Remove usage of 'long' data type * Pass the environment into the Template class and not Stack * Versioned-object SyncPoint * Add OS::Trove::Cluster resource * Add integration scenario test for Neutron LBaaS * Check all available support statuses * Docker plugin add restart policies and capability properties * Add extra columns for resource table * Versioned object Service * Use oslo.log for heat\_integrationtests * heat.conf options for transport properties default * Separate message and traceback even if not a remote error * Pin the target keystone endpoint to the context auth url * Fix OS::Zaqar::Queue resource\_mapping * Versioned object - SoftwareDeployment * Versioned objects - Event * Versioned objects - Snapshot * StackTag versioned-object * Source gnocchi alarms resources in the right way * Allows update of domain for keystone project and group * Keystone resource plugin for User * Remove capacity check from AWS::AG update * Make Heat ASG always do rolling\_updates * Replace mox with mock for stack-update test cases * Fix RS swift client to match correct signature * Fix typo in contrib resource declaration * Move test\_notifications to functional * Add missing versioned mechanism to Stack object * Replace mox with mock for stack-lock test cases * Versioned objects - UserCreds * Keystone resource plugin for Group * Allow empty 'config' for software deployments * Apply neutron router constraint * Apply neutron subnet constraint * Convergence sync\_point table * Versioned objects - Resource * Versioned object - SoftwareConfig * Refactor '\_get\_default\_network' method in the integration tests * Adds migration test case for version 056 * Add trove flavor custom constraint * Versioned objects - ResourceData * Fix db migration script 057 failure on db2 * Replace mox with mock for stack-delete test cases * DB changes for resource locking * Add Digest intrinsic function * Use AWS::EC2::EIP for test\_server\_cfn\_init * Func test conf to specify boot config * Fixes for test\_server\_software\_config * Func test use param for software\_config\_transport * Use configurable flavor for AWS LoadBalancer * First objects - stack and raw template * Keystone resource plugin for Project * Imported Translations from Transifex * Create an integer id for the resource table * Store template + environment for rollback * Retrieve service catalog when it is missing * Fix config drive not created when boot from volume * Move resource inheritance class to engine/resources * Imported Translations from Transifex * Keystone resource plugin for Role * Sqlite migrate\_data() utility method * Fix migration testcase 1-to-1 between stack and raw\_template * Refactor test\_parser module * Updates heat\_keystone with version support * Enforce integer API parameter checking * Fix migration testcase 1-to-1 between stack and raw\_template * Imported Translations from Transifex * Updated from global requirements * Always update remote\_stack * Integration scenario test refactoring * Keystone resource client plugin and constrains * Correct networks matching interface ports * Move trove resource * Move sahara resources * Move heat resources * Move ceilometer alarm resource * Move swift resource * Move glance image resource * Move neutron resources to /engine/resources/openstack/neutron * Updated from global requirements * Remove unused method from FakeDBInstance * Add extra data to Stack table for Convergence * Correct the check\_update\_completion logic in instance\_group * Reduce the load on functional tests * Remove str() before exc to make sure lazy translation work * Updated from global requirements * Move cinder volume resource * Move nova resources to engine/resources/openstack/nova/ * Move datastore validation to trove client plugin * Replacing data\_processing with data-processing * Add the documentation of how to set without the gateway IP * Fix variables reference in the integration tests methods * Convert all non-test imports of json to jsonutils * Move other aws resources to corresponding directory * Move AWS::AutoScaling::\* resources * Move AWS::CloudFormation::\* resources to heat/engine/resources/aws/cfn * Move AWS::EC2::\* resources to heat/engine/resources/aws/ec2 * Improve StackValidationFailed exception * Fix mocking requests in test\_engine\_service * Imported Translations from Transifex * Don't pass the parent\_resource object into Stack() * Remove the template mapping from the env before creating child stacks * Cleanup the update policy tests * Utility function for int param checking * Updated from global requirements * Patch validate methods with mock instead of mox * Imported Translations from Transifex * Move software service logic to own module * Add code tag for from\_task\_with\_args() docstring * "repeat" function for HOT templates * Add resource\_definitions check to Stack.validate * Change the engine-listener topic * Utility for database migration * Add ability to pass parameters during update * Use mock instead of mox for test\_nested\_stack.py * Handle deleting status during volume detachment * Fix Typo in composition guide * Add stack\_tag table and remove stack.tags column * Increase default for 'max\_nested\_stack\_depth' to 5 * Use mock instead of mox in clients test * Add 2to3 compatibility for functools.wraps * Refactor tests for migrations in heat * Add image\_id property to node group template * Add sahara image constraint * Imported Translations from Transifex * Add ability to pass 0, "", {} or [] as a parameter * Register CloudServer as OS::Nova::Server * Refactor parameter tests * Tweaking 'global\_tenant' parameter parsing * Deployment signal\_transport: TEMP\_URL\_SIGNAL * Move deployment handle\_signal to rpc call * Updated from global requirements * Add testcases for heat.engine.EngineService start() and stop() * Imported Translations from Transifex * Only parse complex types if there is a value * Change ResDataNestedStackTest to not use a nested stack * Handle NotFound exception in total\_nested() * Use the AWS instance type in the cfn\_init scenario * Integration test for software-config tools * Allow lists and strings for Json parameters via provider resources * Convergence message bus * Updated from global requirements * Restart haproxy in AWS LB during boot * Move request\_context from engine.service to common.context * Add test for db version 052 convergence\_flag * Translate exception in the right way * Updated from global requirements * Add name and tenant indexes to stack table * Make import of oslo libraries namespaceless * Fix Keystoneclient V2 wrapper for multi-region * Fix JSON formatting in AWS LoadBalancer template * Revert "Move deployment handle\_signal to rpc call" * Imported Translations from Transifex * Updated from global requirements * Use stack.validate() not stack.create() for limit tests * Move nested stack delete test to functional * Sync oslo-incubator and remove log module * Move logging to use oslo\_log library * Imported Translations from Transifex * Remove extra space in docstring * Rackspace:LoadBalancer add address in virtualIps * Stop RPC server gracefully * [DOC] Minor - fixed typo in file extension * Move assign\_keypair method in base class * Re-use stack\_create method from base class * Apply neutron port constraint * Apply neutron network constraint * Split templates and tests in scenario tests * Add 'ha' property for OS::Neutron::Router * Remove 'adding-new-users-to-devstack' doc on\_devstack.rst * Enable SSL for EC2Tokens * Updated from global requirements * Use domain\_id from auth token when not configured * Revert "Allow empty 'config' for software deployment" * Update heat-manage.rst with service command * Do not use volume objects in volume resources * Add a config option to enable Convergence * Move autoscaling tests with signals to functional * Make sure template resource's metadata is refreshed * Pass the resource name into get\_resource\_info() * Remove some unused functions and improve call\_until\_true * Move reload test to test\_instance\_group * Remove duplicate AS reload test * Fix heat and ceilometer client connection * Move deployment handle\_signal to rpc call * Manage deployment updated\_at values * Expose deployment/config updated\_at/created\_at * fixed typo from dependant to dependent * Typos fixed in return messages * Catch Conflict exc for floating ip association * Move scaling group create error to autoscaling/ * Allow empty 'config' for software deployment * Just to delete the stack when adopt rollback * Use python abc for abstract classes * OS::Neutron::Subnet needs IPV6 RA mode property * ceilometer: new Gnocchi Alarm resources * Add resource\_id None check for deployment deletion * Imported Translations from Transifex * Always check for 'component' in SoftwareDeployment * Reorganize user and access code * Move update\_in\_failed to autoscaling * Fix formatting issues in NeutronAutoscalingTest * Test for path attributes in OS::Heat::AutoScalingGroup * Support path attributes in OS::Heat::AutoScalingGroup * Release stack lock when successfully acquire * Change the event status to SIGNAL\_COMPLETE * Split instance code into seperate file 2015.1.0b2 ---------- * Change Neutron::FloatingIPAssociation res's name * Skip Stack Adopt/Abandon integration tests when Stack Adopt is disabled * Move suspend/resume autoscaling tests to functional * Move autoscaling InstanceId tests to autoscaling/ * Move all scaling policy tests to autoscaling/ * Remove autoscaling test that is now a functional test * Don't create the loadbalancer in the unit tests * Remove duplicate loadbalancer nokey test * Apply instance group fix to AS functional test * Catch notfound exception when deleting project * Updated from global requirements * Get tox to generate config for heat\_integrationtests * Change Nova::FloatingIPAssociation resource's id * Change to basic notification unit tests * Remove duplicate heat\_autoscaling\_group tests * Move aws nested stack tests to functional tests * Fix update on failed stack * fixed typo from accessable to accessible * Enable some unit tests back * fixed typo form dependancy to dependency * Wait for all resources to get updated before asserting state * Remove TaskRunner from Neutron Pool resource * Add check\_adopt\_complete to the stack\_resource * Use "if stack is not None" and not "if stack" * Make the update policy timeout check into a unit test * heat-manage service list * Imported Translations from Transifex * Further fix standalone authentication * Remove unused imports from heat files * Move LB reload logic into scaling library * Fix sw component creation parameter error * Fix tests for ServerContraint * Use unique stack name in tests by default * Add Mistral client plugin * Add additional tests for heat.api.aws package * Fix the standalone authentication mechanism * Don't do snapshot when other action in progress * Initialize stack with ADOPT action when adopting * Remove lockfile from requirements * Store auth\_url and region\_name when trusts are enabled * Test auto-scaling for neutron * Imported Translations from Transifex * Implement handle\_check for Ceilometer alarms * Save input parameters for stack adopt * Implement 'InstanceId' for autoscaling group * Enhanced error handling in outputs block * Add all dotfiles to the list of pep8 exceptions * Add retry logic to Rackspace LB delete action * Allow floating\_ip\_pool on Nova-net in Sahara * RowProxy replaced with update query to set db attributes * Updated from global requirements * Don't mock oslo.messaging \_CallContext * Use keystoneclient auth plugins * Remove dead option 'instance\_driver' * Avoid unnecessary passing of child\_params in asg * Implement 'InstanceId' for LaunchConfiguration * Renaming image property to default\_image\_id * Improve address description by example * Add lists of Linux dependencies * Prevent hanging in DELETE\_IN\_PROGRESS * Remove argparse from requirements * Convert parser tests that need nested stacks to unit tests * Move resource group property update tests to functional * Use properties.data when testing for "provided by the user" * Add property 'port' to RouterInterface * Convert unicode to six in heat/engine * Always fetch temp URL key before generation * Expose stack\_user\_project\_id in stack-show * Remove TaskRunner from most Neutron resources * Remove TaskRunner from SwiftSignal * Remove TaskRunner from WaitCondition * Unit test name\_list and black\_list * Move ResourceGroup update sequence test to functional * Move the resource group adopt test to functional * Add "tags" column to stack table * Updated from global requirements * Deprecate QUEUE\_ID in heat\_zaqar * Move autoscaling update policy to functional * Enable H904 style checking rule * Enable H305 and H307 style checks * Move instance group update policy tests to functional * Remove default for DISTRIBUTED property * Enable resource signals be handled asynchronously * Imported Translations from Transifex * Return available info for uncreated resource * Added unit test for unavailable resource * Updated from global requirements * Remove keypairs from test\_instance\_group.py * Remove now unneeded functional test * Add support status for network/subnet neutron properties * Add support status to docs for properties * Correct protocol allowed values for firewall rule * Fix template version in composition section * Enable H402 style check * Enable H202 style check * Split tests for AWS/OS waitconditions * Split wait condition handle into separate files * Fix DeprecationWarning for using oslo.middleware * Split wait condition into separate files * LB: separate out the FnGetRefId and FnGetAttr tests * LB: Separate out the validation tests * LB: Make unit tests for \_haproxy\_config * LB: Break up \_haproxy\_config to enable easier unit testing * LB: Remove unused "templ" parameter to \_haproxy\_config * Account for nested stack validation in ResourceGroup * proper handling of unsupported request methods * Make StackResource less strict on initial validation * Don't validate custom constraints on default values * Move template resource tests to functional * Make the attribute tests not need a nested stack * Separate the nested resources attribute tests * Sync the remainder of the composition doc from manuals * Transparent stack\_id only works on get\_resource * Enable H233 style check * Enable E251 style check * Updated from global requirements * No parameter value validation when strict\_validate disabled * Deal with misconfigured cloud\_backend * Remove mocking of timeutils.utcnow * Add ssl support for sahara client * Register sahara client specific config opts * Rework stack\_resource \*complete method unit tests * Add some crud tests to nested stacks * Add missing template resource member list test * Prevent occasional test failures due to duplicate stack names * Split AWS/OS volume tests * Reorganize volume code * Updated from global requirements * Add 'shared' property for OS::Neutron::MeteringLabel * Add 'shared' property for OS::Neutron::Firewall * Need to call \_delete\_resource() anyway for sd deletion * Move tests for \_lb\_reload() into test\_instance\_group * Move autoscaling vpc zone test into autoscaling/ * Move launch configuration into tests/autoscaling/ * Move heat\_autoscaling\_policy to tests/autoscaling/ * Move heat\_autoscaling\_group into tests/autoscaling/ * Remove duplicate autoscaling adjustment tests * Do not use private classes from oslo.i18n * Clarify "attributes" support status for ResourceGroup * external link not working in heat doc * Add a strict\_validate flag to Stacks * Stop patching oslo.messaging private bits * Remove MutableDict realization * Enable F402 and F812 style checks * Enable E265 style check * Enable H101 style check * Enable E122, E126 and E128 style checks * Update oslo-hacking and disable failing checks * Make propagate\_files not have to create a nested stack * Add 'sd' None check for check\_(action)\_complete * Gracefully fail to delete nonempty S3 Bucket * Use oslo.config generator * Cleanup heat/openstack/common * Add PurgeOnDelete property to OS::Swift::Container * Better error on deleting non-empty Swift container * Wait for Sahara Cluster to be deleted * Add 'distributed' property for OS::Neutron::Router * Add support\_status for OS::Cinder::VolumeType * Add support status for server console\_urls attr * Do not ignore OverQuota errors from neutronclient * Switch to oslo.utils.uuidutils * Bring over pretty\_tox.sh from nova * Use AWS LoadBalancer with selinux-enabled image * Use oslo.context * Add 'required' attribute to OS::Heat::CWLiteAlarm properties * Add property 'router' to Neutron::VPNService * Add property 'router' to RouterInterface * Correct group's updates from a failed state * Add InstanceList attr to AutoScalingGroup * Authenticate the domain user with id instead of username * Don't block stack deletion if user creds fail * Remove default value from Port binding:vnic\_type parameter * Handle 404 on Zaqar Queue delete * Retry Rackspace LB nodes operations if immutable * OS::Neutron::Subnet host\_routes should allow updates * Create and update func tests for resource group * Deprecate Rackspace::Cloud::Network * Fix NetworkInUse when deleting RS Cloud::Network * Fix tox for integration tests * Abstract rpc 'create\_stack' call mock method * Added pseudo param OS::project\_id * Fixed a typo in sahara\_templates * Add Nova flavor constraint for SaharaNodeGroupTemplate * Imported Translations from Transifex * Fix SoftwareDeployments validation * Refactor Zaqar plugin client access * Fix doc generation for Rackspace::Cloud::Network * Remove warnings when generating docs * Re-enable doc generation for contrib plugins * Fix doc generation for contrib resources * Remove gettextutils import * Fix json syntax in inline template * Disable nested validation for ResourceGroup with zero count * Separate StackWatch out into it's own module * Remove duplicate test (it's already in our functional tests) * Add some autoscaling crud unit tests * Move instance\_error\_causes\_group\_error() to functional tests 2015.1.0b1 ---------- * Imported Translations from Transifex * Check stack adopt enable before adopting * Use configured auth for standalone middleware * Change hardcoded attr names in \_resolve\_attribute * Add PropertyUnspecifiedError exception * Updated from global requirements * Move test\_update\_group\_replace() to functional tests * Move test\_create\_config\_prop\_validation to functional * Move test\_size\_updates\_work() to functional tests * Check that template format plugins are registered * Get correct server\_id when udpate Volume Attachment * Remove \*.pyc files on every tox run * Update testing-overview.txt * Add "parameter\_defaults" to the environment * Always update nested stacks * Integration test for remote stack * Fix WaitCondition SupportStatus versions * Fix suspend/resume error in RemoteStack * Support cinder volume retype * Add cinder volume type constraint for resources * Enable ResourceUnknownStatus to report status\_reason * Add cinder volume constraint for Cinder Volume * Take admin password for server rebuild * Support tox test case single run * Fixed typo in remote stack resource * Allow VolumeAttachments to delete in parallel * Unit test for resource attribute SHOW fix * Adds multi-region support for stack resource * Move basic instance group functional tests * Rename the remaining instance group tests for clarity * Updated from global requirements * Sync oslo modules * Remove run\_tests.sh * Prevent showing 'show' too early * Stricter complexity checking in tox configuration * Small re-factoring in template\_resource * Handle error with non existing template file * Add proper unit tests for group Tags * Add some unit tests for the instance group * Use kwargs for ResourcePropertyConflict exception * Added tests for pseudo params * Deprecate HARestarter resource type * Add dependency on Router External Gateway property * Use only FIP dependencies from graph * Add dependency hidden on router\_interface * Correct '\_refresh\_instance' method in OSDBInstance * Check if encoded user credential may get truncated * Do static template validation for nested stacks * Deprecate Rackspace::Cloud::Server * Convert unicode to six in heat/engine/resources * Convert unicode to six.text\_type in heat/api * Convert unicode to six.text\_type in heat/tests * Make 'admin\_pass' updatable for nova server * Fix formatting in integration tests README * Imported Translations from Transifex * Updated from global requirements * Remove i18n import from loguserdata.py * Always use fakes\_v1\_1 for heat.tests.v1\_1 fakes import * Re-factoring os/neutron resolve methods * Use template directly instead of stack.tmpl * Workflow documentation is now in infra-manual * Apply cinder snapshot custom constraint * Reduce Stack complexity to below 20 * Expose resource attributes in the API * Expose resource attributes in the engine * Add stack\_user\_project\_id to \_create\_stack RPC interface * engine service add stack\_user\_project\_id to create\_stack interface * Convert x.iteritems() to six.iteritems(x) * Add serial console url attribute for nova server * Show the creation time for stack snapshots * Add cinder snapshot custom constraint * Apply cinder volume custom constraint * Extract group functions into a utility module * Reduce V1.1 test fakes complexity to below 20 * Revert "Handle error with non existing template file" * Remove heat.config.sample file * Remove config check\_uptodate test * Use physical\_resource\_name to generate the resource ID * Implement handle\_check for Rackspace Cloud Servers * Pass status reason when trove misbehaves * Make all assertEqual() calls conform to convention * Add support for pass through references * Support better access to nested attributes * Add cinder volume custom constraint * Apply nova flavor constraint for resources * Apply nova server constraints for resources * Fix invalid syntax on heat-db-setup * Use the right log marker functions * ResourceGroup allow update of resource\_def * Catch v3 keystone unauthorized error when creating stack * Always import heat.rpc.api as rpc\_api * Fix error msg invalid stack or res name * Fix documentation on Fn::Base64 function * Add OS::Cinder::VolumeType resource * Reduce Server update complexity to below 20 * Populate \_template\_classes global on first use * Consider invalid keywords a template validation error * Add console\_urls attribute to server resource * Pickup the region name passed in from heatclient * Record update\_time for suspend/resume/snapshot actions * Updated from global requirements * Add default\_client\_name in Nova::FloatingIPAssoc * Fill test database from models description * Fix outputs validation place in Stack.validate * Failed res no need UpdateReplace which has nested\_stack * Remove ignoring [H302] in tox.ini * Fix [H302] errors in heat\_integrationtests * Fix [H302] errors in heat/tests * Fix [H302] errors in heat/engine * Update Barbican resources to match library changes * Support availability zones in Node Group Templates * Support secgroups in Sahara Node group templates * Support volume type in Sahara Node Group Template * Fix package name when using heat-db-setup in rhel7 * Remove Python 2.6 classifier * Fix permission bits for source file * Use correct IDs when collecting multipart config parts * Handle error with non existing template file * Fix [H302] errors in heat/db * Imported Translations from Transifex * Add support for running tests against standalone Heat * Add logging fixture to integration tests * Revert "Change RouterGateway resource's name" * Moving translate same logic in different method * Further split ASG code * Detect container failure when checking create complete * Fix [H302] errors in heat/common * Change RouterGateway resource's name * Create common stack\_create functional test helper * Move common functions into functional test base-class * Add functional test for update of group of provider resources * Add functional test for update of provider resource * Add requirement to SecurityGroup "remote\_group\_id" * Updated from global requirements * Add Dimensions Default in AWS\_CloudWatch\_Alarm.yaml * Correct error msg when resource or output are empty * Handle remote thrown NotFound RPC exceptions * Fix kwargs going into ResourceDefinition * Support vnic\_type in OS::Neutron::Port * RandomString RefId return name with no resource\_id * SoftwareDeployments make servers property updateable * Make ResourceGroup updates update nested stacks * Correctly set CombinationAlarm repeat\_actions * StackResource consider files in implementation\_signature * Move implementation\_signature to StackResource * Imported Translations from Transifex * Fix and assert calls to update\_software\_deployment * Include group argument in calls to create\_software\_config * Updated from global requirements * Don't stop create immediately on error for stack resources * Fix [H302] errors in heat/cloudinit * Make Cloud Loadbalancer properties updatable * Functional tests skip volume\_create\_backup\_restore * Remove duplication on stack resource operations * Add ModelSMigrationSync classes * RandomString don't skip superclass validation * Import sqlalchemy module instead of classes * Alter models and add migration * Move ImageConstraintTest to test\_glance\_client.py * RandomString physical\_resource\_id as id not the string * Update sample conf for new oslo.db release * ResourceGroup don't special-case zero count * Fix [H302] errors in heat/api * Remove KeypairConstraint and FlavorConstraint to nova.py * Implement custom constraint for nova server * Handle 404 and 409 response when deleting containers * Fix incorrect ca argument for heat ceilometer client * Fix [H302] errors in contrib * Mark stack\_domain\_admin\_password as a secret option * Correct error message when query domain id * Remove validation of nested stack for preview * Use environment file in template-validate * Clarify ResourceGroup properties support status * Remove unused module excutils * Remove unused module processutils * Use RPC directly for software deployment operations * Use RPC directly for software config operations * Implement handle\_check for Cinder and EC2 Volumes * Implement handle\_check for OS::Nova::KeyPair * Implement handle\_check for OS::Swift::Container * Implement handle\_check for OS::Trove::Instance * Implement handle\_check for OS::Nova::Server * Implement handle\_check for CloudWatch * Make resource check messages more consistent * Improve error response in cfn Outputs validation * Add snapshot restore HTTP API * Updated from global requirements * Add validation constraints on config inputs * Correct validation for timeout when rolling update * Always using domain id to create domain project or user * Remove die\_if\_not\_set check for var user\_roles * ERROR\_WAIT\_TIME should be a config option * unconfigured clients look in the [clients] section for defaults * Implement update of AWS::EC2::SecurityGroup rules * Using six.string\_types for python3 compatible * Add CERT file support in heat-keystone-setup-domain * Updated from global requirements * Imported Translations from Transifex * Fix error raising in cfn with wrong output section * Add user\_creds\_id to \_create\_stack RPC interface * engine service add user\_creds\_id to create\_stack interface * StackResource add show\_deleted option to nested() accessor method * StackResource add force\_reload to nested() accessor method * Add nested\_depth to internal \_create\_stack RPC interface * engine service add nested\_depth to create\_stack * Add nested\_depth column to stack table * Move creation of custom env to environment module * Update docs to reflect HOT version support * Fix legacy alarm matching\_metadata broken by recent fix * Check prop\_diff contents after modifying it * Adding missed whitespace between the words * Imported Translations from Transifex * Updated from global requirements * Remove oslo sslutils * Remove oslo middleware.base module * Validate nova server's metadata * Fix the get\_attr docs in the hot\_spec * Change allow\_values -> allowed\_values in hot\_guide * Imported Translations from Transifex * Convert value type in alarm matching\_metadata * Fix translating error in unittests * Move to oslo.middlware request\_id module * Record the updated\_time for nested\_stack * Use correct object when deleting * sync oslo-incubator for request\_id shim * Repair tox -ecover * Correct CA cert argument for glanceclient * Imported Translations from Transifex * Fix add\_dependencies for floating\_ip resource * Don't import HeatTestCase directly * Add some imports to hacking import\_exceptions * Make HARestarter do a proper lookup of the RefID * Remove the deprecated heat/db/sync * Implement stack restore * Make sure that AutoScalingGroup depends on the launch config * Tolerate null on Json db load * Halt test\_cinder\_volume\_create\_backup\_restore on error * ResourceGroup add remove\_policies property * Don't shadow local variables "resource" * Fix support status for OS::Heat::SoftwareComponent * Imported Translations from Transifex * Functional test UpdateStackTest * Don't stop update immediately on error * Inherit roles for create\_trust\_context() * Add support\_status to SoftwareDeployments * Catch correct exception for Cinder api version detection * Put a cap on our cyclomatic complexity * Support Cinder scheduler hints * Remove vim headers * ResourceGroup update refactor * Add unicode support for resource name * Update api docstrings to match guidelines * Ensure all Neutron LoadBalancer members are deleted * Unit tests: remove dead code from Neutron Autoscaling test * Log translation hint for Heat.contrib * Remove unused oslo lockutils module * Add tox genconfig target * Validate tenant\_id part of TempURL in clients * Do not match subnets if no networks defined * docs: update jeos\_building instructions * Log translation hint for Heat.engine (part1) * Add query property to threshold alarms * Log translation hint for Heat.engine (part3) * Log translation hint for Heat.engine (part2) * Make Rackspace Cloud DNS TTL constraints match API * Adding tests for sahara client exeptions * Add a handle\_delete method to SwiftSignalHandle * Add is\_conflict() to client plugins * Clarify snapshot deletion methods * Refactor cinder volume v2 API changes * sqlalchemy migration not to import model * Remove deprecated function i18n.install('heat') * stack delete fails when instance is soft deleted * Updated from global requirements * Pass correct 'security\_groups' value for port operations * Help message of configurations support i18n 2014.2 ------ * Don't update a LoadBalancer under autoscaling control * Make sure that the properties are stored on updates * Don't update a LoadBalancer under autoscaling control * Do not attempt a stack update when it is deleting * Update references to auth\_token middleware * Handle error in templates with incorrect resources * Bring the fakelogging closer to olsotest * Make sure that the properties are stored on updates * Add missing extra "greenthread" arg to remove\_event() * Update references to auth\_token middleware * Add missing \n at the end of file 2014.2.rc2 ---------- * Add missing extra "greenthread" arg to remove\_event() * Do not attempt a stack update when it is deleting * Fix network\_gateway residue when resource deletion * Add custom get\_temp\_url to RackspaceSwiftClient * Update translations for Juno * Don't send multiple update-cancel messages to an event * Clean up signalling events after stack updates * Template not required on stack-adopt * Convert bool/int values into string for string properties * Rewrite AutoScalingGroup adjustment tests as unit tests * Convert the autoscaling policy tests into unit tests * Move some AutoScalingGroup validation tests to a separate file * Rework autoscaling group current\_size attribute * Imported Translations from Transifex * Rework the way the matching metadata is created * Add volume backup/restore integration test * Configure flavor and image from env * Refactor template simple\_parse * Use properties in ceilometer alarm not parsed\_template('Properties') * Unit test autoscaling.\_calculate\_new\_capacity * Move TestInstanceGroup to test\_instance\_group.py * Make sure that property defaults are converted correctly * Move test\_server\_cfn\_init from tempest to heat * Preserve env when calling tox * Revert "Hard delete backup stack after successful update." * Support Cinder API version 2 * Updated from global requirements * Implement check for Rackspace resources * Refactor AWS::EC2::SecurityGroup resource * Unittests: refactor AWS::EC2::SecurityGroup tests * update docs to use correct stack list command * Docs - update JEOS building instructions * Don't send multiple update-cancel messages to an event * Clean up signalling events after stack updates * Enable breaking test for adopt operation * Improve error for custom resource * Add OSprofiler integration into Heat * Provide support status info for OS::Glance::Image * Provide support status info for some resources * Fix DB2 column 'id' autoincrement issue * Columns needs to be non-nullable for DB2 * Remove cinder-keystone-setup script * Add current\_size attribute for OS::Heat::AutoScalingGroup * Fix cloud-init Python syntax for Python < 2.6 2014.2.rc1 ---------- * Updated from global requirements * Sync environment and composition docs from openstack-manuals * Fix some sphinx warnings/errors * Disable Abandon & Adopt features by default * Template not required on stack-adopt * Include parameters info in stack-abandon data * Update usage of Barbican library * Open Kilo development * Switch to oslo.serialization * Switch to oslo.utils * Remove unused network\_utils * Access Template class through template module * Don't use DB column names for sort keys * Skip validation if depends on not created resource * Add tests for list\_stacks and count\_stacks params * Don't evaluate ceilometer watchrules * Add two attributes for cinder volume * Fix subnet residue when resource deletion * Handle clients that don't accept auth\_url=None * Fix usage of client in Barbican resources * Fix barbican plugin registration * Fix heat.engine.clients.has\_client * Include credentials for heat calling self * Add keystone v2 keypair methods * FloatingIP updateable port\_id, fixed\_ip\_address * Do template validation during creation * Fix couple tests in test\_engine\_service.py * Improve error handling in api files * Add an option to disable cloud watch lite * Pass the correct matching\_metadata to Ceilometer * Don't pass empty action strings to ceilometer * Make sure that AutoScaling group has it's tag set correctly * Imported Translations from Transifex * Default port policy to force replacement * Convert parse error to text type * Support classes for heat integration tests * Add test to serialize and deserialize exceptions * Use six to translate exception message in tests * Commit transaction on object delete * Associate floating IP with router interface * doc: Improve use of the support\_status attribute * Use host information passed while starting service * Updated from global requirements * Hard delete backup stack after successful update * Updated from global requirements * Fixed adopt failure for stack with resource group * Resolve AWS::EC2::Instance AZ output to a value if not specified * Implement CFN CancelUpdateStack action * Switch heat resources & db & tests to oslo.i18n * Switch heat engine to oslo.i18n * Pass list of parameters to engine service to reset * Pass flag to engine service to patch parameters * Updated from global requirements * Fix outdated comment in KeystoneClientV3 * Correct KEY/VALUE names for NOVA\_SCHEDULER\_HINTS * Add Heat REST API action for cancel update stack * Add RPC API for cancel update stack * Enhance SoftwareComponent property validation * Enable SoftwareDeployment for SoftwareComponent * Add OS::Heat::SoftwareComponent resource * Manually update requirements to oslo.messaging * Set the default state of a stack to CREATE\_IN\_PROGRESS * Add heat-keystone-setup-domain to sphinx conf.py * Make str(json\_param) return string vs python * Convert functions into a fixed part of the template * Allow filtering of stacks by username, tenant and owner\_id * Don't delete stack domain project on stack-abandon * Fix AWS::EC2::VPC resource delete failure * Fix file mode, remove executable bit * Log translation hint for Heat.api * Fix so that CSV as str return value * Cleanup trust on delete with stored context if needed * Tests update FakeKeystoneClient to align user\_id and trustor * Implement AWS::EC2::EIPAssociation updatable * Import the stack module directly * Add user data and config drive properties * Imported Translations from Transifex * Use action\_handler\_task for delete\_snapshot * Clarify NotFound error when creating trust * Only delete stack user project from correct domain * fixes stack deletion failure, when vol in deleting * Reuse disable\_rollback on stack update 2014.2.b3 --------- * Log translation hint for Heat.common * warn against sorting requirements * Refactor nested stack create/update/preview * Log translation hint for Heat.tests * Save files while updating a template * Fix a wrong argument name at Heat keystoneclient plugin * Implement BlockDeviceMappings for LaunchConfiguration * Refactor functions in eip.py * Fix delete failed because association creation failed * Modify the way to get 'network\_id' of the port * Add validate function for AWS::EC2::EIPAssociation * Implement OS::Sahara::Cluster resource * Replace marconi by zaqar in heat plugins * Implement AWS::EC2::EIP updatable * Switch heat api to oslo i18n * Import oslo.i18n and port heat bins to use oslo.i18n * correctly implement volumes\_from property * Added PublicDnsName verification in unit tests * Add length constraint to Nova Keypair's name property * Implement OS::Sahara::ClusterTemplate resource * Implement OS::Sahara::NodeGroupTemplate resource * Implement OS::Heat::StructuredDeployments * Implement OS::Heat::SoftwareDeployments * Provide access to outputs from OS::Heat::ResourceGroup * ResourceGroup make do\_prop\_replace class method * ResourceGroup build from list of resource names * Implements stack lifecycle plugpoints * Fix port residue when instance deletion * Implement GroupSet updatable for AWS::EC2::NetworkInterface * Match tenant\_id when name ambiguity in get\_secgroup\_uuids() * Get rid of old-style classes * Fix marconi plugin registration * Allow JSON parameters in environment files * Improve docker resource deletion * Reimplement Volume snapshot with backup * Doc: don't generate empty properties fields * Rename docker directory to heat\_docker * Detect neutron endpoint on-the-fly * Allow resource groups of 0 resources * Error class can accept message with format characters * Add missing "." to help strings * ResourceGroup subclass build resource definition * Common stack\_user\_project\_id across nested stacks * Don't import Properties class directly * Add test for ResourceDefinition equality * Don't stop creates/updates immediately on error * Allow concurrent tasks to complete after error * Scheduler: Allow a grace period when cancelling tasks * Allow an update after a failure * Use ResourceDefinition as 'before' in resource updates * Add a method to freeze a ResourceDefinition * Always replace a failed resource on rollback * Pass properties to Resource.\_needs\_update() * Refactor Resource's decision whether to update * Store properties data in database * Add subnets attribute to OS::Neutron::Port resource * Add networks property to OS::Trove::Instance * AWS SecurityGroup use is\_using\_neutron() * Allow to decide between Nova-network and Neutron * Deny updates to AWS::EC2::VolumeAttachment * Unittests: Refactor Volume resources tests * Check for error messages in volume tests * Improve errors in Volume tasks * Add more info to ResourceUnknownStatus * Split scaling policy into separate files * Cut down on warning logs * Fix failed to delete the EIP resource * boolean parameter type is not recognized in the API * Allow for setting ViP ID * Additional exception type check for ceilo-client * Mark metadata\_update RPC call deprecated * Fix typo * Return full error message for HTTP errors * Move name resolving before get server * Gate-supporting files for functional tests * Edits on template\_guide/functions.rst * Add language attribute to code samples * Change type validate method of template resource * Push metadata changes to the TempURL * Add Server software\_config\_transport POLL\_TEMP\_URL * Allow method verb override in get\_temp\_url * Include project ID in stack abandon data * Fix usage of environment section constants * Implement sahara client plugin * Add "parent" key to list stacks output * Add show\_nested parameter to GET v1/stacks API * Add show\_nested to count\_stacks RPC interface * db API add show\_nested to stack\_count\_all * Add show\_nested to list\_stacks RPC interface * Update stack.load\_all adding show\_nested * db API add show\_nested to stack\_get\_all * SoftwareDeployments move signal reason into resource plugin * Convert CFN waitcondition API to resource\_signal * Fix downgrades in migration scripts 016 and 035 * Fix wrong log level * Providing reference on resource during preview * Moving network\_id\_from\_subnet\_id to neutron client * Using neutron utils function from neutron plugin * Move neutron\_utils functions to neutron client * Use the template module to access the Template class * Avoid name clash between local variable and a module * Use auth\_token from keystonemiddleware * Use empty list in list\_join for validation * Use oslo.config>=1.4.0.0a3 * Imported Translations from Transifex * Remove the unused doc path heat/doc * handle\_signal to handle translated error msgs * Implement snapshot listing * Provide access to outputs from OS::Heat::AutoScalingGroup * Remove resource\_id\_set(None) calls * Resolved server and instance status redundancy * Run migration tests on PostgreSQL and MySQL * Add some stubs speeding up test suite * Add OS::Swift::Signal resource * Add owner\_id to new \_create\_stack RPC interface * rpc client test remove rpcapi logic * engine service add owner\_id to create\_stack * Add utility functions for Swift TempURLs * Fix client exception handling in VolumeExtendTask * Silence urllib3 redundant logging * Make Fn::Join give a better error message * Privilege checking for heat-keystone-setup-domain * Convert AWS Route Table and association to use clients * Implement snapshots for servers and volumes * Enable lazy translation on heat * Return metadata from resource\_signal RPC interface * WaitConditionHandle resources, create events with reason data * Native WaitConditionHandle move to common curl\_cli * Add "backup" column to stack table * Move VolumeAttachment updates to Cinder resource * Using default FnGetRefId behavior for LaunchConfig * Adding validation algorithm for get attr functions * Move CooldownMixin into separate file * Implement barbican client plugin * Move nova\_utils functions to nova client plugin * Implement marconi client plugin * Port rackspace clients to client plugins * Use setuptools to install contrib plugins * Cinder, trove, ceilo use ignore\_not\_found etc * Use Constraint stubs in common.py * Add constraints to check whether image/keypair exists * Remove function get\_software\_config * Fix typos in comments and help strings * Man page for heat-keystone-setup-domain * test\_parser.py remove some spurious Replay/Verify calls * Use new template for resource update reparse * Allow listing of resources from deleted stacks * Refactor calling handle\_\* into a separate task * Display stack owner when formatting stacks * Implement check for Instance resource * Add stack-check action to the API * Check resources are in expected states * Template get\_version breaks with Template object * Add backward compatibility for notification\_driver * Glance, swift use ClientPlugin.ignore\_not\_found * Neutron use ClientPlugin.ignore\_not\_found etc * Nova use ClientPlugin.ignore\_not\_found * Don't validate parameters when loading a stack * Fix dict format in wait\_condition.py docstrings * Fix DBError output in test logs * Newline cleanups in db API * Add APIs to create and manipulate snapshots * Fix for minor typos in stack.py * Appropriate exception for signal handling failure * Implement BlockDeviceMappings for AWS::EC2::Instance * Allow ResourceGroup to select an attribute path * Deny updates to AWS::EC2::Volume resource * Amend docs with \`immutable\` property attribute * Check for property immutability in rsrc update * Add \`immutable\` property attribute * Add config file for performance gate job * Fix monkey-patching occurence in a test * Improve mocking in HeatTestCase * Implement custom constraints for subnet/port/router * Always convert string type params to string * Fix dead link in cfn template doc * Show correct error messages * LaunchConfiguration replace on changed Metadata * replace dict.iteritems() with six.iteritems(dict) * Add controller and action debug message in wsgi.py * Move size update to Cinder volume * Add log output about HTTP calls in cinderclient * Restore resource\_id from backup\_stack * Refactor UpdateReplace exception * Fix signal handling for WSGI servers * Fix rollback failure when updating stack * Client plugin exception handling methods * Correct example syntax and whitespace * Add RPC method to snapshot stacks * Prevent excessive validation for maxPersonality limit * Fixed wait skipped after 1st step of task * Retry resource create until success * Exceptions ResourceInError, ResourceUnknownStatus * Allow Resources to select paths from attributes * Use standard FnGetAtt method for Swift container * Add "index\_var" property to the resource group resource * Parse RST in plug-in class docs * Stop software\_deployments from passing empty keys * Fixed resource errors logged at default log level * Replace str() with six.text\_type() where exception is used * Reusing PARAMETER\_CONSTRAINTS value * Set python hash seed to 0 in tox.ini * Remove rst2script.sed and integration.sh * Allow plugins to specify signal event reason * Update test\_signal to use stub\_keystoneclient * Add native WaitConditionHandle resource * Remove deprecated tools/README instructions * timeutils function retry\_backoff\_delay * Add template version for the provider template * Move the Stack class into stack.py * Refactor handling of exceptions in Resource actions * Remove duplicate opt import in sqlalchemy/api.py 2014.2.b2 --------- * test\_heatclient fix mocking with latest keystone * Add resource properties to stack-preview * Corrected typo * Pass user\_creds\_id into nested stacks * Add query param to allow nested resource list * Fix serialization of InvalidSchemaError * Refactor AWS::EC2::Instance delete handling * Refactor OS::Nova::Server delete handling * Account for status when deleting servers * Don't resolve attributes before create * Move glance\_utils functions to glance client plugin * Move network constraint to neutron plugin * Use config region\_name\_for\_services for rackspace clients * Store clients in context * stack user add \_user\_token * clients make heat\_url public * Use six.add\_metaclass instead of \_\_metaclass\_\_ * Revert "Store clients in context" * Remove tools/glance-jeos-add-from-github.sh * Remove deprecated nova\_create\_flavors.sh script * Store clients in context * Fix updating from an empty stack * Fix updating for OS::Neutron::Port resource * Fix schema-to-template for empty schema * Stop coercing provider res. attributes to strings * Allow user to view outputs of failed stacks * Expose recent docker features in the resource * Implement keystone client plugin * Implement heat client plugin * Implement ceilometer client plugin * Implement trove client plugin * heat\_keystoneclient add get\_user\_token * Remove unused functions from policy enforcer * Policy Enforcer, pass entire context dict * Pass user\_creds\_id when creating backup stack * Refactor service readiness notification * Convert AWS::EC2::Subnet to use attributes Schema * Refactor selecting values from an attribute * Refactor ResourceGroup's FnGetAtt() * Create a new revision of HOT for Juno * Remove redundant method handle\_get\_attributes * Add missing DeprecationWarning category to warning * Implement events pagination, sorting and filtering * Migrate to oslo.db * Add an OS::Heat::WaitCondition resource * Refactor waitcondition resources to allow easier subclassing * Convert WaitConditionHandle to use handle\_signal * Make sure we can create an empty template * Fix early resource property value validation * Fixing a typo * Removed redundant code in stack preview, create * Fix H201 violations and re-enable gating * Allow listing of resources and nested resources * Fix OS::Trove::Instance restore\_point property * Don't overwrite deployments metadata in Server resource * Fix several misspells * Remove unused 'VERSIONS' definition * Fix error count for stack-list while show deleted * Change help text for StructuredConfig.CONFIG property * Implement cinder client plugin * Implement neutron client plugin * Fix typo in HOT template guide * Implement glance client plugin * Implement swift client plugin * Unit tests: Check for lost resource after failed rollback * remove bogus comments re stack\_delete\_after in tests * Fix test for stack delete on same active engine * Adding own child\_template for AutoScalingGroup * Remove unused parameter name in validate\_value * Change Volume metadata attribute to raw dict * Implement nova client plugin * Use stevedore to load client plugins * Revert "Convert WaitConditionHandle to use handle\_signal" * Revert "Update waitcondition API to use signal RPC interface" * Revert "Refactor waitcondition resources to allow easier subclassing" * Add datastore properties to OS::Trove::Instance * Improve OS::Trove::Instance resource * Imported Translations from Transifex * HOT intrinisic function list\_join like Fn::Join * Order intrinsic function docs alphabetically * Base class for client plugins * Refactor waitcondition resources to allow easier subclassing * Update waitcondition API to use signal RPC interface * Convert WaitConditionHandle to use handle\_signal * Updated from global requirements * Move calculating new capacity to a function * Support using domain\_name instead of domain\_id * Makefile option to build xml docs * UnitTests: fix mock assertions usage * Don't expose password in heat-keystone-setup-domain logs * Use None instead of mutables in method params defaults * Implement Flavor Extra-specs Key/Value Pairs * Avoid truncating API Response * Sleep before stopping threads for delete * Catch NotFound for every stack delete db operation * use register\_cli\_opts instead of register\_opts * Fix pass incorrect volume\_size while building bdm * Change template loading to use stevedore extensions * Support loading constraints as stevedore extensions * Make heat.engine.clients a package * Deprecate direct access to clients methods * Use auth\_token\_info to initialize heat\_keystoneclient sessions * Only do property validation in validate() * Fix pagination of stack-list * Pass the context when updating raw\_templates * Guaranteed password complexity using OS::Heat::RandomString * Patch 044 migration to work w/ MySQL 5.6 * Document get\_file get\_param incompatibility * Add a OS::Nova::ServerGroup resource * Re-organise top-level template guide structure * Port to oslo.messaging * Make some properties updatable for Volume resource * Don't rely on setdefault returning a value * Prevent "No handlers could be found..." logging * Sync oslo incubator * Remove unused generate\_request\_id * Fixed the reference to 'Creating Unit Tests' in HACKING.rst * Fix the section name in CONTRIBUTING.rst * Added links to missing integration information * Fix race condition deleting in-progress stack * Account for differences in Rackspace Cloud Glance * Update to latest version of pyrax and add Swift support * Hide deprecate warnings for metadata tests * Revert "Load resources using Resource.load\_all\_from\_stack()" * Remove heat\_keystoneclient roles filtering workaround * Don't set context auth\_token in heat\_keystoneclient * engine.clients always use keystoneclient auth\_token * tests add stub\_keystoneclient to base test class * test\_autoscaling refactor suspend/resume stubbing * Remove test\_autoscaling \_stub\_validate * Convert service.py to use\_stored\_context * parser.Stack add use\_stored\_context option * Hide warning for old style attribute schema test * Add log output of x-openstack-request-id from nova * Use a dict for clients memoization * Stop overriding CONF.default\_log\_levels per binary * Support x-openstack-request-id for Heat * Sync oslo-incubator.middleware module * Sync with oslo incubator * Remove usages of threads in DummyThreadGroup * Update: persist current template on change * Update template incrementally as resources change * Allow raw templates to be updated in the DB * Update: Keep a copy of the old template for rollback * Load resources using Resource.load\_all\_from\_stack() * Refactor resource initialisation from DB * List stacks using Stack.load\_all() * Implement Stack loading from DB as a separate function * Update: Make addition/removal of resources more explicit * RPC API: Really don't include metadata in resource list * Get resource description from ResourceDefinition * Get metadata from ResourceDefinition * Get the resource type from ResourceDefinition * Get deletion policy from ResourceDefinition * Use ResourceDefinition to generate UpdatePolicy * Unit tests: use ResourceDefinition to test facades * Use ResourceDefinition to generate Properties * Unit tests: Name resources the same as in template * Unit tests: always use ResourceDefinition for handle\_update() * Unit tests: Always use ResourceDefinition for updates * Add name attribute to Nova server * Fix String Parameter Receive a unicode * Assume compute service\_type for nova client * Allow passing an existing user\_creds\_id to parser.Stack * Instructions on image creation for SoftwareConfig * Restore resource metadata attribute * parser.Stack add stored\_context * Implement NovaFloatingIpAssociation res updatable * Add parameter type validation before stack-create * Revert "Use auth\_token\_info to initialize heat\_keystoneclient sessions" * Handle missing user\_creds in stack.delete 2014.2.b1 --------- * Use ResourceDefinition when updating Load Balancer * Add AllowedValues constraint to Rackspace::Cloud::LoadBalancer * Respect schema data type in constraint validation * Deprecate old schema definition in dbinstance * Use auth\_token\_info to initialize heat\_keystoneclient sessions * Fix property-parameter mapping for boolean property * Add OS::Glance::Image resource * Patch 033 migration to work w/ MySQL 5.6 * Ensure routing key is specified in the address for a direct producer * ec2token tolerate fully-qualified ec2authtoken auth\_uri * Fix physical\_resource\_name for Nova server * Add auth\_token\_info to request context * Added reference to the Nova Flavor documentation * Add boolean type parameter process for template resource * Implement resize of Cinder volumes * Removed 'message' keyword when raising Error * Use add\_resource() to build autoscaling templates * Allow a resource to be added to a template * Support passing a Template object to StackResource * Handle HOT when converting Outputs to Attributes * Use ResourceDefinition in autoscaling * Unit tests: Create resources with ResourceDefinition * Avoid double-initialisation of Resources * Don't log entire template * Fix spelling in a doc string * Heat and Openstack incomplete documentation * Added field parameter identifying the custom validation * Adding error message for output description * Fix default template for AWS::CloudWatch::Alarm with Ceilometer * Include parameter name in error message * Support of regional endpoinds using Keystone v2 * Fix requirements\_style\_check on BSD platforms * Set rollback status early in update if triggered * Remove translation from loguserdata * Move Engine initialization into service start() * Get the dependency graph directly from functions * Use ResourceDefinition for creating Resources * Add a ResourceDefinition class * Fix exceptions in update\_stack * Use entry points for config generation * Define options for glance client * Add OS:Barbican:Order resource * Add OS:Barbican:Secret resource * Implement caching of resource attributes * Remove optional imports from clients.py * Remove support for nova volumes * Use stack lock context manager in abandon & delete * Implement context manager for stack lock * Check that personality is provided before iterating * all non debug log messages should be translated * doc: generate a valid xml tree * Pass the parent's registry into child stacks * Add Boolean parameter type * Use Emacs-friendly file variable to set file encoding * Remove unnecessary coding line * remove default=None for config options * Deprecating the old style attribute Schema * Implement handle\_update for FloatingIPAssociation resource * Allow functions to calculate dependencies * Unit tests: remove resolve\_runtime\_data() call * Sync version of sphinx from requirements * Replacing variable logger on LOG * test\_engine\_service remove redundant DummyThreadGroups * Use str\_to\_num for Number parameter * Re-enable lazy translation * Migrate to glanceclient to get image id * All resources to use Schema update\_allowed * Remove mention of update\_allowed\_keys * removed deprecated tools * Fixes personality support in Rackspace ASG resource * Only raise UpdateReplace when properties change * Add missing VerifyAll calls to test\_validate * Remove all mostly untranslated PO files * Fix docker volumes binds issue * Order imports in alphabetical order (9/9) * Sync oslo incubator * Restore resource\_id from backup\_stack when delete * Do no re-validate parameters for existing stacks * Use oslo.config for heat-keystone-setup-domain * Revert "Default engine workers to the number of CPUs" * Refactor neutron resources lookup * Add range constraint to AWS volume size * Do not validate constraints in schema constructor * Move API parameter parsing from OpenStack API to engine * Fix broken link to API reference * Using correct attribute of exception * Handle NotFoundException when deleting alarm * Only push metadata when required * Remove update\_allowed\_keys definition and usage * Default engine workers to the number of CPUs * Allow setting the number of heat engine workers * debug level logs should not be translated * Make attributes definition similar on properties * Fix failed to delete the NovaFloatingIPAssociation resource * Fix stack\_resource's handle\_adopt * Using new attribute schema for all resources * Removing default version for templates * Provides ability to reference existing neutron resources * Add a test equivalent to default\_log\_levels * TestRandomString was calling the wrong setUp * Make Server metadata a passive store again * Updated from global requirements * Make a top level contrib doc header * Add glanceclient to heat * Give resource fakes a string ID * Eager-load Stack.raw\_template for Stack.load * Fetch RawTemplate from Stack, not a query * Fetch all db resources in one query * resource\_get\_all\_by\_stack returns a dict * Stop periodic watcher tasks before deleting stack * Update olso modules * Use keypairs.get instead of keypairs.list() * resource-list fails on a failed resourcegroup stack * Revert "Support ... x-forwarded-for header" * Update common docstrings to match guidelines * Ignore nova limits set to '-1' * SoftwareDeployments tolerate string zero status code * Don't use SSH in Rackspace::Cloud::Server * Make Server CONFIG\_DRIVE property a boolean * Add ISO 8601 date constraint * Include exception in custom constraints errors * Add database model to store snapshots * Refactor DB resource fetching from Resource to Stack * Do not query database for every metadata\_get * Use resource methods for metadata get/set * Do not initialise stack\_user password * Clean up openstack-common.conf * Deprecate Stack.resolve\_runtime\_data() * Pass unresolved template to Resource.update() * Unit tests: tidy up resolve\_runtime\_data() calls * Autoscaling: compare fully-resolved templates * Add a Nova Flavor resource * Use the new oslotest library * API changes for param to show soft-deleted stacks * Rolling updates for OS::Heat::AutoScalingGroup * Engine changes for API param to show soft-deleted stacks * Shut the heat-engine after all threads finished * Don't dynamically create provider types in the global env * Skip tests when loading plugins * Refactor boolean conversion into a separate function * tests remove stack\_delete\_after decorator * Deprecate first\_address attribute of Server * Using attribute schema for building documentation * Truncate status\_reason to column length * unit tests: Don't mess with template retrospectively * unit tests: Check validation in VPC test * Don't wrap HeatExceptions during validation * unit tests: Test dependency resolution using validate() * Raise InvalidTemplateReference for missing resources * Synced jsonutils from oslo-incubator * Fixes stack rollback failure with AWS::EC2::Instance * Restores Nova API for volume attach and detach * Allow empty sections in the yaml templates * Support proxying Heat API by using x-forwarded-for header * tests remove wr\_delete\_after decorator * tests make dummy db setup/reset consistent * Prefetch data in resource\_get\_by\_name\_and\_stack * Port all resources to new resource data methods * An IO optimised method for accessing resource data * Distribute create\_heat\_domain * Fix all flake8 problems * Order and separate imports properly * Make events return by insertion order * Fix many typos * Update openstack-common in prep for graceful stop * Remove unused logger * Fix validate failed with an image\_name in uuid format * Don't manipulate template during abandon * Don't manipulate LoadBalancer template in-place * Change volume size property type to integer * Document the availability of OS::stack\_name and OS::stack\_id * Adding attribute schema class for attributes * Imported Translations from Transifex * Catch NotFound for keystone delete operations * Optional data for resource\_data\_get\_all * Add a log info message in Stack state\_set * Make Docker property schema similar with others * Don't pass enable\_snat by default in Router * Move API parameter parsing from engine to API * Fix wrongly printed count of received handled conditions * Avoid redundant polling of DB for metadata * Support multiple heatclient versions for SD * Make template validation uniform * Push COMPLETE status change at the end of update * Check that all po/pot files are valid * Allow DesiredCapacity to be zero * Implement locking in abandon stack * Add hint on creating new user for Heat in DevStack * Fix inaccurate error\_msg for InvalidTemplateVersion * Move some template validation to Template class * Use cinder API for volume attach and detach * Don't ignore event creation errors * Do not use suppport message if it's None * Enable lazy translation in unit tests * Sync oslo incubator * Replace str with six.text\_type in tests * Tidy up urlfetch.py exception handling * Avoid referencing Message.\_\_str\_\_ in exceptions * Replace str with six.text\_type * Sync latest oslo.db code * Don't disguise CFN API exceptions * Refactor to separate serializers from wsgi controller * Add missing test coverage for XMLResponseSerializer * Validate user\_data\_format for server with deployment * More specific exceptions when validating params * Add documentation for creating a resource plug-in * Allow NotFound to be created without args * Allow filtering of stacks by action * Fix delete event error in postgres * Remove testscenarios load\_tests * Remove unused variable for UpdateReplace exception * Cherry pick oslo-incubator db fixes * Fix missed whitespace in attribute description * Sort requirement files in alphabetical order * Expounded on global environments * Update status section to indicate HOT is supported * Update contrib docstrings to match guidelines * Updated from global requirements * Add link to a resource's nested stack * Cherry pick oslo rpc HA fixes * Order imports in alphabetical order (5/9) * Add save\_admin\_pass property to CloudServer * Add admin\_pass as attribute to CloudServer * Ensure outputs are resolved for adopted stacks * Catch exception during resolving outputs * Add handle\_update to VolumeAttachment * Refined schema for VPCZoneIdentifier * Allow for stack users in \_authorize\_stack\_user * Fix timeout for stack actions * Fix status reason in events for deployment signals * Allow complex scheduler hints for AWS Instance * Correct update to zero numbers of health monitors * Remove use of py3kcompat * Updated from global requirements * Using default value during update * Fix incorrect logic during updating in unittest * Validation functions for resources and outputs * Pass and use the environment in validate\_template * Initial validation of functions * Disable check\_uptodate.sh check in pep8 * Add a resource\_facade intrinsic function to HOT * Resolve data from Resource Facade * Add a default DeletionPolicy for Fn::ResourceFacade * Check top-level sections when parsing a template 2014.1.rc1 ---------- * Open Juno development * Credentials for native heat os-collect-config polling * Properly delete OS::Nova::FloatingIPAssociation * Run pep8 check in run\_tests.sh as in tox * version migration fails if version is an integer * Remove unused code in test\_validate.py * Fix Jenkins translation jobs * Fix incorrect error msg in validate\_template() * Don't log exception for None timeout\_mins * Always answer empty list if deployments not ready * Imported Translations from Transifex * Validate that resource type is a string * OS::Nova::Server depend on subnets related to nets * Migrate invalid template version values * Fail if non-existent security group referenced * Order imports in alphabetical order (8/9) * Fix using attributes in unittest * Update heat.conf.sample * Ensure parameter timeout\_mins available in update * Raise and catch a specific error during validation * Make sure NetworkInterfaces and SubnetId updatable * Make OS::Nova::Server networks property updatable * Don't catch all exceptions in image constraint * Revert "Add validation to KeyPair resource" * Don't create cloud-init user unless specified * Add docker network\_gateway attribute * Change router's prop name agent\_id to l3\_agent\_id * Add subnets as a dependency for router * heat is enabled by default in devstack now * Properly encode heat.common.exception in rpc * Error and NotFound inherit HeatException class * Store stack domain credentials for deployments * Document software config classes * Display container ip not gateway IP * Fix creating docker containers * Fix stack-show failed with a name in uuid format * Reimplement DHCPAgent as net's property * Provide the necessary inputs to enable HEAT\_SIGNAL * Implement an identifier stack\_path() * Fix heading markup in hot\_spec.rst * Using resolving properties for update * Stack identity reads tenant from stack not context * Don't re-bind parameters during stack update * Fix user provider template registration * Add documentation to the firewall properties * Catch NotFound exception on user delete\_key * Never specify project\_name in keystone v3 auth * Order imports in alphabetical order (7/9) * Insertion port id in address attribute of server * Propagate files in nested stacks * Get rid of global variable in JSON->YAML conversion * Remove auth\_token condition in clients * Fix typo in HOT spec * Tolerate None outputs on deployment handle\_signal * Add name property to StructuredDeployment * policy.json allow all users to do stacks:lookup * Include environment resource in documentation * Generate local TemplateResource class * Use six.move.xrange to replace xrange * Refactor CLB to work with groups * Add events for automation statuses to Cloud Server * Fix update of Pool's list of HealthMonitors * remove attributes from OS::Heat::AutoScalingGroup * Replacing NetworkGateway when devices updated * Order imports in alphabetical order (4/9) * Reimplement L3Agent as router's property * Move load\_user\_creds out of StackWatch * KeyError generated when using a provider template * Devstack getting started, update IMAGE\_URLS * Default properties to the empty dict in ResourceGroup * Add space to description of stack\_domain\_admin * Fix HOT inconsistencies in resource sections * Use stack ID to create domain project name * Modify assert statement when comparing with None * Refactor Template.parse() * Removing unnecessary required=True options * Allow update of disable\_rollback * Improve compatibility between Keystone V2 and V3 * Order imports in alphabetical order (6/9) * Order imports in alphabetical order (1/9) * Return template based class in list resource types * Remove unused versions define in template\_format.py * Account for stack\_user\_project\_id in stack\_get\_by\_name * Resource type implementations for structured software config * Resource type implementation for software deployment * Remove signal\_id from deployments API and model * Server property for software config transport * OS::Nova::Server support for software config * Fix InternalException raised on stack-show * Delete user\_creds on stack delete * Add more unit tests for ThreadGroupManager * Fix start\_with\_acquired\_lock - pass kwargs to func * Fix some help strings in common/wsgi.py * migrate User/AccessKey resources to StackUser base class * StackUser add \_delete\_keypair function * Refactor stack watching into a separate class * Remove decorators for exceptions * Handle 503 response from Nova API * Retry logic for SSH connection in Cloud Server resource * Ensure that the NoCloud data source is loaded, part 2 * Provide attribute schema for waitcondition resource * Fix AccessPolicy update with added resources * Make template formats pluggable * Add an InvalidTemplateVersion exception * Move HOT template code to its own module * Add user\_creds\_delete to the DB API * fix DB API user\_creds\_get for non-existent ID * Make user\_creds\_id a parser.Stack attribute * Fix HOT set\_stack\_id * heat\_keystoneclient don't pass project and trust\_id * Fix resolving for Ref function * Add state check when suspend or resume stack * Revert "Showing member list for nested resources" * Allows vip from a different subnet for lbaas resource * Add test for StackUser.\_create\_keypair * StackUser add suspend/resume support * heat\_keystoneclient add delete\_stack\_domain\_user\_keypair * heat\_keystoneclient add legacy fallback path * Fixup uuid stubbing in test\_stack\_user.py * Move HOT parameters code to a separate module * Load functions from plugins * Use PluginManager to load resources * Add tools/create\_heat\_domain helper script * Allow handle\_signal to assert which actions are valid * Allow getting attributes on suspended resources * Nova server to ref cloud-config resources in user\_data * Return None when get\_attr cannot resolve a value * Allow proper instance with volume suspension * Add IP address to error message of failed stack * Make the first line of every file consistent * Native ScalingPolicy resource * Remove vim header from files * replace dict comprehension with dict constructor * Implement OS::Neutron::ExtraRoute as /contrib * Always report the action in state\_reason as engine encodes it * Convert empty filter dictionary to None * Allow Server name property to be updated * Docs: use the plugin manager to list resources * Move the code that reads the global environment * Add a plugin\_manager module * Calculate template version only once * Give cfn a separate Template class * Move HOT version checking to HOTemplate class * Handle API limit exception in nova\_utils.refresh\_server * Make server resources use nova\_utils.refresh\_server() * migrate StackUser base class to stack domain users * engine: allow stack\_user\_project users to retrieve stack * Add config options to specify stack domain admin * Modify stack\_user\_domain config option to take domain ID * Nova keypair validation breaks client plugins * Add Keystone V2 plugin * Make Keystone client pluggable * Add host\_routes property to Neutron subnet resource * Adds Parameter Label to template validate call * Generate docs for contrib plugins * Restructure contrib/ directories * Set statuscode=404 in NotFoundException in tests * Add a validation step to parameters schema * Add admin\_pass as a property * Update Oslo wiki link in README * Remove unused variable * I18N support for log message and attributes schema * Change software\_config storage of config and io columns * Ensure that the NoCloud data source is loaded * Don't install cloud-init on Rackspace images * Document schema properties for Neutron subnet resource * Document schema properties for Neutron router resources * Add project to unscoped stack list response * Unscoped List Stacks * Alter stack\_count\_all\_by\_tenant to stack\_count\_all * Fix stack\_get\_all call on stack watcher * Change Resource timestamps to save correct info * Change Stack timestamps to save correct info * SignalResponder move signed URL deleting to its own method * REST deployment metadata method * RPC method to fetch deployments metadata * Fix typo and remove unused code in nova\_utils.py * Raise NotFound in software\_config\_get/software\_deployment\_get * Docs: use pydoc to read docstrings * Convert AccessKey resource to attributes\_schema * Remove redundant FnGetAtt from User resource * Order imports in alphabetical order (3/9) * Check that 'heat\_template\_version' is a HOT version * Add validation of nested property schema * Replace '+' with string interpolation operation * Remove unused output section from test template * I18N support for error message * Tidy up rpc\_client definitions * Updated from global requirements * Adding "device\_owner" property for Port resource * Replace hard code in software\_deployment REST api * Doc generation display message for deprecated resources * Use property support\_status in documentation generation * Use support\_status for existing deprecated properties * Remove redundant default value None for dict.get * add OS::Heat::AutoScalingGroup * Fix test for cloud loadbalancer * Add Docker resources to docs * Change Docker resource mapping name * Fix resource mapping for Docker * Changed Openstack into OpenStack in contrib.rst * Move X-Auth-Url logic to auth\_url middleware * Add flavor constraint * Rackspace Cloud Networks resource * Fix resource mapping for Rackspace * Add support\_status attribute to properties schema * Refactor SupportStatus into its own module * Add ability to create provider networks (vlan,flat) * Move refresh\_server() to nova\_utils * Add systemd notification support to heat * Order imports in alphabetical order (2/9) * Parse stack\_adopt\_data * Environment template guide enhancement * Implement glance image constraint * Add neutron network constraint * Remove Fn::FindInMap from HOT * Move built-in functions to separate modules * Disallow Heat-only functions in CloudFormation templates * Provide access to the template version * Move HOT to a separate subpackage * Replace function resolution with lazy evaluation * unit tests: Refactor to accomodate lazy evaluation * unit tests: Fix types in Fn::ResourceFacade tests * Fix test\_association\_eip unit test * unit tests: Always resolve static functions * Evaluate lazy functions in autoscaling launch config * Server secgroups and network/port together invalid * Replace stack\_get\_all\_by\_tenant with stack\_get\_all * Revert "Merge "Re-enable lazy translation"" * Add Heat API reference to developer docs * Implements resource type NetworkGateway * run\_tests.sh default doc omits pep8 * Add preview for LoadBalancer * Add preview for TemplateResource * Add preview for InstanceGroup * Add preview for ResourceGroup * Add preview for NestedStack * Add StackResource specific preview behavior * de-hardcode adjustment type strings in autoscaling * Replace hardcoded schema strings in autoscaling.py * REST API for software deployment * Calculate dependencies based on unresolved template * Re-resolve functions during stack update * Refactor re-resolving of templates * Add a base class for pluggable functions * Prevent user introspection of Python objects * Remove spurious tracebacks from tests, part 2 * Add API support for stack preview * Add engine preview stack with Template and Params * Refactor resource loading functions * Revert config mocking to cfg.CONF.set\_override * Remove empty unit test directory * Don't disable SELinux in cloud-init's boothook.sh * Enable usage of custom constraint in parameters * Use six.moves cStringIO instead of cStringIO * Re-enable lazy translation * Fix incompatibilities in tests with keystoneclient 0.6 * Native Nova Server compatibility for Cloud Server * RandomString use the random string as the resource\_id * Display max\_template\_size when a template is too large * Switch over to oslosphinx * Fix usage of resource\_data\_get\_all in stack-abandon * Add validation to KeyPair resource * Rename Openstack to OpenStack * Improve help strings * Add a nova keypair constraint * Use integer when appropriate in autoscaling schema * Fix errors in hot\_spec doc * Refactor SignalResponder to abstract user logic * heat\_keystoneclient add support to enable/disable domain users * Remove spurious tracebacks from tests * Don't try to stop a stack on a dead engine * Restructure Marconi plugin directory structure * Separate the Marconi client from the resource * Add a requirements file for contrib/rackspace/ * Implement custom constraints * Remove TODO comments in create\_resource * REST API for software config * Verify that parsed environment file maps to a dict * Fix misspellings in heat * Add Rackspace resources summary to docs * Delete rackspace database resource * Provide region\_name to trove-client * heat\_keystoneclient add create\_stack\_domain\_user\_keypair * heat\_keystoneclient add delete\_stack\_domain\_user function * heat\_keystoneclient add create\_stack\_domain\_user function * heat\_keystoneclient raise error if stack user role missing * Add parser.Stack support for stack\_domain\_projects * Change access to ceilometerclient * Imported Translations from Transifex * Add personality files property to Server resource * HOT templates get\_param allows extra attributes * Make Server compatible with Nova Key Pair resource * Retrieve user\_id from HTTP Headers to populate Context * Rename docker\_plugin to docker * Rename Marconi plugin package * Don't raise MySQL 2013 'Lost connection' errors * Adding option in config to specify region name * Add unit tests for heat.scaling.template * Fix default raw\_template files value in migration * Move resource\_templates to heat.scaling * Refactor \_create\_template to not rely on instances * Do not log error on software config/deployment NotFound * Handle API 500 response in OS::Nova::Server * Handle API limit exception in OS::Trove::Instance * Adds Parameter Label to HOT spec and parameter schema * Implement HOT intrinsic function get\_file * Rename rackspace.rst to contrib.rst * Reorganize docker-plugin for consistency * Restructure Rackspace resources * Delete fixed\_ips if it's empty list * Create heat database with default character set utf-8 * Allow an in-progress stack to be deleted * Ensure stack lock is released after stack-delete * Updates template\_validate call to validate parameter\_groups * Fix indentation errors found by Pep8 1.4.6+ * heat\_keystoneclient add support for stack domain projects * New Event uuid column and autoincremental id * tests remove test\_heatclient unnecessary mock * RPC service for software config/deployment * A cloud-config resource based on SoftwareConfig * A multipart cloud-init resource based on SoftwareConfig * Resource type for software configuration * Verify setenforce is executable * Implement native signal API * Updated from global requirements * Update heat.conf.sample for python-keystoneclient 0.5.0 * test\_signal add missing VerifyAll calls * Translate constraint description in validation * Raise the default max header to accommodate large tokens * Store files in the raw\_template table * heat\_keystoneclient: abstract admin\_client to a property * heat\_keystoneclient: Move v3 path logic to constructor * heat\_keystoneclient ensure admin client respects SSL options * Make context available during constraint validation * Imported Translations from Transifex * Map the NotFound exception to HTTPNotFound * Only update\_and\_save if the stack exists * serialize non-string nova metadata * Prevent access Parameters key in template dict * Native Pseudo Parameters * Use a HeatIdentifier instance to create Parameters * HOT templates get\_attr allows extra attributes * Fix event\_type names for stack CRUD notifications * Purge remaining heat\_keystoneclient v2 code * Fix user and signal responder exception import * heat\_keystoneclient convert delete\_ec2\_keypair to v3 API * heat\_keystoneclient convert get\_ec2\_keypair to v3 API * API tolerate None environment string * Fix AWS::StackId pseudo-parameter during stack update * Ensure some properties update\_allowed on port res * Don't run pep8 tests with -P * Enabled source code coverage for contrib directory * Fix handle\_create of NetDHCPAgent for updating * raw\_template hot parameter type data migration * stub cfg.CONF in heat\_keystoneclient * Add autoscaling notifications * Refactor Parameters Schema based on common Schema * Move param format for template-validate to API * fix some flaws in heat documents * Add qpid-python to requirements * Marconi message queue resource implementation * Fixes template not using the JSON or YAML format * Add heat.sqlite in git ignore list * Updated from global requirements * Global environment ignores files starting with dot * Refactor software config db model to use LongText * Added testr-args option support for tox coverage * Fixed OS::Neutron::Pool creation * Showing member list for nested resources * Update oslo db * Update olso gettextutils * Update base oslo modules * Fix order of arguments in assertEqual (patch 1/2) * "version" section should be required in template * Assign X-Auth-Url header in a separate middleware * Store credential ID for AccessKey and SignalResponder * heat\_keystoneclient migrate create\_ec2\_keypair to v3 API * Don't delete trust on backup stack delete * Make LB-updating in rolling update more reliable * Don't pass empty security groups in port creation * add the validation of MaxSize ,MinSize and DesiredCapacity 2014.1.b2 --------- * Implement adopt-stack for nested stacks * Implement adopt-stack * Always specify preserve\_ephemeral on server rebuild * Document Heat terms in glossary.rst * Fix error in RS Auto Scale properties schema * Fix adding heat\_stack\_user role via v3 API * Refactor heat gate testing contrib support * Ignore tox -e cover generated files * Database model for software config/deployment * Add a new ThreadGroupManager class * Make endpoint\_type configurable * Fix OS::Neutron::Pool validation * Fix order of arguments in assertEqual (patch 2/2) * Remove dependencies on pep8, pyflakes and flake8 * Fix syntax error in docs * Allow choice in how SignalResponder user id is stored * Fix incorrect resource types in docs/comment/code * new method 'HeatTestCase.patchobject' * heat\_keystoneclient migrate auth\_token/service\_catalog to v3 API * Convert heat\_keystoneclient user enable/disable logic to v3 API * Convert heat\_keystoneclient user-delete logic to v3 API * Convert heat\_keystoneclient user-create logic to v3 API * Turn block\_device\_mapping.volume\_size to int * Refactor MySQL long text support * Add a new "UpdateWaitConditionHandle" resource * Enable better sub-classing of common Schema class * Adding Range constraint for SIZE property * Fix ceilometer alarm properties schema * Remove heat-cli-guide * Use oslo crypto * Use region for cinder management uri * New middleware to handle SSL termination proxies * Add \_() to rackspace resource strings * Added heat url in config for heat standalone mode * Let Integer property convert strings to numbers * Add stack id and resource id in logs * Update heat.conf.sample * Fix comparison with singletons * Fix asserttion of types * Fix showing events on swift * update pom.xml files with clouddocs-maven-plugin version 1.12.2 * Don't query for resource during stack creation * Using \_handle\_not\_found\_exception in resources * Implement neutron metering resources * Remove superfluous tag schema from Volume * Include a format version in generated templates * Generate provider templates with Boolean params correctly * Correct use of Fn::Split in generated provider templates * Convert Server to new Schema format * Use the new Schema class for template generation * Close SSH connections in Cloud Servers resource * Add filter and pagination to stack\_get\_all * Fix heat-keystone-setup error when try to create heat user * Implements Nova FloatingIP resources * Add way to group exceptions in DependencyTaskGroup * Fix unused variables 2/2: enable unused var check * Fix unused variables 1/2: add more asserts * heat\_keystoneclient revise get\_ec2\_keypair * Store AccessKey secret\_key in resource data * Update Loadbalancer default template to F20 image * Tolerate deleted trust on stack delete * Fixes duplicate calling add\_constructor() * Service authorize stack user from provided stack * Add contrib to py26 and py27 gates * Fix more regressions in contrib * Avoid error on double-delete of nested stack * Enable parallel while deleting neutron resources * Add ability to configure Heat and Trove client options * Remove override of "patch" function * remove obsolete comment from rackspace clients.py * Fix schema format in template generation unit tests * Validate number of instance metadata entries * Introduce a way to trace a resource's implementation * Add policy enforcement to ReST API * Replace try...except...pass block with assertRaises * Add documentation for multi-engine * Make LoadBalancer nested stack template configurable * Improve tools/uninstall-heat * Refactor Instance#\_check\_active * Add migration method to test sqldump files * Test db migration 31 * I18N support for InvalidContentType exception * Fixes typo of explanation on exception.py * Fix get\_column\_num problem in heat-keystone-setup * Use oslo db.migration script * update rackspace clients.py * log warning, when $SERVICE\_HOST is localhost * Remove usage of mox class * Sort the output of config/generator.py by group name * "mountpoint" should not be required parameter * Deleted TEMPDIR on exit * Update log message for scale out/in * Remove redundant word from OS::Nova::Server * Enhance message for watch rule * Fix regression in Rackspace Cloud Servers tests * Add test for AutoScalingGroup resize and metadata * Imported Translations from Transifex * Rename scaleout\_apis.rst -> scale\_deployment.rst * Use WithScenarios base class instead of load\_tests * Filter resource types by support status * Do not use python built-ins as variable names * Add test coverage for SignalResponder delete * Fix SignalResponder signature response when deleted * Fix a typo in the README for docs * Empty files shouldn't contain copyright nor license * Imported Translations from Transifex * Don't provide default values to properties.get() * Added session\_persistence property to VIP * Updated from global requirements * Add new Ceilometer combination alarm resource * Imported Translations from Transifex * Change loglevel for certain failures * Let users specify metadatas on swift accounts * Do not override cloud-init cloud\_config\_modules * Fix misused assertTrue in unit tests * Add migration test framework * Remove unnecessary setUp call * add assertion to heat-keystone-setup script * Simplify update\_with\_template() method * Fix copy/paste errors in API docstrings * Convert Neutron resources to new Schema format * wsgi.Resource exception handling to not log errors * SignalResponder store access/secret in resource data * SignalResponder, set resource\_id in the correct place * Add sanity check to ensure user\_id can be trusted * Correct create\_trust\_context docstring * Fix comparison with singletons * Add an external gateway property to neutron router * rackspace: Convert resources to new Schema format * Prevent tempest from failing upon ActionInProgress * Add nested resource references to resource group * Add support for rebuild --preserve-ephemeral * Don't pass swift headers as None * Convert AWS network resources to new Schema format * Use property name constants in CinderVolume * Convert [Cinder]VolumeAttachment to new Schema format * Add a schema for the AWS::EC2::Instance Volumes property * Convert Instance to new Schema format * rackspace: Convert CloudLoadBalancer to new Schema format * rackspace: Convert Scaling resources to new Schema format * EventService exception handling to not log errors * WaitCondition Count property is now updatable * Use property name constants in Ceilometer alarm * Remove useless validate methods * Add support for multiple encryption methods * Imported Translations from Transifex * oslo: add the crypto module * Improve autoscaling error message * Convert numeric values in instance metadata to strings * Add oslo mock fixture * Fix misused assertTrue in unit tests * Fix stack\_get\_by\_name does not list nested stack issue * pep8 fix: assertEquals -> assertEqual * Change assertTrue(A in B) to assertIn(A, B) * Adds parameter\_groups to HOT specification * Convert OSDBInstance to new Schema format * Convert resources to new Schema format * Convert Swift resources to new Schema format * Convert User resources to new Schema format * Convert Autoscaling resources to new Schema format * Convert Ceilometer Alarms to new Schema format * tests: Don't access properties\_schema directly * Convert [Cinder]Volume to new Schema format * Enables db2 server disconnects to be handled pessimistically * Add OS::Neutron::RouterL3Agent for router.py * Deny API requests where context doesn't match path * Add validation for an existence of a resource type * Fix missing policy enforcement in CFN API * Add support for network name for os::nova::Server * Make the mountpoint property description clearer * Don't replace (and log) the same resource entry * Remove unused variable badkeys * Sync global requirements to pin sphinx to sphinx>=1.1.2,<1.2 * oslo: update the remainder of the modules * oslo: add the test module needed by test\_migrations * Utilize stack-lock for multi-engine support * Implement engine listener service for multi-engine support * Implement stack-locking for multi-engine support * heat-manage man page not generated in doc build * Allow docker plugin to run w/o deps * Sync oslo threadgroup.py to fix wait & stop methods * Database changes for multi-engine support * Document Port properties * Imported Translations from Transifex * Add OS::Neutron::NetDHCPAgent for neutron/net.py * Remove unused dumps validation in JsonParam value * Remove oslo uuidutils.generate\_uuid from heat code * Sync oslo rpc * Update tox.ini to use new features * Replace try...except block with assertRaises * Add load balancer PoolMember resource * Allow intrinsic functions to be called in any order * Instance call build\_userdata directly * Make build\_userdata user\_data\_format aware * Account for truncated resource names in test PhysName * Fix regression in cloud server tests * Clean up useless ex variable * Imported Translations from Transifex * Set the rpc control\_exchange "again" * oslo: update the rpc module * oslo: update config generator * Use the new oslo py3kcompat.urlutils * oslo: add py3compat * oslo: delete rpc/securemessage.py * contrib: Add Docker Container plugin * Properly reconnect subscribing clients when QPID broker restarts * Call cfn-create-aws-symlinks in boothook.sh * Add REST endpoint for abandon-stack * heat engine changes for abandon-stack * Change ID column of Event table to UUID * Fix error in Trove Instance schema definition * Fix stack-show on a TemplateResource with outputs * Handle TemplateResouces with the wrong template extension * Pass the files correctly though the update mechanism * Add SupportStatus class for resources 2014.1.b1 --------- * tests: use server.test not example.com * Add collection count to stack list * Property methods for resource metadata * Openstack Trove (DBaaS) resource * Fix bad resource schema for Volume * Add attributes schema to OS::Neutron::FloatingIP * Restrict sort\_keys for stack lists * Return map parsed value at JsonParam.value * Make db API respect context show\_deleted * Bump to sqlalchemy-migrate 0.8.2 * Add heatclient to available clients * Provide access to Trove client * run\_test.sh -V --unit doesn't run using virtualenv * Factor Schema out of properties.py for re-use * Sync DB2 error code handling from oslo * Add a .coveragerc to exclude tests and oslo * Remove unused fake test code * Remove duplicate test scenario * Remove property decorator in TemplateResource * Migrate away from rackspace\_resource * Fix show\_deleted errors in RequestContext * Remove owner\_is\_tenant from RequestContext * Remove misleading docstrings in ContextMiddleware * Derive context is\_admin from policy * Fn::Replace support for type Number * VersionNegotiation - 404 if no version is provided * Make engine service docstrings conform to Sphinx * Imported Translations from Transifex * Add check\_is\_admin to common.policy.Enforcer * Ensure that members is a list * Catch error deleting trust on stack delete * Fix not correct AWS::StackId value * Avoid eventlet-unsafe exception handling * Let resources decide when to update * Remove external AWS links and add doc if needed * Add API endpoint to query build information * Implement PrivateIpAddress attribute * Sync openstack.common.local from oslo * Use all available headroom for autoscaling * Use ScaledResource as type for InstanceGroup members * test\_common\_policy cleanups * Clean up "target" interface to policy * Remove param explode\_nested from doc * Add coverage for trusts parser.Stack delete path * Add test for OS::Heat::HARestarter * Improve coverage of storing credentials in parser.Stack * Fix BaseException.message DeprecationWarning * Adds ability to configure various clients used by the Heat * Define deletion policy constants * Add filter support to stack API * FaultWrapper error mapping supports parent classes * Add exact filter support to SQL API list stacks * Add a missing mock to rackspace cloud server test * Added support for Allow-Address-Pairs feature * Fix i18N compliance with non-existant keypair * Fix the middleware MIME type * Fixes bullet list without blank line issue * Doc usage enhancement * Make heat depend on python-heatclient * Remove Component class * Fix some docs errors/warnings * Add a guide to setup standalone mode * Fixes Error when contain Non-ascii in template * Add \_() to fix i18N compliance (part 2) * Make instance Tags updatable * Allow nova metadata to be updated * Get pool members from DB API * Add \_() to fix i18N compliance (part 1) * Implement a Heat-native resource group * Add links section to the stacks index response * Add support for limiting and sorting stacks * Don't use the last server fake, but the one we want * Ensure autoscaling actions occur for percentage adjustment * Update install.sh to reflect recent oslo.db format * Remove unused db/sqlalchemy/manage.py * Revert "Implement stack-locking for multi-engine support" * Implement Tags for S3 bucket * Add property doc strings for S3 bucket * Fix some direct imports from sqlalchemy * Move resource doc generation to doc/source/ext * Fix server update attribute test * Shorten physical resource name to custom limit * Managed Cloud compatibility for Cloud Servers * Refresh Cloud Server data for RackConnect check * Use get\_secgroup\_uuids in Instance * Rewrite get\_secgroup\_uuids to avoid resource\_by\_refid * Implement stack-locking for multi-engine support * Imported Translations from Transifex * Rename exception NoUniqueImageFound * Implement update for neutron port resources * Implement update for neutron router resources * Using a number in str\_replace causes an exception * Refactor tests to use mock * Fix "members" property check * Imported Translations from Transifex * Add property documentation for the waitcondition * Set the waitcondition maxvalue to 12 hours as AWS specifies * Implement update for neutron subnet resources * Implement OS::Neutron::SecurityGroup * Implement update for neutron network resources * Imported Translations from Transifex * Create a guide for scaling out Heat API's * RackConnect compatibility for Cloud Servers * Check that the epel repo exists before adding it * Add a man page for heat-manage * Imported Translations from Transifex * Send usage notifications on major stack events * Rename admin flag on SqlAlchemy#stack\_get * Make check\_uptodate compatible with BSD shells * Add Rackspace Cloud DNS Resource * Resources for Rackspace Auto Scale * Implement volume tags as metadata * Imported Translations from Transifex * Ensure apt-get installs do not prompt user input * Add a link method to Thread * Make Fn::Select accept an integer selector again * Stop irratating pep8 error in test\_clouddatabase.py * Assert that all function exceptions have the function name * Only log to console in heat-db-setup * Move all possible function tests into scenarios * Change heat-api.org to openstack.org * Add doc support for update\_allowed * Instance delete should check for 'DELETED' status * Imported Translations from Transifex * use exception str() not .message * change neutron to use UpdateAllowed property schema * change alarms to use UpdateAllowed property schema * change contrib/ to use UpdateAllowed property schema * change base resources to use UpdateAllowed property schema * Support defining update\_allowed in the property\_schema * Fix nested stack test setUp ordering * Delete deprecated docs/ directory * Tolerate lookup failures in Fn::Select * use msg\_fmt not message in Exceptions * Stub out unmocked keystone in test\_engine\_service * Stub out unmocked keystone auth in signal tests * Reverse assert arguments so the errors make sense * Updated from global requirements * Prove that a user can't remove global resources * Use resource\_id\_set to clear resource ID's * Fix sqlalchemy migrations * Fix sqlalchemy models * change assertEquals to assertEqual * Imported Translations from Transifex * Allow user\_data to be passed without modification * Add rebuild to OS::Nova::Server * Refactor Nova server resizing to be self contained * Repeat Ceilometer alarm actions by default * Allow plugins to be specified as a cloud\_backend * Updated from global requirements * Imported Translations from Transifex * Document route table properties * RS LoadBalancer should return its ID as Ref * Document subnet properties * Document vpc properties * End doc sentences in a consistent way * Document security group properties * Document network interface properties * Add support to disable resources * Move db\_sync into the sqlalchemy DB api * Correct misleading template guide Ref example * Add granularity option to purge\_deleted * Imported Translations from Transifex * Updated from global requirements * Add a test for TimeoutInMinutes accepting a str int * Catch all yaml exceptions * Make the template and env yaml parsing more consistent * Updated from global requirements * Fix incorrect indentations found by Pep 1.4.6+ * Prevent urlfetch from returning encoded chars * Use "python -m coverage" instead of coverage cli * Stop using openstack.common.exception * Update openstack.common.db * Imported Translations from Transifex * Convert str passed as Numbers/Integer to numbers * Wrap engine exceptions in \_() * Wrap common exceptions in \_() * Wrap api exceptions in \_() * Allow RS LoadBalancer resource to have no nodes * Updated from global requirements * Add requests library to requirements.txt * Provide more tests for DB APIs * Make Autoscaling update policy tests faster * Remove spurious traceback in test * Remove a buggy method in sqlalchemy.api * Imported Translations from Transifex * Updates OpenStack Style Commandments link * Imported Translations from Transifex * Don't allow updates when another action is in-progress * Do not attempt a stack update when it is suspended * Implement native Nova keypair resource * Allow flavor and image names in CS resource * Ignore H803 from Hacking * Enable exception format checking when testing * Validate template parameter attributes * Fix regression in DBaaS tests * Revert "Don't install EPEL rpm on CentOS 6.4" * Imported Translations from Transifex * Allow DependsOn to accept a list * Add property port\_id to RouterInterface * Add log\_handler to implement the publish\_errors config option * Add keystone\_authtoken section into the heat.conf.sample * Pass errors from \*\_format.parse() to the caller * Imported Translations from Transifex * Raise error if instances are created with names > 63 chars * Fix heat deletion failed if floating ip is not found * Imported Translations from Transifex * Allow overriding the instance\_user per server * Return Integer or Float casted value in NumberParam * Move check\_uptodate.sh into config/ and delete tools/conf * Start using tools/config instead of tools/conf * update the config generator from oslo * Updated from global requirements * Fix some docs warnings and errors * Remove obsolete redhat-eventlet.patch * Add cinder prop image, deprecate imageRef * DB API : tolerate None values to \_encrypt * Fix RequestContext.to\_dict user/username inconsistency * A resource to generate random strings * Fix possible race issue with test\_engine\_service * Begin 3 chapters for Orch API Ref Manual * Migrate to Oslo DB 96d1f887dda Part 3 * Update openstack.common.policy from oslo * Make templateResource not replace on update * Fix the signal details string * Rolling update support for Instance/AutoScalingGroup * Fail stack-create if script exits with non-zero status * Add help for purge\_deleted command age argument * Catch the appropriate exception for missing instance * Don't install EPEL rpm on CentOS 6.4 * Increase support for the AllocationId property * Save parse errors in TemplateResource for later * Create a better exception in Fn::Replace * Update some cases of iterating stack resources * Don't try validate TemplateResource properties in template\_validate * Cleanup nested loop variables in TemplateResource * Fix clashing loop variables in TemplateResource * Move the registration of the global env to after plugin resources * Make the testing of resource loading easier * allow "members" property to be absent * It is necessary to update pool\_id for Neutron LB * Update resource stacks automatically * Implement parser.Stack.\_\_delitem\_\_() * Don't iterate over Stack.resources dictionary * Get InstanceGroup InstanceList from get\_instances() * Refactor total\_resources * Make parser.Stack a proper Mapping * Unit tests: don't use status strings from class * Don't obtain resources through stack.resources * Add contrib to tox pep8 check * Handle NetworkNotFoundClient and PortNotFoundClient * resource\_data saved unencrypted * Change pyrax identity\_type of Rackspace resources * Enabled request\_id in RequestContext * Make sure that nested stacks have their watch rules checked * Start the watcher task if a nested stack has watches * Add a new db api stack\_get\_all\_by\_owner\_id 2013.2.rc1 ---------- * Add some docs on how to setup Ceilometer to use Alarms * resource\_id check on router gateway, interface delete * Handle BadRequest in VolumeDetachTask * HOT str\_replace default to empty string for param * Open Icehouse development * Fix F17 CFN link in Getting Started * Imported Translations from Transifex * Add the "show" attribute to the neurton attribute\_schema * Add \_() around the attributes\_schema in net.py * heat\_keystoneclient: Fix consuming trusts via v2 API * Disable lazy translation * Updated from global requirements * Validate template size during download * Log exception traces in APIs * Purge ubuntu getting started guide of old info * Purge Fedora getting started of old info * Remove tools/openstack\* * Fix inconsitencies in HOT template guide and spec * Lazily load resources when loading a Stack * Do not assume fixed\_ips is a specified property * api : default signal body to None * Store tenant with trust details in user\_creds * Conform stack resource error so it gives a 4xx * Imported Translations from Transifex * Return parsed list value in CommaDelimitedList * Make availability zone for CinderVolume optional * Document neutron Net properties * Provide config option to cap events per stack * Handle HOT param constraints in provider templates * Do not translate HOT param constraints * Add attributes\_schema to CinderVolume * Make HOT parser errors translatable * Document floatingip properties * Rename counter\_name to meter\_name in alarm * Add config option to limit max stacks per tenant * Document EIP resource properties: * Skip None values in fixed\_ips when creating Port * Remove Neutron VPN resources id attributes * Remove Subnet id attribute * Remove Router resource id attribute * Remove Port resource id attribute * Remove Neutron firewall resources id attributes * Remove Neutron load balancer resources id attributes * Remove Net resource id attribute * Remove CinderVolume id attribute * api ec2token: allow auth\_uri conf to be set via keystone\_authtoken * api ec2token: Clear failure when no auth\_uri specified * Imported Translations from Transifex * Add method to count events by stack * Comparing device name values instead of their reference * For Subnet gateway\_ip, pass None for empty string * Sync gettextutils from oslo * Require oslo.config 1.2.0 final * Move Rackspace resources into contrib * Improve test coverage of stack deletion * Stop nested stack updates exceeding resource limit * Use name property in OS::Nova::Server if set * Format error on urlfetch.get fail * StackResource set requires\_deferred\_auth=True * Replace first\_public\_address/first\_private\_address * HOT str\_replace to use string.replace, not string.Template * Document internet gateway properties: * Consider downloading a valid status for CinderVolume * Add the shared property to neutron Net * Add tenant\_id property to neutron Net and Subnet * Allow resource\_by\_refid returning resumed resources * Allow access to attributes of resumed resources * Stop stack updates from exceeding resource limit * Tolerate bad environment until validation * Limit resources per stack in nested stacks * Provide config option to limit resources per stack * Replace OpenStack LLC with OpenStack Foundation * Document neutron health monitor and pool properties * Use unicode() when serializing REST API errors * Document swift properties and attributes * assert\_ is deprecated, use assertEqual * Document aws loadbalancer properties * Nested stack derive requires\_deferred\_auth from resources * Mark reservation\_id, config\_drive as implemented * Sync gettextutils from oslo * make get\_flavor\_id to work if input is flavor id * Add 'repeat\_actions' property for OS::Ceilometer::Alarm * Document nested stack properties * Document user properties * Use built-in print() instead of print statement * Document instance resource properties * Document autoscaling resource properties * Remove broken tripleo links from on\_devstack doc * Encode values as utf-8 before encrypting * Document neutron vpn service properties * Fix misused assertTrue in unit tests * Document aws cloud watch alarm properties * Document ceilometer alarm properties * assertEquals is deprecated, use assertEqual * Docs for building heat-cfntools images with diskimage-builder * Consistent logging in the API to better log exceptions * Use the generic RequestLimitExceeded exception when possible * Validate OS::Nova::Server block\_device\_mapping property * Use strings for block device mapping info * Add methods to help calculate a stack's resources * Add error handling to property value resolution * Migrate remaining TEXT columns to LONGTEXT * Document volume properties * Add security\_groups for create\_port() * Impose a size limit on JSON request body * Add HOT functions to dependency checks * Use physical\_resource\_name as Ref for Instance/AS Group * Make some heat resolve functions workable in hot * Enclose command args in with\_venv.sh * Pass debug mode to eventlet.wsgi.server * Only send traceback to users when in debug mode * Change the dbinstance to F19 * Move dbinstance into a TemplateResource * Make global TemplateResources usable in the tests * Make the new template validation usable from tests * Add DB API to get the count of stacks per tenant * Set a small max\_template\_size for test\_long\_yaml * Only validate credentials on create based on resources * Run cfg.CONF.reset() on test cleanup * Fix H233 in sphinx config * Fix TemplateResource list property conversion 2013.2.b3 --------- * parallelize StackResource delete * Adding IPsec site connection to Heat resources * Adding IPsec policy to Heat resources * Adding IKE policy to Heat resources * Adding VPN Service to Heat resources * update neutronclient to 2.3.0 minimum version * parallelize instance delete * parallelize volume deletion * Implement parallel delete * Fix AttributeError exception in autoscaling * Update nested stacks in parallel * Fix problem with mocking tasks * Create a Stack.update\_task() method * Change \_testnoexisthost\_ references in tests * Migrate stored credentials to keystone trusts * Remove py33 from tox.ini until eventlet is ported * Make error message for InvalidTemplateReference sane * Add unit tests for Resource dependency inference * Remove some heat-cfnclients only exceptions * Add trust\_id and trustor\_user\_id Context and DB * Allowing to pass network name to router gateway * Don't use a query for watch\_rule\_get() * Don't use a query for stack\_get() * Delete the old example config files * Remove references to the multiple config files * Support ISO8601 duration format for UpdatePolicy PauseTime * Sync rpc from oslo-incubator * Make security groups associated with Neutron port work * Parallelise Server updates * Rackspace: Parallelise CloudServer updates * Parallelise Instance updates * Allow resources to be updated in parallel * Don't stub LoadBalancer.update in autoscaling tests * Do updates based on a single dependency list * autoscaling test fix assertRaises Exception warning * Remove localhost references from tests * Implement native nova server resource * Generate docs using new properties Schema class * Give Property constraints a string representation * Fix CFN API error responses * Remove aws\_creds from DB API * TemplateResources need to download from local "file://" urls * Add support for local file urls * Provide user control for maximum nesting depth * Cleanup the Properties doc strings * Add auto code api doc generation * Implement interruption-free update and rollback * Remove unnecessary aws\_\* from user\_creds * Remove unused service\_\* columns from user\_creds * Change localhost references in test\_nested\_stack * Add schema for security group rule * Don't delete failed instances in InstanceGroup * Add VPCZoneIdentifier attribute for autoscaling * Make logical\_resource\_id renaming backward compatible * Add the missing heat.po files into heat * Add the api config opts in groups to deal with the single heat.conf * Rename OS::Metering::Alarm to OS::Ceilometer::Alarm * Catch a NotFound exception in signal\_responder delete * Improve error message for nova unknown status * Remove backup resources on stack delete * Add a DB API to swap two resources between stacks * Add a "rollback" parameter to StackUpdate * Always resolve properties against the current stack * Remove the rest references to exception.py * Support native naming in InstanceGroup * Include Description in conversion from legacy Property schema * Add support for source security groups * Adds support for Neutron Firewall * Autoload Nova extensions * Allow in-place update of nested stack * Enhance StackResource update for more use cases * Store the backup stack during updates * Pass owner\_id to stack\_get\_by\_name() * Add a method of creating a backup stack in the DB * Evaluate lazy translation in exception \_\_str\_\_ * Allow a Provider with a known facade its own schema * Use the global environment to map Quantum to Neutron * Add a has\_interface() method to the resource class * Only create user\_creds row on initial stack store * remove unused config options * Pass token as a callable to Ceilometer client * Implement a load balancer resource using new neutron pool * Use oslo.sphinx for the doc templates * Rename event logical\_resource\_id to resource\_name * Use string constants to prevent typo errors * Add a CloudWatch::Alarm implementation based on Ceilometer * To support both CW and CM, return alarmurl from policy ref * Store the generated signed urls in resource\_data * Remove "lazy=joined" from the resource\_data backref * Try to reduce the number of tests with the same stack\_id * Implement Fn::MemberListToMap * Fix the main docs index page * Remove the usecases from environment.py as they are in the docs * Add some basic evironment docs * Do not delete nova server on create fail * Do not assume nova provides a fault on ERROR * Add a script show all possible state transitions * Limit maximum size of all templates * Make the API for getting dependency graph edges public * Pass the previous stack to StackUpdate * Improve update debugging messages * Fix all the sphinx-build warnings * Fix some flake8 warnings in doc/resources.py * Fix crash in "make html" introduced by the global env * EC2token middleware implement multi-cloud auth * Replace httplib with requests for ec2tokens auth * Always validate auth\_uri with allowed\_auth\_uris * Add UpdatePolicy attribute to Instance/AutoScalingGroup * Use the global environment to define AWS::CloudWatch::Alarm * Load deployer/global environment files at startup * Add an environment\_format.py like the template one * Process request exceptions while fetching template * Add new attributes to EIPAssociation resource * Remove the Property.schema\_from\_param() method * Generate property Schema objects directly from parameters * Use Template to instantiate TemplateResource * Handling re-delete in rackspace db resource * Fix incorrect use of ServerError * Introduce nova\_utils.server\_to\_ipaddress * Convert heat.common.template\_format to use C yaml * Use system locale when Accept-Language header is not provided * Use LONGTEXT for templates in MySQL * Wrap the resource registration in a global environment * Create a Schema from a parameter * Allow Parameters to set defaults for TemplateResource * Fix install.sh calling setup.py * Allow Description in properties schema * Use nova\_utils for keypair validation * Move \_check\_resize to nova\_utils * Move \_deferred\_server\_statuses to nova\_utils * Move \_delete\_server to nova\_utils * Revert "Implement an "Action in progress" error." * Add code from Oslo DB 96d1f887dda Part 2 * Make Event object independent of resource object * Translate user-facing exception messages * Updated LaunchConfig for AutoScaling UpdatePolicy * Catch "FloatingIpPoolNotFound" in eip.py * Tests for s3 and swift resources were extended * Store owner\_id on Stack so updates maintain it * Derive keystone\_ec2\_uri from auth\_uri * Extract failure reason before deleting nova server * Update test requirements * Handle heat with SQLAlchemy >= 0.8 * Tolerate missing user on signal responder delete * Fixes files with wrong bitmode * Fix syntax description of HOT get\_attr function * Differentiate resource types in test\_update\_rollback\_remove * Stub ResourceWithProps instead of GenericResource * Hot SoftwareConfig model part * Update Oslo to 96d1f887dda Part 1 * Move property constraints validation to Schema * Remove unneccessary Property constraints from unit tests * Add constraint checking to Property schema * Tidy up a few places in test\_engine\_serivce.py * Adding HOT str\_replace and get\_resource functions * Revert "Add missing \_ imports to allow doc generation" * Move heat-cfn, heat-boto, heat-watch to new repo * Add debug option to run\_tests.sh * Introduce new resource\_data\_delete db api * Not to eat Metadata parsing error * Fix intermittent failure in autoscaling tests * Use correct actions for StackResource * Resolve LaunchConfig references * Get rid of unused greenlet things in test\_resource * Fail fast if Resource action methods are missing * Don't raise ResourceFailure directly in Instance * ReST API: Add an API for retrieving resource schemata * RPC: Add an RPC call to get a resource type schema * RPC Client: Add missing unit tests * Port policy from oslo and refactor heat policy * Enable multi-cloud standalone mode * Fix problem creating ResourceFailure * Do validation in parameter schema * Validate created/updated stacks in StackResource * Tidy up RPC API definitions * Define a Schema format for properties * Remove meaningless property set in models.HeatBase * Tolerance for modified ceilometer alarm notification * Initial input for HOT template guide and spec * Remove unnecessary individual import tests.utils.X * Ensure all REST API error responses are consistent * Remove raw\_template\_get\_all from db api * Provide a way to clean up soft deleted data * Enable stack soft delete for event persistence * Implement neutron pool resource * Implement neutron health monitor resource * db: Remove deprecated assert\_unicode attribute * Refactor some tests for stack soft-delete * Add unittests for faultwrap middleware * Use openstack rpc functions to generate \_Remote exceptions * Exclude heat-cfn, heat-watch from pep8 * Fix H231 Python 3.x incompatible 'except x,y:' * Fix H501 Do not use locals() for string formatting * Provide a way to clean up testing database * Add missing \_ imports to allow doc generation * Refactor compute resources to use nova\_utils * Updated from global requirements * Implement an "Action in progress" error * Don't cache data from the API that could change * Stop copying UUIDStub, put it into tests.utils * HOT parameter validator part * Fix test cases pass dict schema directly as parameter schema object * Rename Quantum to Neutron * Add the enabled property to the ceilometer alarm * Refactor useful nova functions for re-use * Refactor InstanceGroup to use a nested stack * DB models and migration scripts for soft delete * Returns text error when instance validation fails * Add Babel missing requirement * Fix test cases pass dict as template object directly * Don't assign "error" variable twice * Change token name from context * Revert "Replace part\_handler.py with write-files cloudinit mechanism" * Rename: VALUES to ALLOWED\_VALUES, PATTERN to ALLOWED\_PATTERN * Remove support for eventlet 0.9.16 * Small tweaks to recreation of remote errors * Enable localizable REST API responses via the Accept-Language header * Include the resource and action in ResourceFailure exceptions * Unit tests: Don't raise ResourceFailure directly * unit tests: Add a handle\_delete method to GenericResource * Rackspace: Don't raise ResourceFailure exceptions * Sync gettextutils from oslo * Resource: Clean up exception handling and error messages * Add help option to Config Settings * Rename rackspace server ImageName, Flavor, UserData * Call cfn-create-aws-symlinks in rackspace servers * Stop delete polling after status == DELETED * Make Volumes work with the default AvailabilityZone * Allow the Ceilometer Alarm to be used with cfn-push-stats * Add the AutoScalingGroupName to the server Tags * Don't use a static uuid for the stack\_id in ceilometer\_alarm * Remove password auth from pyrax * Move the random\_name() function from loadbalancer to utils * Clean up the attributes module * Use dummy\_context() for rackspace server test * Assign rackspace server name from physical\_resource\_name * Replace rackspace PublicKey property with key\_name * Tolerate an actual boolean for NoEcho * Replace part\_handler.py with write-files cloudinit mechanism * Rackspace database resource output is null * Fix for bad content inside Resources element * Initialize resources to DELETE-COMPLETE if missing during stack delete * Rackspace database resource output is null * Clarify text in heat/tests/templates/README * Use subsections in resource doc generation * Functions documentation cleanup * Print before exiting * Add Cloud Server support for RHEL and CentOS * Support any distribution without UserData/MetaData * Allow template resource use outside of Environment * Add rest endpoints for resource template generation * Add a Ceilometer alarm resource * Fix a timing sensive cloudwatch testcase * Auto-document all resource types * Sphinx extension to generate resource documentation * Enable service validate-template for hot template * Skip RSA generation during tests * Always convert AllowedValues to a list * Add some docs for intrinsic functions * Fix cloud\_watch delete when the watchrule is not found * Teach ScalingPolicy and Restarter to create signed urls * Make the current alarms use the signal action * Add an API for passing a signal through to a resource * Generate a template from a resource implementation * remove remote\_error and corresponding try...catches * Replace urllib2 with requests in urlfetch module * HOT parameter validation model translation * make heat-api return a parsable error * Fix loguserdata output to file issue * Use new style classes * Add resource for Rackspace Cloud Servers * api : Implement OnFailure option to cfn API CreateStack call * Add \`default\` attribute in hot parameter definition * Refactor the code in heat/tests/test\_volume.py * Handle 'detaching' state of Volume * Reset state before resource recreation * Only use a token for openstack client operations * Migrate all tests to use dummy\_context * Add missing Aapche 2.0 license headers (H102) * Add a py33 tox environment * Reset the the watch\_rule.last\_evaluated on start up * Only create the period watch task if there is a watch in the stack * Wrap the watch rule start in a method * Configure standalone pipelines for cfn and cloudwatch * Set role headers from ec2 authentication * Set tenant headers from ec2 authentication * Update openstack.common.config * Handle InstanceType change in Instance.handle\_update * Move url\_for into heat\_keystoneclient * Test utils dummy\_context for tests that need one * Put pre-created resources in state INIT COMPLETE * add docs from the heat wiki 2013.2.b2 --------- * Add a test for customizing AWS::EC2::Instance * Add tests for resource-data delete bug * Fix resource-data delete bug * Fix version and location of heat doc build * Check missing parameters during stack create * Don't reload haproxy and use ensureRunning=true * Make sure that Tags on the InstanceGroup get passed to nova * Test that Tags get converted into nova metadata * Align OpenStack client versions with project requirements * Cleanup and make HACKING.rst DRYer * engine : Allow loadbalancer resource to work with no key * Create implicit depends from gateway to public subnet * Wait until quantum resources are deleted * Do not override FnGetAtt * Add resource\_data table for free-form key/value data * provide test for nested stack error path * Add Rackspace cloud loadbalancer resource * Update oslo.notifier and always register options * avoid excessive database calls while loading events * Global disable scheduler \_sleep instead of mocking * Rename part-handler.py to part\_handler.py so it can be imported * Handle conversion of MAP properties to JSON params * Tolerate an empty environment properties * Add length validation to properties of type LIST and MAP * Use new environment and parameters on stack update * Define behaviour for properties with None values * Let git ignore pydev project description files * Suggest the use of tripelO images * Make the waitcondition signed url more generic * Check duplicate names between params and resources * engine : add suspend/resume support to User resource * engine : add suspend/resume support to watch resource * Sync install\_venv\_common from oslo * Stop patching the GenericResource's property\_schema * Enforce credentials requirement on stack create/update * cleanup watchrule delete logic/tests * Fix command name display issue in heat-manage usage * engine : autoscaling pass instance id's not names to loadbalancer * Rackspace cloud database resource provider * add missing gettextutils imports * engine : perform periodic tasks with stored stack\_context * implement stack metadata * Rework associations from vpc to quantum resources * Tolerate 404 on user delete * Get rid of template caching in resources * Explicitly pass old json snippet to update * tests : remove duplicate suspend tests * Add resume support to InstanceGroup * engine : resume support for nested stacks * api : Add actions resume support * Add resume support to Instance * Add initial resume logic to engine * destroy failed instances created by auto scaling * Expose resource dependency required\_by to REST API * install "\_" via gettextutils * engine : simplify resource state check * engine : remove unnecessary default check\_\*\_complete functions * Fixup handle\_create backup restore * Remove comments from requirements.txt (workaround pbr bug) * add GET /{tenant\_id}/stacks/detail to Heat API * Add suspend support to InstanceGroup * Fixup assert\_has\_keys * autoscaling : Fix issue when scaling to zero instances * Add editor backup files to .gitignore * Ports depend on the subnets in the same network * Add dependency between RouterGateway and RouterInterface * Add MinLength, MaxLength to properties schema * engine : autoscaling refactor Instance list->object logic * api : Add ReST actions POST method * engine : parser.Stack create general stack\_task * engine : suspend support for nested stacks * Add suspend support to Instance * engine : stack\_resource change state\_description to status\_reason * Raise suitable exception when stack validation fails * Handle YAML parser error as well * Changes for HOT hello world template processing * OS::Quantum::Subnet resource, add enable\_dhcp * check content type in JSONRequestDeserializer * Store created nova client in OpenStackClients * Allow JSON values for parameters * Add initial suspend logic to engine * Use print\_function compatible syntax * Allow a resource delete to be re-attempted * Emit alarm actions if a rule remains in ALARM state * Initial provider templates * Fixup some trivial license header mismatches * Adding common base class for Rackspace Resource providers * Pass before and after snippets to template diff * Cache snippets in StackUpdate * Simplify a stack update unit test * Refactor and partly parallelise stack update code * make stack creation return json response * Give alarm a physical\_resource\_name which need no id * Do not refresh timestamp from database on read * Unrestricted username length causing error * Add VerifyAll to test methods using mox * Fix BaseException.message DeprecationWarning * Fix one of the last stack.state's -> status * Revert "check content type in JSONRequestDeserializer" * Fix and enable H303 and F403 No wildcard (\*) import * Implement attribute schema for resources * Introduce a schema for attributes * Restore babel setup config options * Convert Stack to separate action/status * Updated common module from oslo * Initial provider template uploading * check content type in JSONRequestDeserializer * Detect failed instance creation in autoscaling * Support cloud-specific suffixes to server status * autoscaling fix LoadBalancer reload static resolve * Return None for physical resource name during validation * Standardise resource names in Invalid Attribute errors * suppress and log API internal exceptions * Add a Fn::Split function to aid provider templates * Add dependency between FloatingIP and RouterGateway * Add InstanceId property to EIP resource * scheduler: Simplify DependencyTaskGroup interface * scheduler: Improve task descriptions in debug logs * Cleanup the doc strings in heat/rpc/client.py * API support for Environments * Make template\_format.parse usable by environments * Use PhysName for testing Swift container names * Fix bizarre Swift DeletionPolicy unit tests * Use physical\_resource\_name() for Swift containers * Remove unused parameter.user\_parameters() * Use the Environment from within the engine * Use physical resource names with a short\_id * Initial Environment class and test * engine : abstract state-transition logic * Convert Resource to separate action/status * Store stacks in the database when running unit tests * Unit tests: Create User for testing AccessKey * Unit tests: Don't use mox to stub uuid.uuid4() * Make resource ids UUIDs in the database * Convert Events to separate action/status * allow using image uuid for instance resource * fix an CFN API and AWS error mapping * Remove unused python-memcached from requirements * Use Python 3.x compatible except construct * Add bin/heat-manage to flake8 checks * Gate on H703 * scheduler: Fix an issue with wrappertasks and exceptions * Fix H702 errors and enable them * Remove explicit distribute depend * Key error when auth in standalone mode * engine : remove GreenletExit workaround * Add descriptions of the pep8 checks * Fix various Sphinx errors/warnings * Use Python 3.x compatible octal literals * Adds possible topdir to python search path * Return empty string when Fn::Select target is None * Add Fn::Replace template function * Initial mariadb support * raise an UnknownUserParameter exception when receiving an unknown param * Enable H403 * get rid of no-op \_\_init\_\_ methods * Rename functions which should not be run as tests * flake8 F812 list comprehension redefines fix * Only call FnGetAtt if resource is in acceptable state * Make Fn::GetAtt add a dependency * Use - instead of . for physical\_resource\_name delim * Make autoscale not dependent on loadbalancer impl * Use a physical name matching class in unit tests * Add Fn::Select template function * Fix instance creation when a network with no subnet is used * For Fn::Join, replace None items with an empty string * Relax lxml version requirements * tests : fix cut/paste test name shadowing * a minor fix to volume.py * Fix Hacking H304 Warnings * Fix an intermitting failure in test\_metadata\_refresh * Log at DEBUG level in unit tests * scheduler: Fix inifinite loop for no-wait tasks * Handle metadata updates during stack creation * Create nested stacks in parallel * Create stacks with a co-routine * Implement timeouts for nested stacks * Allow stacks to be created without a timeout * add error flow tests for volume detach * Clarify a comment which says we require KeyName - which is incorrect * Add CONTRIBUTING.rst file * Clean up DB migrations when running unit tests 2013.2.b1 --------- * Get rid of extra delays in unit tests * Restore heat.db.sync and add Deprecated message * Use heat-engine.conf for heat-manage config * Create resources in parallel where possible * Add a dependency-aware task group * Move deletion from dependency graph to \_\_delitem\_\_ * Make the mutable dependency graph a separate class * Make dependency graph node class public * Fix the handling of non-existing paste file * refactor test\_engine\_service.py * Fail validation when security groups and interfaces conflict * Add a basic heat-manage * Remove eventlet dependency from unit tests * Use a task to delete Instances * Bring in oslo.cliutils for heat-manage * Update the oslo code before importing a new module * Migrate test base class to testtools * Add CONTRIBUTING file * Migrate to pbr * Implement SecurityGroupIds property for instances * Use UUIDs for Quantum security groups * Make IDs for resources unique to ensure tests pass * Change SecurityGroups to be passed directly to nova * Add a separate Template class for the HOT format * Detach Volumes from an Instance in parallel * Handle instance volume attachments with co-routines * Add a convenience method to get instance volumes * engine : move update\_template\_diff functions into Resource * Instance resource remove unreachable/redundant Metadata update check * heat tests : add coverage for instance UpdateReplace * engine : replace UPDATE\_REPLACE with ResourceReplace exception * Move VolumeAttachment polling to check\_create\_complete() * Make volume detachment a co-routine * Make volume attachment a co-routine * Verify function calls in cinder\_fn\_getatt unit test * Stub out sleeps in quantum unit tests * Remove unrelated tracebacks from test output * Rename requires files to standard names * engine : Fix ResourceFailure exception issues * Fix PEP H101 (Use TODO(NAME)) * update on\_devstack doc * Implement OS::Cinder::VolumeAttachment * Fix PEP H902 (Use the 'not in' operator) * UpdateStack for AWS::AutoScaling::ScalingPolicy * Fix PEP H301 (one import per line) * Fix PEP H402 "one line docstring needs punctuation." * PEP: be explicit about what errors are ignored * engine : remove unused update states/status * engine : cleanup Resource.update error paths * Adds sudo check for privileged operations * The oslo module called utils is no more * Exclude build/ from flake8 checks * Tests for Router, RouterInterface, RouterGateway * Tolerate resource lookup errors for quantum FnGetAtt * Implement check\_active for quantum net, port, router * The utils module in oslo is no more * Migrate to flake8 * Clean up a pyflakes error in a comment * Align usage of test skipping * Fix error in Dependencies representation * Fix SecurityGroups for AWS::AutoScaling::LaunchConfiguration * Initialise resources when service is created * Use mox for mocking quantum client test calls * Cleaned up some simple hacking/pyflakes errors * Clean up import of cinderclient exceptions * Make Volume snapshot a task * Move Volume polling to check\_create\_complete() * Handle errors in Volume creation * Rename handle\_snapshot and pass state * use skipIf for all quantum test skip checks * Clean up VPC unit tests * Adds dns\_nameserver to OS::Quantum::Subnet * Use python logging for loguserdata.py, log to console * Implement CinderVolume.FnGetAtt * Implement OS::Cinder::Volume * Copy the RHEL6 eventlet workaround from Oslo * Update install\_venv\_common from oslo-incubator * Use hostname from env in heat-keystone-setup * Move WaitCondition polling to check\_create\_complete() * Add a timeout option to the scheduler * engine : rename check\_active to make it more generic * api : Fix template-show partial URL redirect * Provide example config option for instance\_user * Add new exception for invalid template ref * Implement the SubnetId property in the Instance resource * heat-cfn : Make error with missing auth details more obvious * Fix GroupSet assignment to use resource id instead of name * Fix unit test coverage issues for wrappertask * Explicitely register options to fix intermittent failure * Skip more tests that require Cinder backups * templates : remove in-tree templates * tests : convert test\_template\_format to test-local templates * tests : convert most remaining tests to inline templates * Fix skips done in the test suite by using testtools skipIf * Wait for any nova server status that makes sense * Add test to handle nova BUILD status on create * tools : remove fetch-cloudformation-examples * docs : update local template references to heat-templates url * tests : utils parse stack specify tenant in context * tests : utils parse\_stack allow stack\_id override * Use scheduler for driving autoscaling task * Use a PollingTaskGroup to simplify autoscaling * Add a wrappertask decorator * Add a PollingTaskGroup task * Deprecate tools/nova\_create\_flavors.sh * Support password authentication * Support SnapshotId in volume creation * Give each cli its own test * heat tests : separate Autoscaling and CW alarm tests * heat tests : convert most tests to inline templates * heat tests : add parse\_stack function to test utils * Fix error reporting in @stack\_delete\_after unit tests * Set Stack id to None when deleted * Support Snapshot policy in volumes * Allow non-replacement updates of Alarms * Sometimes use quantum for SecurityGroup * Depend on discover to fix python2.6 tests * heat api: ec2token remove unnecessary jsonutils retry * Make DeletionPolicy a resource attribute instead of a property * Use install\_venv\_common from oslo * Split the module lines in openstack-common.conf * Refactor instance tests to share common code * Fix test\_validate to run by itself * Fix test\_dbinstance not running by itself * heat tests : run\_tests.sh reinstate text coverage report * Remove all references to nose * heat api : Update ec2token middleware for v4 signatures * Remove unused jenkins arguments from tox.ini * Enhance testcase for failed resource deletion * Retrieve the list of availability zones from nova in Fn::GetAZs * Fix "No handlers could be found" warnings * Fix warning about using os.tempnam in test suite * Remove unused skip\_unless and skip\_test decorators * Remove unused and outdated heat/testing dir * Re-work run\_tests.sh to call testr instead of nose * Remove broken --doctest call from run\_pep8.sh * Remove use of nose attrib plugin and most unittest * Removing all prints and capturing logging * Remove functional tests in preferece for tempest * Remove examples and update testing-overview.txt * Use testr for running gate tests * Enable running tests via testr * Make Resource.create() a co-routine * heat docs: deprecate old GettingStarted guide * heat docs : Update jeos building documentation * heat api: fix ec2token authentication * Remove pyflakes\_bypass * Fix DB sync script * Update tools/integration.sh script to new docs tree * Validate properties against the schema in validate\_template * heat engine : register options before using them * Add a scheduler module * Remove engine\_topic configuration option * Send RPCs to 'engine' topic not 'engine.$host' * Do not initialize anything during import phase * Consolidated api-paste.ini file * Move ec2token defaults from paste.ini to .conf * Optionally allow ec2token config to come from .conf * Propagate deletion errors with exceptions * Mock delete\_network in Quantum unit tests * Mark resources as failed when creation aborted * Propagate creation errors with exceptions * Assert on Resource double-create() * Fix issues with EIP unit test * Get rid of create state in Instance * Remove service \_user, \_password, \_tenant from context * Move heat-api auth\_token conf from paste.ini * Subclass keystone middleware to set headers * Improve Python 3.x compatibility * Fix pyflakes-bypass for PyFlakes 0.7 * Simplify rpc client calls * Fix the exception message in stack\_resource.get\_output() * Updated OpenShift template * heat-cfn: Handle parameters with = in them * uses os.urandom instead of Crypto.Random for backward compatibility * Update the README to point to docs.openstack.org/developer/heat * Clean up metadata refresh unit test * Get rid of create state in Autoscaling * Pass data from handle\_create() to check\_active() * heat templates : Update Wordpress config for F18 guests * heat : Getting started updates for grizzly * heat : cloudwatch paste.ini credentials incorrect * heat tools : openstack script fixes for grizzly * Update to the latest loopingcall from oslo * Remove paste config for non-existant cache filters * Remove unused and deprecated auth-context filter * Attempt to delete resources even if they failed * Fix AccessKey deletion with bad credentials * Delete unused ContextMiddleware * Replace deprecated commands with current equivalents * Fix sphinx warnings * ReST API: Translate the documentation to WADL * Add Getting Started Guides the developer doc's * No longer pass no\_cache=True to novaclient create * Log tracepath for stack validate exceptions * Pass in endpoint url for quantum auth\_token auth * Allow nova operations with only auth\_token * Pass in endpoint url for swift auth\_token auth * Allow cinder operations with only auth\_token * Catch NotFound exceptions on Volume handle\_delete * heat engine : Autoscaling reload Loadbalancer correctly * Don't assume a Parameter value is a str * Make swift FnGetAtt fault tolerant and block less * heat : remove fallback ec2signer implementation * Fix swift client token authentication * validate\_template returns whole Parameters snippet * heat getting started : fix heat-jeos URL * Change executable file permission for rpmlint * Change executable file permissions for rpmlint * Tolerate missing keys in reformat\_dict\_keys * Get rid of versioninfo cruft * Bump Heat version to 2013.2 2013.1.rc1 ---------- * Create a wsgi factory method for Debug filter * If a stack create fails, ensure the stack is deleteable * Add a manual page for heat-db-setup * Add heat-keystone-setup man page * Sort the manual page list in conf.py * Allow per-deployment configuration of user id * Remove ssh from cloud-config-files * loguserdata: handle exceptions from running the userdata * loguserdata: prevent shadowing of arguments and globals * part-handler: add missing import * heat engine : fix exception syntax issue * heat docs : Add manpage for heat-boto * Remove Nova dependencies from hacking test * heat docs : Add 2013 to the copyright string * heat docs : Add heat-watch manpage * Update dependency versions to match oslo-incubator * Fix security groups (need to be accessed as attributes) * Remove todolist from docs index * Only split roles if they are not None * Revert NestedStack FnGetRefId changes * Switch to final 1.1.0 oslo.config release * heat templates : Update for F18 * heat engine : Add validation of stack names * Pin SQLAlchemy to 0.7.x * Squash Grizzly database migrations * Use internal DB management * Register DB options independently of engine * Avoid manipulating DB directly in unit test * Establish an initial version of the database * Set correct type for owner\_id in DB model * heat clients : Fix --timeout option for heat-boto * Skip quantum unit tests if client not installed * Delay calling \_get\_user() until AccessKey is created * Recognise arn: for REST stack lookup * Update to Quantum Client 2.2.0 * heat engine : store stack on failed update * Add Quantum floating ip assoc tests to improve coverage * Add Quantum port tests to improve coverage * Add Quantum floating ip tests to improve coverage * Add tests to validate REST path to action mapping * Use stack.resource\_by\_refid to get the user resource * Use quantum IDs for VPC, Subnet, RouteTable resources * heat common : quieten policy logging * heat common : policy.py change LOG to logger * heat common : BaseClient respect host argument * heat clients : make --host option error for heat-boto * heat tests : Improve resource.py test coverage * heat engine : allow Properties validation failure events * heat tests : move GenericResource into tests directory * Convenience method to look up resource by FnGetRefId * fakes: remove some duplicate methods * Switch to oslo.config * Allow REST stack lookup by ARN * heat engine : watchrule quietly discard unused metric data * Use built-in exception filtering for GreenletExit * heat engine : Loadbalancer template watch reference should be Ref * make parsed template snapshots before updating * heat engine : Ensure properties validation is caught * Allow instance NetworkInterfaces to be list of str or dict * Test coverage for NestedStack, and fix FnGetRefId * When updating the metadata load the stack with the stored context * add missing licence header * Stop heat services from logging to stderr by default * Make sure we have a volumes property before trying to use it * Prevent shadowing of the "context" module/parameter * Fail validation when an unknown property is supplied in a template * Validation failures now raise StackValidationFailed * vpc\_test: move DependsOn to the correct template section * heat clients : Make heat-boto rollback disabled by default * heat clients : Change --disable-rollback to --enable-rollback * heat engine : Disable stack rollback by default * Add N802 rule to hacking.py * Add pyflakes to test-requires * Remove unused import from test\_nokey.py * Create autoscaling instances in parallel * Separate public/private autoscaling adjust() APIs * Move instance polling into check\_active() * Use oslo logging setup * Split resource create into create and check\_active * Fix unit tests for Instance IP * Fix flaky unit test * Fix Unrecognized Attribute admin\_state\_up Error * Add breaks to for loops * Remove unused import from loguserdata.py * Allow heat to be used without a KeyName set * Do a metadata refresh after an explicit metadata write * Gate on certain pyflakes failures * Remove unused imports from repo in preperation for pyflakes * Add heat-watch to pep8 checks * Update infrastructure to more closely match other OpenStack projects * heat engine : fix hardcoded DisableRollback value * heat clients : make boto client library pass disable\_rollback * heat tools : openstack script install mysql via openstack-db * Put heat data files in /var/lib/heat-cfntools * Depend on recently released python-quantumclient 2.1.2 Fixes bug 1133381 * Remove duplicate Mapper() constructor * heat engine : loadbalancer resource template, refer to StackId * heat engine : Re-resolve resource static data before create * heat engine : Compare runtime resolved resource snippets on update * heat engine : Set stack parameters AWS::StackId on stack create/store * heat engine : Add parser parameter support for AWS::StackId * Removes unused config settings from heat-engine.conf * heat engine : Make loadbalancer nested template raw string * Add waitcondition to loadbalancer nested template * heat engine : fix variable/import shadowing in service.py * heat engine : reinstate resources import * Update the metadata if an alarm action makes changes * Make the alarm actions run in one thread * heat : Only set qpid loglevel when rpc\_backend specifies qpid * Use a short\_id for naming S3 containers * Use a short\_id for naming Swift containers * Add a module for generating random short ID strings * Make the exception string a little more useful * Remove compat cfg wrapper * Make quantumclient optional again * Get rid of unused imports * heat loadbalancer : make LB nested template create credentials * Protect AccessKey deletion from failing * Fix tarball tag to be empty rather than a point * Do not tag development releases "dev" * heat api : allow validation of YAML templates via cfn api * heat api : don't store whole request in ec2Credentials context * heat tests : fix run\_tests.sh pep checks * heat : bump oslo-config version to fix import error * Add an attribute to InstanceGroup and AutoScalingGroup to return the ips * Remove "deny from all" line in wordpress config * Update GettingStarted with link to prebuilt images * heat engine : Add support rollback support for stack updates * heat engine : Update stack dependencies during update * heat engine : fail update immediately on resource update failure * heat common : Add ResourceUpdateFailed exception type * Add config for boto https\_validate\_certificates * heat engine : avoid returning empty resource error strings * Missing policy json files from tarball * heat engine : Implement rollback for stack create * heat engine : Only create periodic task on CREATE\_COMPLETE * make stack\_delete\_after decorator tolerate deleted stacks * Use 2013.1 for Grizzly release version info in setup.py * Provide unit test coverage for AWS::EC2::SecurityGroup * heat cli : Add --disable-rollback option to heat-cfn * heat tests : delete stacks from DB in parser tests * heat api : Handle DisableRollback parameter in cfn API * make engine api handle string or bool disable\_rollback * Throw a proper error if the flavor is missing * Add information about using the python-heatclient to the documentation * Make AvailabilityZone parameter available to nova create * Use oslo-config-2013.1b3 * heat engine : Add support for disable\_rollback to engine API * Implement RouteTable and subnet association * Implement Internet Gateway and VPC attachment * Escape awk + sign so heat-keystone-setup works on Ubuntu 12.04 * Complete tests for NetworkInterface * Fix policy checks for users without policies * Use physical\_resource\_name for quantum/vpc resources * ip\_version is mandatory for quantum create\_subnet * Implement VPC Network Interface resource * Add Tags to vpc properties schema (Unimplemented) * Impement VPC subnet resource * heat templates : allow access to wordpress in example templates * Implement the "Volumes" property of Instances * Make the doc look a bit better and give a better overview * Add update support to InstanceGroup * Implement NetworkInterfaces instance property * Catch 404s when deleting quantum resources * Implement simple AccessPolicy Resource * heat templates : Remove IAM Policy sections * heat tests : split user test into User/AccessKey * heat engine : add option to control instance boto http/https * heat clients : Make boto client select http/https from configfile * heat scripts : Avoid using lsb\_release in tools/openstack * heat api : Add policy.json authorization to cloudwatch API * Depend on WebOb==1.2.3 to align with other OS projects * Use yaml.safe\_load: full yaml.load isn't needed * Add missing logging import * test\_s3: use try\_import from common * Refactor loguserdata.py so it can be tested * heat api : Add policy.json authorization to CFN API * heat common : context should split roles from X-Roles * heat tests : fix StackControllerTest name duplication * heat tests : remove duplicate import * Add cinder support to resource volume * Add initial code to support policy.json implementation * update openstack common and include policy.py * Remove unused heat/common/policy.py * Fix a few bash logic errors in install script * Remove sendfile as a dependency * Fix typo in AutoScaling update * Change install scripts to use cinder * heat engine : AutoScalingGroup UpdateStack support * heat engine : Resource add function to compare properties * heat tests : update\_allowed\_keys should be tuple * heat engine : Resource remove redundant None get defaults * heat docs : Fix version string issue * Update to latest oslo-version code * heat engine : WaitCondition add Handle property validation * heat tests : test\_api\_cfn\_v1 move verify out of teardown * heat tests : test\_waitcondition move cleanup out of teardown * heat tests : Add utility decorator for deleting stacks * heat api : add register\_api\_opts to init.py * heat engine : WaitConditionHandle use creation time for timestamp * heat engine : don't treat UPDATE\_COMPLETE as failure * heat engine : pass fully resolved template to update * heat engine : Support Metadata update for Instance resource * heat engine : add Resource update\_template\_diff method * heat engine : pass json snippet into resource handle\_update * heat engine : don't replace resource template before update * Hardcode provision-finished file path * Wait for deletion of Instances during creation * Fix Instance deletion in unit tests * Initial support for Transifex translations * heat engine : error on resource update with invalid properties * Store instance resource-id earlier * Make sure failures in groups (autoscaling & static) are raised * heat engine : AutoScalingGroup implement Cooldown property * Make flavor-list regexp more robust * Make a dedicated InstanceGroup * heat engine : ScalingPolicy implement Cooldown property * heat tests : autoscaling test add missing VerifyAll * heat tests : WatchRule test add missing VerifyAll * Use pkg\_resources to detect version of cloud-init * A native Swift container resource type * heat\_keystoneclient make token auth work * heat api paste.ini auth\_uri should use auth\_port * heat rename HEAT::HA::Restarter resource * heat engine : make WatchRule state message info * heat engine : make WatchRule initial state NODATA * heat tests : test\_watch add tests for set\_watch\_state * heat tests : test\_watch add create\_watch\_data test * heat engine : make watchrule actions run in stack ThreadGroup * heat tests : Add WatchRule evaluate test * heat engine : watchrule save state when actions undefined * ReST API: Don't overwrite webob error messages * heat tests : test\_watch remove logging * ReST API: Return 400 for malformed JSON input * Typo error, "requied" -> "required" in run\_tests.sh * openstack/common : rebase to latest oslo * heat tests : test\_engine\_service remove commented lines * heat engine : watchrule don't run rule for every SampleCount * heat templates : IHA enable cfn-hup * heat templates : fix IHA HeartbeatFailureAlarm during instance build * heat templates : IHA HeartbeatFailureAlarm should be Ref * heat templates : add missing credentials to IHA template * ReST API: Clean up exception-handling cruft * RPC API: Add a WatchRuleNotFound exception * RPC API: Add a PhysicalResourceNotFound exception * RPC API: Add a ResourceNotAvailable exception * RPC API: Add a ResourceNotFound exception * RPC API: Add a StackExists exception * RPC API: Add a StackNotFound exception * RPC API: Add an InvalidTenant exception * Prepare the groundwork for more exception types * Fix duplicate naming in unit tests * Get rid of unused initialisations in Resource * heat tests : remove debug print * Don't inherit from NestedStack * Move abstract nested stack class to separate file * Add a convenience method for deleting nested stacks * Only delete the flavors that the script will then replace * Make pip-requires a little F18 friendlier * Remove instance in ERROR state after failed create * Remove extras dependency with a partial oslo sync * heat engine : WaitCondition FnGetAtt return correct signal data * heat engine : Implement Count property for WaitCondition * heat engine : Add metadata validation to WaitConditionHandle * heat engine : implement metadata\_update per-resource * Add auth middleware for custom cloud backend * Add configurable cloud backend * Trivial commit to make daily rpm builds work again * heat engine : DBInstance don't pass credentials to cfn-init * heat engine : LoadBalancer resource delete nested stack * heat engine : DBInstance fix so nested stack is deleted * heat engine : allow NestedStack template validation to work * heat engine : ensure create thread exits on stack delete * Handle different cloud-init versions gracefully * Add missing files to generated tarballs * heat tests : remove unused get\_sftp\_client() * heat tests : remove pointless get\_ssh\_client * heat engine : map DBInstance DBSecurityGroups parameter correctly * heat tests : functional tests align eip output with Folsom * Turn off tag\_date on branch master * heat tests : CFN\_API functional tests NoEcho Parameters fix * heat tests : functional tests remove erroneous finally clause * heat tests : convert stack ID to uuid format * heat tests : functional tests poll\_glance cleanup * heat tests : convert functional tests to folsom glanceclient * Use correct stack\_id arg name for metadata\_update() * On master branch, tag tarballs as dev snapshots * RPC API: Simplify describe\_stack\_resources call * Use the new find\_physical\_resource RPC call * RPC API: Add a separate find\_physical\_resource call * CFN API: Fix DescribeStackResources with physical ID * Handle duplicate physical resources IDs * RPC API: Clean up list\_events results * RPC API: Clean up list\_stacks results * RPC API: Clean up show\_stack results * Include new doc directory * run\_tests.sh fixup venv/novenv logic * run\_tests.sh cosmetic, make if/then style consistent * run\_tests.sh cosmetic cleanup indents * update tox.ini to pep8 latest (1.3.4) * heat cleanups to align unit tests with pep8 1.3.4 * heat cleanups to align functional tests with pep8 1.3.4 * heat cleanups to align with pep8 1.3.4 * Fix DescribeStacks command for all stacks * ReST API: Improve format of resource\_types response * Return an ARN as the Ref for nested stacks * Split nested stack implementation into abstract and concrete * Avoid logging.getChild for python2.6 compatibility * RPC API: Pass a stack identifier to metadata\_update * Pass correct types in RPC Client unit tests * Update links in composed templates * A new documention structure, ready for contributions * pip-requires PyCrypto should be >= 2.1.0 * Add support for missing Instance attributes PrivateIp and PublicDnsName * GettingStarted: Install python-pip package * Fix issues with deleting a WaitCondition * Fix importing of novaclient exceptions * tools/openstack\_ubuntu fix nova-manage network create command * Handle empty UserData for instance * Make resource registration conditional * Add a resource type list to the ReST API * Add an RPC API to list resource types * Standardise client imports * Fix ReST API documentation for template validation * install.sh non-root error should go to stderr * install.sh add logic detecting rabbitmq * tools/openstack fixup header formatting * Add ubuntu version of tools/openstack * install.sh simplify heat-engine.conf conditional * Remove heat-metadata man page * Get rid of naked "except:" clauses in tests * Don't skip watchrule test on exception * Get rid of unused imports * Get rid of nose.main() in unit test files * heat\_keystoneclient ec2 user fix * Move the cfn client code to a subpackage * heat cfn api, format waitcondition error responses correctly * Override events for AutoScalingGroup instances * resource state\_set, abstract update/store logic * Don't allow identifiers with slashes * Don't allow slashes in Stack or Resource names * Move resolved template comparison to stack update * Fix race condition in list\_stacks * Get rid of glanceclient dependency * heat engine : convert WaitConditionHandle URL to ARN format * heat : Add HeatIdentifier from\_url function * Eventlet monkey-patch heat-api-cloudwatch * Eventlet monkey-patch heat-api-cfn * Eventlet monkey-patch heat-api * Add test to simply run a few binaries * Switch over missed file in version switch * Don't pass -1 as a stack\_id in unit tests * Make Volume tests independent * Clean up the volume test * Fix Instance unit tests * Add back catch\_error which is used for CLI errors * Switch to openstack style versioning * Update openstack-common to get newly fixed version.py * heat-db-setup read engine config file for DB connection details * Don't get nested stacks by name * Fix exception handling in AccessKey fetching * Move utils.py to a more appropriate location * Get rid of leftover heat-jeos code in utils * Get rid of pointless cloudformation.py file * Get rid of the cfn\_helper tests * Enable VPC unit tests * Enable Quantum unit tests * Get rid of naked except: clauses * heat : Update getting started wiki links * heat : Clarify openstack versions for Fedora releases * heat : Update repositiory in getting started guide * Add version.py from openstack-common * Do not wrap exceptions during quantum resource delete * Update openstack-common * Use common implementation for fetching templates * Add a common implementation for fetching a URL * Pass string to template\_format.parse() * Resource.\_\_eq\_\_ allow resources in different stacks * Fix importing of quantum resources subpackage * Do the same install\_requires as other projects * Install extras during pip install; fixes devstack * heat remove unused config options * heat getting started, add pip install extras * heat engine : remove KeystoneClient get\_user\_by\_name * heat engine : Rework AccessKey to avoid keystone user lookup * Make sure heat uses its own control\_exchange * Make default encryption key long enough for unit tests * Update the README with more current links * Add VPC resource implementation * Update .gitreview for org move * Use pkgutil to load cloudinit data * Use module names as logger names * Add a plugin directory for Resources * Automatically register engine options * Move db crypto code out of the engine * Create a new heat.rpc package * Move template-format parsing code into common * Move the identifier module into heat.common * Remove gen(erate)\_uuid from heat.common.utils * Remove is\_uuid() from HeatIdentifier class * Use uuidutils from openstack-common * Add uuidutils from openstack-common * Update openstack-common * Remove heat-metadata service * heat engine : Convert WaitConditionHandle to pre-signed URLs * heat engine : subclass keystone client to encapsulate common code * Process engine config before initialisation * heat api : add waitcondition to cfn api * Add documentation on plugin\_loader module * Lookup the class for an Instance in Autoscaling * Refactor autoscaling Instance creation * Load resources dynamically * Add a module for dynamically loading plugins * Distribute resource mapping to individual modules * Move the resource module out of the resources package * Remove YAML template trailing spaces * Convert some existing templates to YAML format * For Fn::Join join strings in resolve\_static\_data * Set default empty dicts for missing sections * Don't assume parsed JSON in REST API * cfn-json2yaml file-mode bugfix * pip-requires fix boto version * Utility to convert JSON template files to YAML * For tests, Parse all templates with parse\_to\_template * Parse all templates with format.parse\_to\_template * Module for converting JSON to YAML, and parsing both * Add packages and versions in response to grizzly-1 * HAProxy example had incorrect descriptions * ReST API: Add Events * CFN API: Rename ID formatting method * RPC API: Return an identifier for events * Use the new class for database access to Events * Add a class to represent Events * Add a method for querying a resource's type * Add identifiers for Events * Improve the identifier class for Resources * Get db session from the context * Use a real context for tests * heat engine retrieve credentials every periodic task interval * heat engine Add admin flag to dbapi stack\_get * Tool to download all Amazon example templates * r1 not defined * Remove unused statements/local assignments * heat engine allow WatchRule load() from DB object * heat engine move to per-stack periodic watch threads * add watch\_rule\_get\_all\_by\_stack dbapi call * Make CloudWatchAlarm names unique per-tenant * WatchRule refer to stack by id not name * Provide more information with template URL error * Add missing logging imports * Use jsonutils in ec2token * Remove unused imports * Fix ppetit.template parameter type Integer -> Number * RPC API: Get rid of event\_create call * ReST API: Add a convenience redirect for resources * ReST API: Add API for Resources * RPC API: Include less detail in resource list * Refactor unit tests for ReST API * ReST API: Move remote error handler to utils module * RPC API: Return a resource identifier * Add identifiers for resources * ReST API: Refactor routes * heat engine : remove now-unused metadata rpc calls * heat workaround for HA/Autoscaling regression * heat dbapi rename stack\_get\_by\_tenant * Allow stack.owner\_id to store a uuid * ReST API: Split utilities into a separate module * Actually validate properties of resources * Getting Started: Fix formatting errors * heat templates : align autoscaling alarm descriptions with values * heat engine : create boto config via instance userdata * heat engine : append watch server url to instance userdata * Don't use OpenStack plugin in tox * Always filter by tenant\_id in stack\_get\_by\_name * Align pip-requires versions with nova * heat align openstack/common with latest oslo-incubator * Modify identify\_stack to check for uuid * heat engine : Don't wait() for killed greenthreads * Pass a Stack entity to Stack.load() * Switch to UUID for the Stack primary key * Add a list\_stacks RPC call * Rename instance\_id to resource\_id * Move client connection out of resources.py * Fix FnGetAtt id test * Fix cloud-init runcmd to be exec friendly * Replace KeyStoneCreds params with X-Auth headers * Quantum template to demonstrate floatingip * Make Boolean property a bool type. Since json has a native bool type, allow bool or string as the property value. Validating a Boolean type value will now convert a string to a bool * A template which associates an instance with a Quantum port * Type is now mandatory. Boolean now exists * Handle list properties that do not contain objects * Remove the CheckedDict class * Use new Parameters class in unit test * Get rid of Resource.calculate\_properties() * Add a Properties implementation with lazy loading * Avoid modifying the Properties of a Load Balancer * Fix schemata errors for properties * Add a set of native quantum resource types * Recursively replace all : with . in Output keys * Rename heat client to heat-cfn * Update openstack-common, add network\_utils * Use openstack-common service.py * heat templates : Align AutoScaling template with cfntools * Add service.py from openstack-common * Update openstack-common * Implement NoEcho for parameters * Use new Parameters class for validation * Separate Parameters implementation from Properties * Clean up hacks for parameter passing in unit tests * Put the Template class in its own file * heat-keystone-setup : fix error on folsom first-install * heat engine : add heat\_waitcondition\_server\_url * heat metadata : Remove all non-waitcondition related logic * heat metadata : remove metadata\_url logic * Format stack\_identity as id \*and\* links * Move resources into a separate sub-package * Move Timestamp code to separate file * heat-keystone-setup : change role to heat\_stack\_user * heat engine : add template-defined users to keystone role * heat engine : Allow instance users to view their own details * heat-keystone-setup add instance role * heat-keystone-setup workaround keystone arg syntax * heat-keystone-setup workaround keystone output reordering * heat tests : StackBoto fix \_check\_\*\_result functions * heat tests : refactor stackid check into utils.Stack * heat tests : fix CFN\_API\_Actions test fix state reason * heat tests : fix CFN\_API\_Actions test stackid regex * heat engine : kill running greenthreads on stack\_delete * heat engine : Store all resource states to DB * Bump version to v8 * heat engine : Make Resource::swift handle auth\_token * Cleanup runcmd to exit 0 and not use 'type' * ReST API: Add a keystone endpoint * Handle %(tenant\_id)s in endpoints when updating * Change the service user to match devstack * Pass the correct tenant for the service user * Start and enable libvirtd * heat engine : Resource.keystone handle auth\_token * heat engine : Rework auth.authenticate * heat engine : remove unused EC2 style auth from engine * ReST API: Format output as JSON * Do not assume host has selinux utils installed * Identify stacks using tenant UUIDs * Make default distribution U10 for deb template * heat engine : Make wait-condition poll interval better * Handle upgrades in heat-keystone-setup * Rename CloudFormation service to heat-cfn * heat tests : Remove utils.Stack getter methods * Use password in preference to token if both supplied * heat tests : add ValidateTemplate test to CFN\_API\_Actions\_Boto test * heat tests : Add ValidateTemplate test to CFN\_API\_Actions test * heat API : ValidateTemplate fix response format * heat : heat cli pep cleanups * heat : boto\_client\_cloudwatch allow credentials override * Catch SSH Disconnection errors in functional tests * heat : add template-swift-url option to client * heat cli: encapsulate template arg-parsing * heat engine : remove unused validate\_template params * Obey the passed in distro value in HAProxy template * Use --script option to parted in templates * Reduce timeout periods in functional tests * ReST API: Add unit tests * heat : Getting started updates for Cloudwatch * Getting Started: Fix IP address determination on F17 * heat engine : Move watch logic into WatchRule class * ReST API: Report template validation errors * ReST API: Return appropriate error codes * ReST API: Separate out code to fetch template from a URL * heat : db API add watch\_rule\_get\_by\_name * heat : db API add watch\_rule\_update DB API action * heat : Remove cloudwatch functionalty from metadata server * heat templates : Add boto config to HA templates * Unit test for load balancer resource type * heat : Add missing calculate\_properties to user resource * heat engine : Avoid printing credentials to logfile * heat engine : only attempt stack update from valid states * ReST API: Add some simple API documentation * ReST API: Use JSON documents for data input * ReST API: Refactor handling of input data * ReST API: Fix template validation * heat : workaround engine error with version code * Change endpoint service type from orchestration to cloudformation * Fix versioning code * Remove unnecessary keystone scripts * Fix bugs in ReST API stack creation * Allow authentication to Nova with a Keystone token * heat engine : workaround lack of no\_cache on essex * Avoid create\_stack RPC call timing out on precise * Fix hash-bang directive in nova\_create\_flavors.sh * import gettext to fix db migration execution * Make sure to remove python-glanceclient too * heat tests : add functional test for UpdateStack * heat tests : functional utils support for UpdateStack * heat tests : Add new boto API test * Add the beginnings of an OpenStack ReST API * heat tests : API test fixup for ResourceProperties * Allow separate versioning of each API * heat API : return ResourceProperties as JSON * Move CloudFormation API to heat.api.cfn package * Make the keystone service type configurable * Unit test for DBInstance resource * Add a Folsom specific heat-keystone-setup binary to bin * heat engine : format stack outputs for updated stacks * heat : fix glanceclient deprecation warning * Fix test\_waitcondition.py race by converting to mox * Rename heat/cloudformations.py to heat/cloudformation.py * Trivial unit test changes * Switch to in-memory sqlite for unit tests; 1500% speed improvement * Move test skipping on import failure from package to function * Get rid of gratuitous params in RPC API * Unit test coverage for user resources, plus some user fixes * Change file to executable to get rid of rpmlint warning * Version 6 about to be announced for release, time for v7 * heat : HA functional test missing import * heat tests : convert HA test to exec\_sudo\_command * heat tests : Fixup IHA functional test * heat tests : functional tests add exec\_sudo\_command * Don't fail to delete if VolumeAttachment not found * Improve debugging ability for functional tests * Fix typo in test file name * heat tests : fixup test\_CFN\_API\_Actions.py * Stop deprecation warning when creating resources directly * Unit tests for volumes and attachments * Update another embedded template to F17 * Changed embedded loadbalancer template to use F17 * heat API : fix wrongly named key for stack events * heat : ensure DB user creds aren't written decrypted * Fix scoping issue * Make instance match expected name * Look for instance name that matches template * Provide full URL address in AutoScalingMultiAZSample.template * Tag functional tests with the JEOS required * Make automated scripts quieter * Implement test\_AutoScalingMultiAZSample.py * heat engine : loadbalancer add missing calculate\_properties() * heat engine : convert stack resource to physical\_resource\_name * Return exit code rom run\_tests.sh * Avoid test runner crash when we have no tty * Unit tests for autoscaling resources. 100% coverage! * heat tests : New wordpress IHA functional test * Tests EIP resource creation and association * Allow linux distribution to be passed to multiaz template for test case * Fix backtrace when using loadbalancer * Fix spelling errors in loadbalancer which resulted in template not launching * Remove unnecesssary nova constructor calls in each manager API call path * Fix up tags * Fix test\_WordPress\_2\_Instances\_With\_EBS.py * Change templates to launch F17 (not F16) by default * heat tests : add HAProxy functional test * heat templates : add LinuxDistribution parameter to HAProxy * heat tests : functional tests allow non-default stackname * Switch to Fedora 17 on guests in Getting Started * heat : Show user parameter values in heat describe * heat tests : expose keyname from Stack object * Work around nova-network launch issue harder * Use stack\_identity where it has changed from stack\_name * Unit test S3 Bucket resource with associated fixes * Use openstack.common.timeutils.isotime() * Work around nova-network launch issue * Change rpc cleanup to occur before killing engine thread * Add new OpenShift test * heat tests : new functional test for CFN API * heat tests : Update test\_WordPress\_With\_RDS * heat tests : remove duplicate cleanup Wordpress\_Boto * heat tests : bugfix utils cleanup function * heat tests : bugfix utils cleanup * tests: Wait for delete completion * tests: Clean up after a failed functional test * tests: Make StackBoto inherit more from Stack * tests: Fail promptly on stack creation failure * Add Wordpress\_2\_Instances testcase * Add test\_WordPress\_2\_Instances\_With\_EBS\_EIP.py * heat tests : functional test utils add response\_xml\_item * Fix timing issue in starting openstack-network * There is no spoon take 2 * There is no spoon * heat : Revert "Make sure the properties are defined in all cases." * heat : bugfix convert User resource to physical\_resource\_name() * creating instances failed as a result of regression in last commit * Update openstack-common * Make physical resource names unique based upon stack name * Change Stack to support user defined parameter * Add 2 instance with EBS test * Change VerifyClass to have a generic verify\_url method * Update WordPress\_Compsed\_Instances to new test infrastructure * Make S3 import except on ImportError rather then all exceptions * Make S3 optional since swiftclient is not available in all distributions * heat : test utils, extract ec2 credentials from keystone * heat : allow boto\_client to accept credentials * heat : move boto.cfg to correct location * heat : comment credentials in template boto.cfg * heat tests : add new Boto wordpress functional test * heat tests : functional test utils add StackBoto class * Implement the AWS::S3::Bucket resource type * Update documentation on configuring metadata server * Handle verification errors in create/update in cfn API * heat tools : nova\_create\_flavors.sh additional retry logic * heat tools : add ephemeral disk for all flavors * heat tools : check services running after openstack install * Rework functional test case infrasatructure * Add a string representation for identifiers * Add unit tests for EngineManager create/update/delete\_stack * Fix update\_stack call in EngineManager * Reorganise etc directory for easier installation * Delete unused heat-engine-paste.ini * Make sure the properties are defined in all cases * Add test case for WordPress\_With\_LB.template * Add a Wordpress+MySQL composed instance functional test case * Add EBS test * heat tests : new wordpress EBS\_EIP functional test * Forgot commas, doh! * More EBS fixes * Rename heat-api to heat-api-cfn * heat templates : EBS templates, attach volume to vdc * heat tests : bugfix FuncUtils check StackId not StackName * heat templates : Add default LinuxDistribution parameter * Fix identify\_stack call * Modify to use systemctl and move func\_utils outside of setUp * Add a newline to user data injection * Fix pep8 warning * Support lookup of stacks by name or ARN * Add an identify\_stack RPC call * Report StackId in ARN format * Create a unique identifier for stacks * Use assertEqual() instead of assert\_() * heat tests : add functional test for Wordpress RDS * heat tests : convert functional test to class * heat tests : update WordPress\_Single\_Instance\_With\_EIP * heat tests : convert functional test to testcase class * heat tests : FuncUtils use heat\_client in create\_stack * heat tests : FuncUtils cleanup use heat\_client * Switch to keystone service\_type=orchestration * heat tests : test\_WordPress\_Single\_Instance.py update * heat tests : Add verify\_wordpress helper function * heat tests : FuncUtils add get\_stack\_output function * Fix support for eventlet 0.9.16 * heat tools : add qpid-cpp-server-daemon to tools/openstack * Add functional test for HA template * heat : run\_tests.sh allow easier test selection * heat cli : initial heat-watch cloudwatch API client * heat API : Implement initial CloudWatch API * heat engine : Add set\_watch\_state engine RPC action * heat engine : Expose valid watch states via engine.api * Add new functional test for WordPress\_Single\_Instance\_With\_EIP * Connect to heat client, add accessor method, and fix ip check * Add new methods to get access to nova/glance clients * Make sure the functional test always cleans up * heat API : add get\_param\_value to API utils * Add new arguments to run\_tests * Refactor reformat\_dict\_keys() * Refactor extract\_param\_pairs() * Refactor extract\_param\_list() * Add link to RPM repository in getting started * heat API : Add api.aws.utils.extract\_param\_list * heat tests : rename test\_stacks * heat tests : add test for new manager show\_watch\_metric method * heat tests : add tests for new manager show\_watch method * heat engine : bugfix show\_watch, fix single-watch mode * heat tests : add new engine rpcapi unit tests * Add test-requires in RPM package list form * Set the max url length in eventlet 0.9.17 * Functional test improvements * Fix the Timeout/Interval check in the LB * Fix the way self.properties is checked for a value * Make RDS (mysql) wait until setup is finished before proceeding * Put selinux in permissive mode by default via a runcmd in cloudconfig * heat API : make extract\_user\_params more generic * heat engine : Add show\_watch\_metric RPC action * heat engine : add show\_watch RPC method * Split functional test into standalone and utility class * heat DB : make watch\_data\_get\_all work with no watch ID * heat API : Add HeatAPINotImplementedError exception * heat API : Move aws api common code into aws/utils.py * heat API : move remote\_error to common exception.py * heat API : move aws common files from api/v1 to api/aws * heat engine : Fix engine.api variable shadowing * heat tools : glance-jeos-add-from-github avoid duplicates * heat tools : glance-jeos-add-from-github scrape image names * Inject command into userdata * Add a tool to register prebuilt JEOS images into glance from github * heat template : Align two Openshift template varieties * Use cached keystoneclient * heat cli : Workaround inconsistent boto return type * heat cli : Rework to separate cli tool from client-API wrappers * heat cli : remove some duplication from parameter formatting * heat cli : remove unused paths from heat cli tool * Update Getting started to match change to heat-jeos * heat api : bugfix, save config correctly in EC2Token * heat templates : Add openshift template for pre-built jeos * Getting Started: Add configuration info for the metadata server * Getting Started: Use install.sh script * Make template params resolution standalone * change amd64 reference to x86\_64 to match latest cfntools * Remove crankcase patch since fix was merged upstream * Add calculate\_properties() to update() and restart\_resource() * Force rpm to retry indefinately during crankcase build * Log all startup operations to /var/log/heat-startup.log * Port existing rpc calls to use the new RPC client API * Implements a client side engine RPC API * heat templates : update Openshift template to add node instance * heat : Make instance flavors consistent * heat engine : raise appropriate error for incorrect stack\_name * heat API : Return correct AWS error response for invalid parameter * Bump to v6 * heat engine : Avoid writing to class-scope parameters schema * Update getting started with credential crypto * Add tools directory to python package * Don't use uuidgen in install.sh * Add encryption support for authentication information in db * Change to per-tenant stacks * Make a template that demonstrates instance monitoring and restarting * Call calulate\_properties() before calling FnGetAtt() * Log the error when a resouce fails to delete * heat API : Add more tests covering error paths * delete duplicate validate() method * loadbalancer: implement Interval and Timeout * autoscaling: implement DesiredCapacity * Update GettingStarted guide to use correct state name * Get rid of PyCrypto dependency * heat API : Add more unit tests * Add AWS::RDS::DBInstance * autoscaling: don't kill all instances when scaling down * make the autoscaling template easier to debug * Return the name from the autoscaling group not the instance * Add python-psutil and fix cfn-push-stats options * Add an EC2Token\_filter\_factory and use it as the default paste filter * heat api/engine : Implement UpdateStack functionality * heat db : fix per-object delete * Combined autoscaling and loadbalancer * Optimize filter context * convert to float instead of int in the watch rule * Allow nested stacks to be retrieved by name * Use eventlet's wsgi again * Don't require user params on template validation * tools: erase openstack-utils only after using it * Update openstack-common * Erase openstack-utils when uninstalling OpenStack * heat : update config files with new rpc backend * Import openstack.common.rpc * Use global cfg.CONF instead of config classes * Get rid of eval() in authentication code * heat engine/API : Internal API rework * Account for XML output in Getting Started script * Fix directory changes in Getting Started script * Allow non-interactive installation of OpenStack * Document Metadata server in Getting Started guide * Import openstack.common.log and use inside heat infrastructure * Update openstack-common in prep for pulling in common.rpc * Set the stack updated time through the Timestamp * Eliminate DB access from the engine API * Make timestamps available in Stack/Resource objects * heat cli : Manpage updates * heat engine : fix create\_stack response format * heat API : Add missing StackId prefixes * heat engine : move StackId formatting into API * Block on instance delete until delete operation completes * heat engine : Store stack timeout in database * Display better message on Keystone failure * Speed up metadata server registration * Fix the WordPress puppet template syntax * Optimise DB lookups by ID * Raise the correct error when a stack is not found * Access Resource metadata through the new attribute * Add a helper class for metadata * Add unit tests for metadata read/write in heat-engine API * Avoid unneccesary template parsing * Allow partial template parsing * Rename resource\_id to resource\_name in metadata API * Report errors from nested stacks * Speed up engine manager unit tests * Update JEOS example in Getting Started * heat cli : Align resource-list-details usage with other commands * heat API: bugfix to XMLResponseSerializer * heat engine: raise appropriate error on bad stack name * Add DB refresh/expire on specific parameters * Allow Status(Reason) access through Stack/Resource objects * Rename test\_resources to test\_instance * heat API : Return auth errors in AWS format * heat : heat-boto remove boto.cfg reading * Separate out formatting for Engine API from manager * Add new assertions about event unit tests * Add basic autoscaling * Add NovaSchedulerHints and correct the implementation of Tags * heat tools : openstack script don't create duplicate pv's * heat tools : openstack script add restart option * heat tools : whitespace cleanup in tools/openstack * heat tests : Add missing headers to tests * heat API : cleanup docstrings * Add monitoring to the loadbalancer * Add an OpenShift template * Pass Tags into scheduler\_hints * heat tools : heat-db-drop prompt for missing password * heat API : Convert API to use HeatAPIException subclasses * heat API : Implement API specific exceptions * heat : add heat-boto test client * Add more unit tests for the engine API * Store the context in the resources * Add Metadata to detailed Resource output * Use a consistent stack ID * Make Stacks the owners of their own DB representation * Don't store the metadata server address in the Stack * Delete user creds from DB when no longer required * Remove parsed template from database * Make LoadBalancer a subclass of a nested stack * Use unittest assert\*() methods instead of assert keyword * Switch .gitreview to use OpenStack * Add the loadbalancer resource * Add the Fn::GetAZs() intrinsic function * Teach CheckedSchema to do nested schemas * heat API : Add missing Response wrappers * heat API : Make CreateStack work with boto * Add unit tests for timeout extraction * heat API : DescribeStacks return all when no stack name specified * Fix typo in stack creation code * Change oz rpm install to use yum * heat engine : Return timestamps formatted by heat\_utils.strtime * Clean up pip-requires for stackforge * We don't need to be installable via PIP so remove build and install deps * Don't go fishing in the stack for the KeyName * Tidy up create timeout code * Get rid of \_wrap\_db\_error() * Bump to v5 * Store the user parameters in the stack table * heat GettingStarted guide, add oz install instructions * Add nested templates that implement a simple proxy/loadbalancer * Pass the stack\_id into the resource\_metadata\_update * Do not remove qpid-cpp-server as it is part of openstack erase * Few small fixes for getting started * Remove --root=/ in install script * Add keystone create script for devstack * heat API : Align DescribeStacks response with AWS docs * heat API : Escape JSON TemplateBody XML serialization * Add uninstall script for Heat * Factor out authenticate method for engine * Fix metadata startup * Change install.sh to work on fresh install * Fix path to cloudinit directory * Ignore the unimplemented properties of IAM::User * Don't use json.dumps() on the output of get\_template * Fix EIP template * Remove service name from nova() def * heat API : Add support for ContentType=JSON query parameter * Fix Stack initialisation * heat templates : Cleanup README and template whitespace * Fix the wait condition's reading of the metadata * Fix a typo (from the commit to use state instead of parsed\_template) * Use the correct resource name * Make the describe-resource API calls user-aware * DB: add stack status & reason, resource metadata * Use the resource.state\_description * Don't remove resources from the DB during HA restart * Make the saving cfn-signaling more reliable * Remove duplicate setup\_logging() * Work around keystone strangeness (error deleting user) * Fix db exception description * Fix the metadata rpc functions * heat API : Align response StackId with AWS spec * Add more per-user stack support (2) * Add example templates for nested stacks * Add execute bits to executable scripts manage.py and runner.py * Fix DB calls in Resource API * Add describe resource API calls * heat api/engine : Reworked approach to aligning with AWS date format * heat API : Align time format with AWS spec * Lengthen the timeout of the WaitCondition in the HA template * Change create\_watch\_data from POST to PUT * Get the context from the db not the context of the guest tool * Implement Nested Stacks * Move parsing of parameters out of template parser * Get stacks from the DB by either name or id * Lock to pep 1.1 * Fix latest DB migration script * Raise NotFound exceptions from database * Tidy up Resource creation and deletion * Do proper dependency calculations * heat manager : rename dict keys to align with AWS API * Add a better error message * Add a user creds database table and associate stacks with username * Fix the metadata server auth (KeystoneCreds only sent from heat) * Fix the error reporting * Add manpage for heat-metadata * heat API : return response body as XML not JSON * Add heat-db-setup.1 manual page * Pass Full Credentials to Engine * Implement the user/access keys using keystone * Allow an already deleted watch to not fail the stack.delete() * Delete redundant escalation\_policy (rather use instance.restarter) * Make sure create happens if a resource has been deleted * Make sure the 'nova\_instance' is refreshed when ever the state changes * When restarting a resource make sure that the parsed\_template\_id is set * Fix heat-jeos installation in Getting Started * Make heat-keystone-service a tad more robust * Add install.sh * Add EstimateTemplateCost API * Add the GetTemplate API * Remove cfntools and jeos * Convert getLogger(\_\_file\_\_) into getLogger('heat...') * Add a Timeout (-t) to the heat options (and make -f for templates) * Fix the setup of daemon config * Update openstack-common * Improve parser readability + add unit tests * Fix parsing of metadata * Rely on instance\_id been set to None * wait\_condition: use properties not t['Properties'] * Fix cloudwatch delete * Fix restart\_resource() * Pass the context to the db calls * add user auth to ha template * Make sure the resource exists before trying to update it * Fix the conversion from instance to resource name * Restructure watchrules to make them more testable * Add missing properties to cloud watch * Change command interpreter to bash * Add qpid-cpp-server to the openstack setup script * Teach heat-api about the bind\_host * Refactor template resolution * U10 wordpress template * Fix new pep8 warnings * Fix the Getting Started guide for the new setup.py * Refactor Resource creation * Clean up imports * Don't use sys.exc\_value * Get list properties working again * Remove \_authenticate() check for metadata calls (temp) * Fix the HA template (sed the username/password) * Fix apt-get install * Remove python 2.7ism * Compress qcow2 files to take up less disk space * Install argparse and update the U10 package cache * Fix auth failed exception handler * Set stack's \`updated\_at\` time * Add instance restarter * Add a name to the checkeddict to improve the error messages * Authentication Overhaul * Changed SecurityGroups property type to TuplesList * Change the policies for User to TuplesList * Add missing flags to enable working with RabbitMQ * cloudwatch: set HA template to send watch data * Add the basic cloudwatch feature * Add missing "properties\_schema" to WaitConditionHandle * Fix jeos\_path when not intalled as an egg * Allow login to U10 jeos launched from heat * Changes to checkeddict for tuples and required * Make i386 cfntools jeos work * Add U10 JEOS support to heat jeos\_create * Validate all resource properties * Add functional test to verify jeos and stack ops * Fixing variable name for debug message * using the calculated path for the template tests * Update resource statuses in the database * Fix deletion of security groups * Only run cfn-init once * Use the new CheckedDict for Parameters * Add some better checking for parameters and properties * Fixing path lookup to make sure the templates can be found * Adding the AWS::IAM::User and AWS::IAM::AccessKey to the mapping * tools/openstack: Updated to latest openstack F16/F17 tools * Update gitreview for new Stackforge remote * Align with project standards * Fedora openstack projects use new tools to setup databases * Add .gitreview for Gerrit * Add an integration test script * Pep8 fixes * Fixing \_decompress to handle bundled and compressed * Handle failures when deleting stacks * Fix problem with updating parsed template in DB * Fix copy-paste errors in template descriptions * Improvements to uninstall script * Refactor some not-particularly-Pythonic code * Delete networks when erasing OpenStack * Adding chaining to CommandRunner * Making PrivateDnsName return the ip address * Adding puppet and puppet master instances * Wait for instance startup in GettingStarted test * api : fix pep8 warning * Allow engine and metadata server start in any order * Making PrivateDnsName return the ip address * Clean up the API routes * Adding puppet and puppet master instances * Clean up the API routes * Make the wait condition behave better when the stack is deleted * heat cli : Add options to bash completion script * heat client : reduce duplication between functions * API and heat-cli rework to align with AWS CloudFormation API * Report errors when resource creation fails * Modify command names for consistency * Updated the version to 4 * Make 'heat help' show a list of commands * Allow the Getting Started script to run non-interactively * Fix pep8 errors * Set cfn-hup to send events to the metadata server * Slim down the getting\_started template * Check for the presence of Metadat before trying to include it the multipart * Add status argument that shows service status for all required services * Kill some pep8 errors in test\_stacks.py * Kill some pep8 errors in engine directory * Kill few pep8 errors * Properly test ref valid against proper input * Use manager to test ref validation * Add test cases to test valid and invalid keys in FindInMap * List stacks tests * Move list\_events into the class * Factor out a start\_wordpress\_stack() * Add event\_list test * Add uninstall script * Add Getting Started guide to repo * Add cfn-get-metadata to the manifest * Fixed problems with starting MySQL in heat-db-setup * Add test\_validate\_ref for invalid and valid inputs * Check for invalid Fn::FindInMap key * Check for invalid Ref keys in validate * TEST: slightly better version with minimal template in place * Add volumeattachment validation * Allowed the database call to return no parsed template * Adding a deepcopy of the template before stack create validation * Add stack delete test, and set stack to DELETE\_COMPLETE when done * Removing stack validation on create * Adding stack create test * Validate invalid mountpoint.device entries * Allow sending events using metadata server * Typo in a logging declaration * Fix stack creation - CREATE\_FAILED issue * Add ability to automate testing with tox * Add option to exclude pep8 examination to run\_test.sh * Add test coverage option to run\_tests.sh * Connect up the waitcondition code to poll the metadata for the signal * Save to parsed template as that is used in the parser * WaitCondition: fix the url to the new metadata server * Add WaitConditions to HA template * Download cfn tools from the master branch * Escape the quotes going into cfn-signal shell command * More peppy fixes.. * Add implementation to cfn-signal * Fix undefined LOG variable in db.session * Remove unused "cloudinit\_path" setup in resources.py * Metadata: Add bind\_host to the config * Register metadata server's entry point with Engine * Remove obsoleted metadata files * Connect metadata server to the engine via RPC * Moving key validation into instance validate * Apparently boto expects / to be list stacks * ValidateTemplate API call framework * Fix the sql in the rails template (didn't work with the mysql in f16) * uncommenting the metadata server attribute so the tests work * Validating the KeyName against nova on stack\_create * Connect cfn utils to the remote server * Fix cfn-get-metadata params and output * Fixed the interpretation of the file extension * Only showing the Outputs when the status of a stack is CREATE\_COMPLETE * Fix unbound error in cfn\_helper * Adding mime\_string to the Instance instance and fixing tests * Fix some indentation and pep errors * Hack the Rails template to work * Add Rails template example * Add dummy cfn-signal * Add WaitConditions * Split the resourses up into seperate files * Handle "sources" in cfn-init * Initial metadata server API * Add very basic support for installing (apt, python & gems) * Add cfn-get-metadata to files section of cfntools tdls * Modified README in tools directory to explain a few more tools * Scoping the session per thread (request) * Oops, meant for website repo * Heat Logo * Skipping the import if its deps aren't installed, use --no-skip if you want to run this * Copied the python-novaclient test code to avoid importing via python path * Adding the metadata.log file * Finish necessary changes related to jeos\_create move * Add skeleton structure for the metadata server * Update heat-api docstring * more pep fixups * Add cfn-get-metadata make all cfn tools more consistent * openstack-common: timeutils and importutils seperated out * openstack-common: update cfg.py * Move jeos\_create into utils so it can be imported * Put Starting Heat API in log file and add logging setup to bin/heat-api * Remove stray print debug message * Quiet down the QPID logging since it isn't helpful and makes logs hard to read * Kill prints and replace with LOG in heat/rpc/\_\_init\_\_.py * Stub out system calls in metadata\_files test * Implement runas for cfn-hup * Add test artifacts to gitignore * Handle cfn-hup non-value parameters * Moving db error wrapping into heat session to avoid a nova import * Add an easier way to update the cfn scripts * Fix up the template - some scripts not right * Fix the cfn logging * Fix userdata mime creation * Fix userdata mime creation * Add a real creds file for the cfn-hup config tests * Re-add the file logging to cfn tools * Make sure AWS::StackName is avaliable * Add cfn-hup config into template * Copy the single inst. wordpress template to With\_HA * removing import of common config because it needs credentials * Adding the nova.exeption import to fix the tree * Add file support to cfn-init * Adding instance delete test * Log when cfn-hup couldn't restart a service * putting python-novaclient back in pip requires * Removing nova from pip requires * Make heat-db-setup generic enough to run on RPM or DEB distributions * Adding the nova module to the pip-requires * removing import of common config because it needs credentials * Adding the nova.exeption import to fix the tree * Use pip package name, not the RPM one * Update virtual-env requires and documentation * Make cfn-hup configuration handling closer to aws * Better error messages for cfn-hup configuration * more work on cfn-hup * Add test case for boolean * Assert the instance auto increment on the id worked * Removing the run\_tests.py, was replaced by heat/testing/runner.py * Changing version scheme to just major * Adding instance creation test * Fix \`to\_boolean\` in cfn\_helper * Try and keep track of the stack status * Added db setup and teardown with sqlite * Adding unit test for instance creation * Adding resource initialization test * Adding instance creation test * Added db setup and teardown with sqlite * Adding unit test for instance creation * Adding resource initialization test * Initial cfn-hup (wip) * Move common cfn code into cfn\_helper.py * Fix more pep8 errors * Update version to v3 * Wordpress 2 instance with EBS and EIP * heat cli : Add bash\_completion.d entry for heat * heat cli: Use python logging module * Fix another print -> logger.warn * resources.py had a bunch of print's in it * Add an exception around EIP fetching * Fix a typo in the command line help * Use v1 / v2 / v3 for version numbers to match tags * Set proper author and mailing list in setup.py * Remove BUILDING.rst since there is no building taking place inside project * Remove rpm spec file and Makefile. Will track packaging in a different repo * Remove tito - likely track this in a different repo * Fix the EIP cleanup * Add documentation for the per command CLI help options * heat, heat-api: Add missing licence to header * Remove rootpw from tdls and add ec2-user to sudoers file * Deleting parsed and raw template when deleting stacks * A little more detail on network create * Fix the test environment * Fix another template attribute in the output section * Use the correct api to get the volume object * Save the resource if complete or failed * Fix the delete of a volume attach when the create partially succeeded * To properly populate the output section * Use the instance\_id for the event "physical\_resource\_id" * Fix the output attribute in single instance wp template * Save the parsed\_template so user parameters are available * Fix the parsed\_template columns (missing created\_at and updated\_at) * Fix the version file (don't import glance's git commit) * Add WordPress\_Single\_Instance\_With\_EBS\_EIP.template * Rename EBS\_Volume to just EBS to pave way for EBS\_EIP * Make WordPress\_Single\_Instance\_With\_EIP.template work * Initialize sec to None to avoid exception in security group * Fix invalid JSON in template * Store all event data in DB * Remove hard-coded paths from DB setup script * Avoid printing exception in db-setup * Handle exception on Ctrl-C * Updated WordPress\_Single\_Instance.template to work properly * Update templates README with list of secure vs insecure templates * Make WordPress\_Single\_Instance\_With\_EBS\_Volume.template functional * remove old experimental code * kill all pep8 errors in parser and resources * Updated templates/README directory to more clearly explain templates * Rename WordPress\_Single\_Instance\_cfntools.template to not have cfntools in name * Rename WordPress\_Single\_Instance.template to have gold in name * Adjust cfn-init -f flag to be implicit * Adjust cfn-init to not use -f option * Adjust cfn-init to not take a parameter in the initialization * Fix bug in path on cfn-init * Fix for issue #75: no more -f in cfn-init * gold plating the WordPress\_2\_Instances template * Wordpress 2 with EBS working * Resolving rpmlint errors and adding man pages * Register security group with launched instances * Fix creation of security group and rules * Fix a heap of pep8 errors * Make an attempt at passing exception messages from engine to cli * Fix 'heat describe' * Add a traceback on exception caught * Add a README to the templates directory to aid in navigation of the templates * Add a tools/heat-db-drop script for fatal error recovery * Make Wordpress\_2\_Instances.template work properly * Check errors better in resolve\_attributes() * Add yum-plugin-fastestmirror on F17-x86\_64 cfntools image * Add yum-plugin-fastestmirror to the cfntools images * Update WordPress\_2\_Instances.template to use cfntools and cfn-init * resources: remove insert\_package\_and\_services * Properly launches a cfntools image with the appropriate userdata mime blob * Correct path to cfninit data * Yet more typos in cfntools template * Fix typo in template * Add a cfn-init call to cfntools * Automatic commit of package [heat] release [0.0.1-1] * Adding instructions on building the project with tito * Removing the PKG-INFO and vcsversion.py from the rpm * Initialized to use tito * Add unit test framework nose and associated helper scripts * Document all methods in the EngineManager class. These ones seem important * Updating the heat spec to pull in cloudinit files and i386 jeos templates * renaming CloudFormations to CloudFormation * Handle errors when listing events * Show stack description when status is unknown * Allow listing of all events * Use security groups in the multi-instance wp template * Fix listing stacks * Fix the stack.delete() by populating the resource id/state from the db * move the db stack delete into parser.py as it is non-blocking * Cleanup db imports (use heat code, don't import nova modules) * Consistently create the db resource entry * Add SecurityGroups to make is easier to use EIP * Eliminate overly-broad exception catching * Improvements to DB setup * Issue #52: Fix error in db-setup script * Start systemd services properly with cfn-init tool * Fix the jeos path when running from installed code * Delete extra white space * Fix 'heat list' when there are no stacks * Make jeos\_create aware of existing disk files and previous glance registrations * Update F17 cfntools image to properly boot for cloudinit * Add ec2-user to F17 x86\_64 tdl * add ec2-user to F16 cfntools image * Update i386 F16 cfntools image to match latest cloudinit features * updated F17 x86\_64 cfntools tdl to new cloudinit model * Install cloudinit specific files that are loaded into the mime userdata * Updated x86\_64 cfntools tdl to work with broken F16 repos and cloud-init * fixing small sed typo * Add elastic IP and userdata to 2-instance template * Fixing the heat events\_list * Move the EIP settings into a different template * Initial ElasticIp work - not quite working * Add newly added tdls to manifest * Add 32-bit tdls for Fedora 16,17 jeos (gold and cfntools) * Fix exception getting events list * Import missing exceptions * Fix setting of admin role in keystone service * Resolving functional conflicts from merge * Adding new files to heat.spec file * Defaulting to the mysql db\_backend, removing anydbm * Making delete stack work * Persisting resources * Made datetime objects JSON compatible by calling their to string functions * Integrating all stack, template, and event calls with database * Fix reporting of RemoteError exceptions from AMQP * Handle missing config file * Fix silly spello * Record the reason for any failures * Make better use of cloud-init * Make the create/delete non-blocking * Fix path to keystonerc * Rename cftools to cfntools in the wordpress single instance template * Put cfn-tools into the cfntool image * Renamed all occurrances of cftools to cfntools to be more consistent * Move cfntools to heat directory so they are accessible by jeos\_create * Add 2-instance Wordpress template without EBS * Try harder to detach the server volume * Don't use the "depends\_on" in resource.start * Cleanup some prints in the resources * Add a 2 instance wordpress example * Improve the ordering of stopping resources * Issue #54: Getting started with cfn-init * Get the volumes working properly * Add documentation for heat jeos\_create function * typo fix in jeos\_create * Fix "heat list" only showing empty list * Add utils & exception from openstack-common * Use local.py from openstack-common * Add F17 cftools TDL * Add F16 cftools tdl * Fix events\_list * Fix describe and delete * Pass the parameters to the parser * Remove some more unused files * Don't need these files anymore. As per the layout in nova compute the manager is handling all the engine api calls * Fix --template-file * Use some evil to get the jeos tdl path * Fix stack\_delete() * stack\_db attributes seem broken. Comment these out for now and the API is generally working * Fix create a bit more * Hook up RPC methods * Pre-bake cftools into an image * Initial CloudFormations dummy files for vm helper tools * Revert "Allow templates specified from local filesystem" * Do mimimum to work with anydb * Add support for the Output section * Add an Outputs section to the template * run dos2unix on the templates * Updating the README to point to the Getting Started Wiki * Adding the sqlalchemy db implmentation * Allow templates specified from local filesystem * Updated openstack script to print a note about the default network * Beginings of Volumes and VolumeAttachments * Update readme with the Keystone service setup * Add a heat database to store templates, state, and events Fixes #39 * Make the "heat delete" command work * Fix a crash in "heat show/list" * Fix keystone creds in parser * Make wordpress template leave mysql+http running, and start/enable them by default * Pass the keystone creds to resource.py so usable from run-parser and heat * temporarily hack out the keystone auth * Updated wordpress single instance template to have quotes in proper place * F16 updates broken- Delete F16 and F17 update repos and don't yum update * Start userdata script after decoding * use << intead of << in Wordpress example * Add FnBase64 encoder, encode user data, and feed to nova userdata * Add installation of cloud-init to the JEOS creation operation * Show how to create a network after using the openstack tools script * Remove errant debugging print from run-parser.py * Update to setup directions * Stack list now communicating end to end. Time to hook some stuff up * Change default exchange to heat-engine from nova. Hook up 'list' though it doesn't work yet * Make create Working with recent glance mysql changes in F16/F17 RPMs * Add mysql db creation for glance * Fix run\_parser.py to work with the db updates * Move simpledb to db/anydbm just so we are using the new API * Fix the service toke and endpoint * Add script to add heat service catalog into keystone * Get simple rpc.call working * Add needed strtime functions from nova * Add missing references * Wait for server to enter the ACTIVE state or ERROR state and send events * Stub out the database access API * s/image/heat in auth code * Copy some glance/common fixes * run\_parser.py creates an instance now * Updated run-parser.py to work well with WordPress template * Updated README with more precise setup directions * Produce proper distro-arch variable for use with launching * Update run-parser to work with proper user parameters as sent through the apis * Security credentials are now passed into heat engine from cli * Fix spelling error dependancies->dependencies * Fix spelling error * Tidy up README.rst * Removing OpenStack LLC copyright * Adding F17 JEOS tdl Issue #25 * Fix some tabbing * Add the ValidateTemplate API * Fix misspelling of Ubuntu so tdl is properly found * Get the heat --parameters to work * Add ami conversion to OpenStack style architectures * Account for missing Properties * Install /var/lib/heat directory * Fix order of parmeters issue * Fix heat jeos\_create F16 x86\_64 litters files * Remove unneeded deps * Fix up some imports so they work. I think this is right now. :) * Add README to tools directory to help point out what files do * Initial work on migrating heat-engine to rpc * Add error checking and help to tool * Add a missing tab * Add code that shows how to create an instance * Consistently use Keystone auth from environment * Begin the change to a python only implementation * Add an experimental ssh monitoring script * Covert AWS instance types into Openstack Flavors * Change run\_parser.py to run t1.micro rather then m1.large * Some glance keystone changes from getting started guide * Updated with latest F17 nova auth fix * install/erase working better * Add a openstack helper install script * Add elastic ip association to parser * A few cleanups and some comments. Nothing major * Use keystone auth environment variables * Improved "test" parser for python orchestration * Record events and retrieve them via "heat events\_list " * tweak the templates so the defaults are actually what we want * Use full distro-arch as name of image registered with glance * Properly handle templates of invalid format * Display error message on invalid template URL * Display message on heat-api and heat-engine startup * Removed the \*.log from the .gitignore so I can add the dummy files * Removing some of the cargo cult copy paste shrapnel * Adding rpm packaging for heat packages * teach jeos\_create about the debug option * Improve the error checking in jeos\_create * Updating template example github link * Minor text edits * Directives to not use variable names that conflict with pdb * Fix a module import failure * Fix README bullets * Fix README headings * Update the README * Start separating the api and the implementation * fix delete params (was treated as body) * Update readme with correct "raw" url for template * Remove erroneous setup operation * Install config files properly * Rename the etc/ files to what they need to be * Pretty up the README * Add etc to the manifest * Add a jeos create operation using oz * Updated README with install directions * Add MANIFEST.in and add a oz tdl for a F16 jeos * Sync cfg from openstack-common * Remove a bunch of unused util code * Add a cape event listener * Catch errors better when creating the stack * Remerge common code with glance * Add config cp to README doc * Don't crash if there is no "AWS::CloudFormation::Init" section * Move the default port number into common.config * Change the default port references to DEFAULT\_PORT * Fix missing paren * Add a call to start cape process * Hook up the update and delete (not quite working) * Add a very rough-and-ready conversion from json to xml for cape * Add support for getting the template via url else we get RequestUriTooLong * Add missing RequestUriTooLong exception * Fix the systemd service section in the template * Add a disto mapping to get the image name * Simplify the template more * Add a simple single instance wordpress template * Remove openstack copy right assignment as we have not done that yet * Add a simple in-memory "db" so we can create/list stacks * Add setup.py and friends * Add simple readme * Fix Parameters * Initial commit (basics copied from glance) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/HACKING.rst0000664000175000017500000000443100000000000016410 0ustar00zuulzuul00000000000000Heat style commandments ======================= - Step 1: Read the OpenStack style commandments https://docs.openstack.org/hacking/ - Step 2: Read on Heat specific commandments -------------------------- None so far Creating unit tests ------------------- For every new feature, unit tests should be created that both test and (implicitly) document the usage of said features. If submitting a patch for a bug that had no unit test, a new passing unit test should be added. If a submitted bug fix does have a unit test, be sure to add a new one that fails without the patch and passes with the patch. For more information on creating unit tests and utilizing the testing infrastructure in OpenStack Heat, please read heat/tests/testing-overview.txt. Running tests ------------- The testing system is based on a combination of tox and stestr. The canonical approach to running tests is to simply run the command ``tox``. This will create virtual environments, populate them with dependencies and run all of the tests that OpenStack CI systems run. Behind the scenes, tox is running ``stestr run``, but is set up such that you can supply any additional stestr arguments that are needed to tox. For example, you can run: ``tox -- --analyze-isolation`` to cause tox to tell stestr to add ``--analyze-isolation`` to its argument list. It is also possible to run the tests inside of a virtual environment you have created, or it is possible that you have all of the dependencies installed locally already. In this case, you can interact with the ``stestr`` command directly. Running ``stestr run`` will run the entire test suite in as many threads as you have CPU cores (this is the default incantation tox uses), number of threads can be adjusted with ``--concurrency N`` argument. ``testr run --serial`` will run tests in serial process. More information about stestr can be found at: http://stestr.readthedocs.io Note that unit tests use a database if available. See ``tools/test-setup.sh`` on how to set up the databases the same way as done in the OpenStack CI systems. Heat Specific Commandments -------------------------- - [HE301] Use LOG.warning() rather than LOG.warn(). - [HE302] Python 3: do not use dict.iteritems. - [HE303] Python 3: do not use dict.iterkeys. - [HE304] Python 3: do not use dict.itervalues. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/LICENSE0000664000175000017500000002363700000000000015630 0ustar00zuulzuul00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.6150374 openstack_heat-24.0.0/PKG-INFO0000644000175000017500000001444500000000000015713 0ustar00zuulzuul00000000000000Metadata-Version: 2.1 Name: openstack-heat Version: 24.0.0 Summary: OpenStack Orchestration Home-page: https://docs.openstack.org/heat/latest/ Author: OpenStack Author-email: openstack-discuss@lists.openstack.org Classifier: Environment :: OpenStack Classifier: Intended Audience :: Information Technology Classifier: Intended Audience :: System Administrators Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Requires-Python: >=3.9 License-File: LICENSE Requires-Dist: pbr>=3.1.1 Requires-Dist: alembic>=1.8.0 Requires-Dist: croniter>=0.3.4 Requires-Dist: cryptography>=2.5 Requires-Dist: eventlet>=0.27.0 Requires-Dist: keystoneauth1>=3.18.0 Requires-Dist: keystonemiddleware>=5.1.0 Requires-Dist: lxml>=4.5.0 Requires-Dist: netaddr>=0.7.18 Requires-Dist: neutron-lib>=1.14.0 Requires-Dist: openstacksdk>=0.28.0 Requires-Dist: oslo.cache>=1.26.0 Requires-Dist: oslo.config>=6.8.0 Requires-Dist: oslo.concurrency>=3.26.0 Requires-Dist: oslo.context>=2.22.0 Requires-Dist: oslo.db>=6.0.0 Requires-Dist: oslo.i18n>=3.20.0 Requires-Dist: oslo.log>=4.3.0 Requires-Dist: oslo.messaging>=14.1.0 Requires-Dist: oslo.middleware>=3.31.0 Requires-Dist: oslo.policy>=4.5.0 Requires-Dist: oslo.reports>=1.18.0 Requires-Dist: oslo.serialization>=2.25.0 Requires-Dist: oslo.service>=1.24.0 Requires-Dist: oslo.upgradecheck>=1.3.0 Requires-Dist: oslo.utils>=4.5.0 Requires-Dist: osprofiler>=1.4.0 Requires-Dist: oslo.versionedobjects>=1.31.2 Requires-Dist: PasteDeploy>=1.5.0 Requires-Dist: aodhclient>=0.9.0 Requires-Dist: python-barbicanclient>=4.5.2 Requires-Dist: python-blazarclient>=1.0.1 Requires-Dist: python-cinderclient>=3.3.0 Requires-Dist: python-designateclient>=2.7.0 Requires-Dist: python-glanceclient>=2.8.0 Requires-Dist: python-heatclient>=1.10.0 Requires-Dist: python-ironicclient>=2.8.0 Requires-Dist: python-keystoneclient>=3.8.0 Requires-Dist: python-magnumclient>=2.3.0 Requires-Dist: python-manilaclient>=1.16.0 Requires-Dist: python-mistralclient>=3.1.0 Requires-Dist: python-monascaclient>=1.12.0 Requires-Dist: python-neutronclient>=7.7.0 Requires-Dist: python-novaclient>=9.1.0 Requires-Dist: python-octaviaclient>=1.8.0 Requires-Dist: python-openstackclient>=3.12.0 Requires-Dist: python-swiftclient>=3.2.0 Requires-Dist: python-troveclient>=2.2.0 Requires-Dist: python-vitrageclient>=2.7.0 Requires-Dist: python-zaqarclient>=1.3.0 Requires-Dist: python-zunclient>=3.4.0 Requires-Dist: PyYAML>=5.1 Requires-Dist: requests>=2.23.0 Requires-Dist: tenacity>=6.1.0 Requires-Dist: tzdata>=2022.4 Requires-Dist: Routes>=2.3.1 Requires-Dist: SQLAlchemy>=1.4.0 Requires-Dist: stevedore>=3.1.0 Requires-Dist: WebOb>=1.7.1 Requires-Dist: yaql>=1.1.3 ======================== Team and repository tags ======================== .. image:: https://governance.openstack.org/tc/badges/heat.svg :target: https://governance.openstack.org/tc/reference/tags/index.html .. Change things from this point on ==== Heat ==== Heat is a service to orchestrate multiple composite cloud applications using templates, through both an OpenStack-native REST API and a CloudFormation-compatible Query API. Why heat? It makes the clouds rise and keeps them there. Getting Started --------------- If you'd like to run from the master branch, you can clone the git repo: git clone https://opendev.org/openstack/heat * Documentation: https://docs.openstack.org/heat/latest * Template samples: https://opendev.org/openstack/heat-templates * Agents: https://opendev.org/openstack/heat-agents * Release Notes: https://docs.openstack.org/releasenotes/heat/ Python client ------------- * Documentation: https://docs.openstack.org/python-heatclient/latest * Source: https://opendev.org/openstack/python-heatclient Report a Story (a bug/blueprint) -------------------------------- If you'd like to report a Story (we used to call a bug/blueprint), you can report it under Report a story in `Heat's StoryBoard `_. If you must report the story under other sub-project of heat, you can find them all in `Heat StoryBoard Group `_. if you encounter any issue. References ---------- * https://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html * https://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/create-stack.html * https://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html * https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=tosca We have integration with ------------------------ * https://opendev.org/openstack/python-novaclient (instance) * https://opendev.org/openstack/python-keystoneclient (auth) * https://opendev.org/openstack/python-swiftclient (object storage) * https://opendev.org/openstack/python-neutronclient (networking) * https://opendev.org/openstack/python-aodhclient (alarming service) * https://opendev.org/openstack/python-cinderclient (block storage) * https://opendev.org/openstack/python-glanceclient (image service) * https://opendev.org/openstack/python-troveclient (database as a Service) * https://opendev.org/openstack/python-barbicanclient (key management service) * https://opendev.org/openstack/python-designateclient (DNS service) * https://opendev.org/openstack/python-magnumclient (container service) * https://opendev.org/openstack/python-manilaclient (shared file system service) * https://opendev.org/openstack/python-mistralclient (workflow service) * https://opendev.org/openstack/python-zaqarclient (messaging service) * https://opendev.org/openstack/python-monascaclient (monitoring service) * https://opendev.org/openstack/python-zunclient (container management service) * https://opendev.org/openstack/python-blazarclient (reservation service) * https://opendev.org/openstack/python-octaviaclient (Load-balancer service) * https://opendev.org/openstack/python-vitrageclient (RCA service) * https://opendev.org/openstack/python-ironicclient (baremetal provisioning service) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/README.rst0000664000175000017500000000645100000000000016305 0ustar00zuulzuul00000000000000======================== Team and repository tags ======================== .. image:: https://governance.openstack.org/tc/badges/heat.svg :target: https://governance.openstack.org/tc/reference/tags/index.html .. Change things from this point on ==== Heat ==== Heat is a service to orchestrate multiple composite cloud applications using templates, through both an OpenStack-native REST API and a CloudFormation-compatible Query API. Why heat? It makes the clouds rise and keeps them there. Getting Started --------------- If you'd like to run from the master branch, you can clone the git repo: git clone https://opendev.org/openstack/heat * Documentation: https://docs.openstack.org/heat/latest * Template samples: https://opendev.org/openstack/heat-templates * Agents: https://opendev.org/openstack/heat-agents * Release Notes: https://docs.openstack.org/releasenotes/heat/ Python client ------------- * Documentation: https://docs.openstack.org/python-heatclient/latest * Source: https://opendev.org/openstack/python-heatclient Report a Story (a bug/blueprint) -------------------------------- If you'd like to report a Story (we used to call a bug/blueprint), you can report it under Report a story in `Heat's StoryBoard `_. If you must report the story under other sub-project of heat, you can find them all in `Heat StoryBoard Group `_. if you encounter any issue. References ---------- * https://docs.amazonwebservices.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html * https://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/create-stack.html * https://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html * https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=tosca We have integration with ------------------------ * https://opendev.org/openstack/python-novaclient (instance) * https://opendev.org/openstack/python-keystoneclient (auth) * https://opendev.org/openstack/python-swiftclient (object storage) * https://opendev.org/openstack/python-neutronclient (networking) * https://opendev.org/openstack/python-aodhclient (alarming service) * https://opendev.org/openstack/python-cinderclient (block storage) * https://opendev.org/openstack/python-glanceclient (image service) * https://opendev.org/openstack/python-troveclient (database as a Service) * https://opendev.org/openstack/python-barbicanclient (key management service) * https://opendev.org/openstack/python-designateclient (DNS service) * https://opendev.org/openstack/python-magnumclient (container service) * https://opendev.org/openstack/python-manilaclient (shared file system service) * https://opendev.org/openstack/python-mistralclient (workflow service) * https://opendev.org/openstack/python-zaqarclient (messaging service) * https://opendev.org/openstack/python-monascaclient (monitoring service) * https://opendev.org/openstack/python-zunclient (container management service) * https://opendev.org/openstack/python-blazarclient (reservation service) * https://opendev.org/openstack/python-octaviaclient (Load-balancer service) * https://opendev.org/openstack/python-vitrageclient (RCA service) * https://opendev.org/openstack/python-ironicclient (baremetal provisioning service) ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.1470356 openstack_heat-24.0.0/api-ref/0000775000175000017500000000000000000000000016133 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.215036 openstack_heat-24.0.0/api-ref/source/0000775000175000017500000000000000000000000017433 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/conf.py0000664000175000017500000001501500000000000020734 0ustar00zuulzuul00000000000000# -*- 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 documentation build config file, copied from: # nova documentation build configuration file, created by # sphinx-quickstart on Sat May 1 15:17:47 2010. # # 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. import os import sys html_theme = 'openstackdocs' html_theme_options = { "sidebar_mode": "toc", } extensions = [ 'os_api_ref', 'openstackdocstheme', ] # 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. sys.path.insert(0, os.path.abspath('../../')) sys.path.insert(0, os.path.abspath('../')) sys.path.insert(0, os.path.abspath('./')) # -- General configuration ---------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. # # source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General information about the project. copyright = '2010-present, OpenStack Foundation' # openstackdocstheme options openstackdocs_repo_name = 'openstack/heat' openstackdocs_use_storyboard = True # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # The reST default role (used for this markup: `text`) to use # for all documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). add_module_names = False # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' # -- Options for man page output ---------------------------------------------- # Grouping the document tree for man pages. # List of tuples 'sourcefile', 'target', 'title', 'Authors name', 'manual' # -- Options for HTML output -------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. # html_theme_path = ["."] # html_theme = '_theme' # 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 themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # 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'] # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_use_modindex = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'heatdoc' # -- Options for LaTeX output ------------------------------------------------- # The paper size ('letter' or 'a4'). # latex_paper_size = 'letter' # The font size ('10pt', '11pt' or '12pt'). # latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass # [howto/manual]). latex_documents = [ ('index', 'Heat.tex', 'OpenStack Orchestration API Documentation', 'OpenStack Foundation', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # Additional stuff for the LaTeX preamble. # latex_preamble = '' # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. # latex_use_modindex = True ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/index.rst0000664000175000017500000000141000000000000021270 0ustar00zuulzuul00000000000000.. Copyright 2010 OpenStack Foundation All Rights Reserved. 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. ========================== Orchestration Service APIs ========================== .. toctree:: :maxdepth: 1 v1/index ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2190359 openstack_heat-24.0.0/api-ref/source/v1/0000775000175000017500000000000000000000000017761 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/build-info.inc0000664000175000017500000000132300000000000022503 0ustar00zuulzuul00000000000000.. -*- rst -*- ========== Build info ========== Show build information ====================== .. rest_method:: GET /v1/{tenant_id}/build_info Shows build information for an Orchestration deployment. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - api: build_api - engine: build_engine Response Example ---------------- .. literalinclude:: samples/build-info-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/events.inc0000664000175000017500000001031400000000000021757 0ustar00zuulzuul00000000000000.. -*- rst -*- ====== Events ====== The orchestration service provides APIs to check the events occurred on a stack or a specific resource in a stack. List stack events ================= .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/events Lists events for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_action: resource_action_query - resource_status: resource_status_query - resource_name: resource_name_query - resource_type: resource_type_query - limit: limit - marker: marker - sort_keys: sort_keys - sort_dir: sort_dir - nested_depth: nested_depth Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - event_time: event_time - id: event_id - links: event_links - logical_resource_id: logical_resource_id - physical_resource_id: physical_resource_id - resource_name: resource_name - resource_status: resource_status - resource_status_reason: resource_status_reason Response Example ---------------- .. literalinclude:: samples/events-list-response.json :language: javascript Find stack events ================= .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/events Finds the canonical URL for the event list of a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 302 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - location: location - code: code - message: message - title: title Response Example ---------------- .. literalinclude:: samples/events-find-response.json :language: javascript List resource events ==================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/events Lists events for a stack resource. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_name: resource_name_url - resource_action: resource_action_query - resource_status: resource_status_query - resource_name: resource_name_query - resource_type: resource_type_query - limit: limit - marker: marker - sort_keys: sort_keys - sort_dir: sort_dir - nested_depth: nested_depth Response Example ---------------- .. literalinclude:: samples/events-list-response.json :language: javascript Show event details ================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/events/{event_id} Shows details for an event. .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_name: resource_name_url - event_id: event_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - event: event - event_time: event_time - id: event_id - links: event_links - logical_resource_id: logical_resource_id - physical_resource_id: physical_resource_id - resource_name: resource_name - resource_properties: resource_properties - resource_status: resource_status - resource_status_reason: resource_status_reason - resource_type: resource_type Response Example ---------------- .. literalinclude:: samples/event-show-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/general-info.inc0000664000175000017500000000066200000000000023026 0ustar00zuulzuul00000000000000.. -*- rst -*- ======================= General API information ======================= Authenticated calls that target a known URI but that use an HTTP method that the implementation does not support return a ``405 Method Not Allowed`` error code. In addition, the HTTP ``OPTIONS`` method is supported for each known URI. In both cases, the ``Allow`` response header indicates the HTTP methods that are supported for the resource. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/index.rst0000664000175000017500000000215400000000000021624 0ustar00zuulzuul00000000000000.. Copyright 2010 OpenStack Foundation All Rights Reserved. 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. :tocdepth: 2 ============================ Orchestration Service API v1 ============================ .. include:: build-info.inc .. include:: general-info.inc .. include:: versions.inc .. include:: stacks.inc .. include:: resources.inc .. include:: stack-outputs.inc .. include:: stack-snapshots.inc .. include:: stack-actions.inc .. include:: events.inc .. include:: stack-templates.inc .. include:: software-config.inc .. include:: resource-types.inc .. include:: services.inc ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/parameters.yaml0000664000175000017500000012354300000000000023020 0ustar00zuulzuul00000000000000# variables in header location: type: string in: header required: true description: | For asynchronous resource operations, the ``location`` header contains a URI that can be checked to track resource status changes. request_id: type: string in: header required: true description: | A unique ID for tracking service request. The request ID associated with the request by default appears in the service logs. # variables in path config_id_url: description: | The UUID of the configuration. in: path required: true type: string deployment_id_url: description: | The UUID of the deployment. in: path required: true type: string deployment_server_id_url: description: | The UUID of the server for which to fetch server configuration metadata. in: path required: true type: string event_id_url: description: | The UUID of the event that is related to the resource in the stack. in: path required: true type: string output_key_url: description: | The key of a stack output. in: path required: true type: string resource_name_or_physical_id_url: description: | The name of a resource in the stack, or the ID of its underlying physical resource. in: path required: true type: string resource_name_url: description: | The name of a resource in the stack. in: path required: true type: string snapshot_id_url: description: | The UUID of the snapshot. in: path required: true type: string stack_id_url: description: | The UUID of the stack. in: path required: true type: string stack_identity: description: | The UUID or the name of a stack. in: path required: true type: string stack_name_url: description: | The name of a stack. in: path required: true type: string template_version_url: description: | The version of the heat template. in: path required: true type: string tenant_id: description: | The UUID of the tenant. A tenant is also known as a project. in: path required: true type: string type_name: description: | The name of a resource type. in: path required: true type: string # variables in query deployment_server_id_query: description: | The UUID of the target server. in: query required: false type: string global_tenant: description: | Set to ``true`` to include stacks from all tenants (projects) in the stack list. Specify policy requirements in the Orchestration ``policy.yaml`` file. in: query required: false default: false type: boolean ignore_errors: description: | List of comma separated error codes to ignore. # TODO(kanagaraj-manickam) add the cross reference to the API to retrieve the # list of error code supported, once its made available in heat. in: query required: false type: string limit: description: | Requests a page size of items. Returns a number of items up to a limit value. Use the ``limit`` parameter to make an initial limited request and use the ID of the last-seen item from the response as the ``marker`` parameter value in a subsequent limited request. in: query required: false type: integer marker: description: | The ID of the last-seen item. Use the ``limit`` parameter to make an initial limited request and use the ID of the last-seen item from the response as the ``marker`` parameter value in a subsequent limited request. in: query required: false type: string nested_depth: description: | Includes resources from nested stacks up to the ``nested_depth`` levels of recursion. in: query required: false default: 0 type: integer not_tags: description: | Lists stacks that do not contain one or more simple string tags. To specify multiple tags, separate the tags with commas. For example, ``tag1,tag2``. The boolean AND expression is used to combine multiple tags. in: query required: false type: string not_tags_any: description: | Lists stacks that do not contain one or more simple string tags. To specify multiple tags, separate the tags with commas. For example, ``tag1,tag2``. The boolean OR expression is used to combine multiple tags. in: query required: false type: string owner_id_query: description: | Filters the stack list by an owner ID, which is the ID of the parent stack of listed stack. Use this filter multiple times to filter by multiple owner IDs. in: query required: false type: string physical_resource_id_query: description: | Filters the resource list by the ID of physical resource represented by a stack resource. Use this filter multiple times to filter by multiple physical resource IDs. in: query required: false type: string resolve_outputs: description: | A boolean indicating whether the outputs section of a stack should be resolved. in: query required: false default: true type: boolean resource_action_query: description: | Stack resource action. Valid resource actions are ``ADOPT``, ``CHECK``, ``CREATE``, ``DELETE``, ``INIT``, ``RESTORE``, ``RESUME``, ``ROLLBACK``, ``SNAPSHOT``, ``SUSPEND``, and ``UPDATE``. in: query required: false type: string resource_id_query: description: | Filters the resource list by the logical ID of stack resources. Use this filter multiple times to filter by multiple resource IDs. in: query required: false type: string resource_name_query: description: | Filters the result list by a resource name. You can use this filter multiple times to filter by multiple resource names. in: query required: false type: string resource_status_query: description: | Stack resource status. Valid resource statuses are ``COMPLETE``, ``FAILED`` and ``IN_PROGRESS``. This can be specified more than once to filter the results by multiple resource statuses. in: query required: false type: string resource_type_query: description: | Stack resource type. Valid resource types include ``OS::Cinder::Volume``, ``OS::Nova::Server``, ``OS::Neutron::Port`` and so on. This parameter can be specified more than once to filter results by multiple resource types. in: query required: false type: string show_deleted: description: | Set to ``true`` to include deleted stacks in the list. in: query required: false default: false type: boolean show_nested: description: | Set to ``true`` to include nested stacks in the list. in: query required: false default: false type: boolean sort_dir: description: | The sort direction of the list. A valid value is ``asc`` (ascending) or ``desc`` (descending). in: query required: false type: string sort_keys: description: | Sorts the result list by keys specified in this parameter. in: query required: false type: string stack_action_query: description: | Filters the stack list by an action. Use this filter multiple times to filter by multiple actions. in: query required: false type: string stack_id_query: description: | Filters the stack list by a stack ID. Use this filter multiple times to filter by multiple IDs. in: query required: false type: string stack_name_query: description: | Filters the stack list by a name. Use this filter multiple times to filter by multiple names. in: query required: false type: string stack_sort_keys: description: | Sorts the stack list by ``stack_name``, ``stack_status``, ``creation_time``, or ``updated_time`` key. in: query required: false type: string stack_status_query: description: | Filters the stack list by a status. Use this filter multiple times to filter by multiple statuses. in: query required: false type: string stack_tenant_query: description: | Filters the stack list by a tenant. Use this filter multiple times to filter by multiple tenants. in: query required: false type: string stack_user_query: description: | Filters the stack list by a user name. Use this filter multiple times to filter by multiple user names. in: query required: false type: string support_status_query: description: | Filters the response by resource types by a support status. Valid support status values are ``UNKNOWN``, ``SUPPORTED``, ``DEPRECATED``, ``UNSUPPORTED``, and ``HIDDEN``. in: query required: false type: string tags_any: description: | Lists stacks that contain one or more simple string tags. To specify multiple tags, separate the tags with commas. For example, ``tag1,tag2``. The boolean OR expression is used to combine multiple tags. in: query required: false type: string tags_query: description: | Lists stacks that contain one or more simple string tags. To specify multiple tags, separate the tags with commas. For example, ``tag1,tag2``. The boolean AND expression is used to combine multiple tags. in: query required: false type: string template_type_query: description: | Specify the resource template type. The valid types are: ``cfn``, ``hot``. in: query required: false default: cfn type: string type_name_query: description: | Filters the response by a resource type name. You can set this value to a regular expression. Use this filter multiple times to filter by multiple names. in: query required: false type: string type_version_query: description: | Filters the list of resource types by heat version. For example, ``2016.1`` or ``5.0.0``. in: query required: false type: string with_attr: description: | Includes detailed resource information for the resource. in: query required: false default: false type: boolean with_count: description: | Set to ``true`` to include a count key in the response. The ``count`` key value is the number of stacks that match the query criteria. in: query required: false default: false type: boolean with_description: description: | Either display resource type's description or not. in: query required: false default: false type: boolean with_detail: description: | Enables detailed resource information for each resource in list of resources. in: query required: false default: false type: boolean # variables in body action: description: | The last action executed on the stack. in: body required: true type: string adopt_stack_data: description: | Existing resources data to adopt a stack. Data returned by abandon stack could be provided as ``adopt_stack_data``. in: body required: true type: object attributes: description: | Key and value pairs that contain resource attributes. in: body required: true type: object binary: description: | The name of the binary executable of the heat engine. in: body required: true type: string build_api: description: | The orchestration API revsion information. in: body required: true type: object build_engine: description: | The orchestration engine revsion information. in: body required: true type: object cancel_update: description: | Specify the ``cancel_update`` action in the request body. in: body required: true type: string cancel_without_rollback: description: | Specify the ``cancel_without_rollback`` action in the request body.. in: body required: true type: string capabilities: description: | List of stack capabilities for stack. in: body required: true type: array check: description: | Specify the ``check`` action in the request body. in: body required: true type: string clear_parameters: description: | A list of parameters, if specified, to be removed from the set of parameters of the current stack. The default values in the template will be used. in: body required: false type: array code: description: | The response code to a resource find request. e.g. ``302 Found``. in: body required: True type: string config: description: | Configuration script or manifest that defines which configuration is performed. in: body required: false type: string config_id: description: | The UUID of the configuration. in: body required: true type: string config_name: description: | The name of the software configuration. in: body required: true type: string converge: description: | Set to ``true`` to force the stack to observe the reality before update. in: body required: false default: false type: boolean created_at: description: | The date and time when the service engine was created. in: body required: true type: string creation_time: description: | The date and time when the resource was created. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm For example, ``2015-08-27T09:49:58-05:00``. The ``±hh:mm`` value, if included, is the time zone as an offset from UTC. in: body required: true type: string deleted_at: description: | The date and time when the service engine was deleted. in: body required: true type: string deletion_time: description: | The date and time when the resource was (soft-) deleted. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm For example, ``2015-08-27T09:49:58-05:00``. The ``±hh:mm`` value, if included, is the time zone as an offset from UTC. in: body required: true type: string deployment_action: description: | The stack action that triggers this deployment resource. in: body required: false type: string deployment_config_id: description: | The UUID of the software configuration resource that runs when applying to the server. in: body required: true type: string deployment_id: description: | The UUID of the software deployment. in: body required: true type: string deployment_metadata: description: | The metadata about a software deployment. in: body required: true type: array deployment_output_values: description: | A dict comprised of the output data from a software deployment. in: body required: true type: object deployment_status: description: | Current status of the deployment. A valid value is ``COMPLETE``, ``IN_PROGRESS``, or ``FAILED``. in: body required: false type: string deployment_status_reason: description: | The reason for the current deployment status. in: body required: false type: string deployment_updated_time: description: | The date and time when the software deployment was updated. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm For example, ``2015-08-27T09:49:58-05:00``. The ``±hh:mm`` value, if included, is the time zone as an offset from UTC. If the ``updated_at`` date and time stamp is not set, its value is ``null``. in: body required: false type: string Description: description: | The description specified in the template. in: body required: true type: string description: description: | The description of the stack resource. in: body required: true type: string disable_rollback: description: | Enables or disables deletion of all stack resources when stack creation fails. Set to ``true`` to keep all resources when stack creation fails. Set to ``false`` to delete all resources when stack creation fails. in: body required: false default: True type: boolean encrypted_param_names: description: | A list of parameter names whose values are encrypted. in: body required: true type: array engine_id: description: | The UUID of the engine service. in: body required: true type: string engine_record_id: description: | The UUID of the heat engine service record. Note that each service engine may have multiple records in the service registry. in: body required: true type: string engine_status: description: | The status of the heat engine. in: body required: true type: string Environment: description: | Environment for the stack, where multiple environment files are provided this will be the merged result. in: body required: false type: object environment: description: | A JSON environment for the stack. in: body required: false type: object environment_files: description: | An ordered list of names for environment files found in the ``files`` dict. in: body required: false type: object event: description: | An map containing the name and values of event properties. in: body required: true type: object event_id: description: | The UUID of the event object. in: body required: true type: string event_links: description: | A list of URLs for the event. Each URL is a JSON object with an ``href`` key indicating the URL and a ``rel`` key indicating its relationship to the event in question. There may be multiple links returned. The ``self`` relationship identifies the URL of the event itself. in: body required: true type: array event_sinks: description: | A list of event sinks. in: body required: true type: array event_time: description: | The date and time when the event was created. The date and time stamp format is `ISO 8601 `_: ``CCYY-MM-DDThh:mm:ss``, for example, ``2015-08-27T09:49:58``. in: body required: true type: string existing: description: A boolean specifying whether the service is about to reuse the existing stack template, parameters and environment. If ``template`` parameter is not provided, the existing template is used. If ``template_files`` is not provided, the existing environment is used. Parameters specified in the ``parameters`` key will patch over the existing values in the current stack. Parameters omitted will keep the existing values. in: body required: false default: false type: boolean existing_patch: description: This parameter can be specified but it will be ignored. When using the ``PATCH`` verb to update a stack,the orchestration service will try reuse the existing stack template, parameters and environment. If ``template`` parameter is not provided, the existing template is used. If ``template_files`` is not provided, the existing environment is used. Parameters specified in the ``parameters`` key will patch over the existing values in the current stack. Parameters omitted will keep the existing values. in: body required: false default: true type: boolean files: description: | Supplies the contents of files referenced in the template or the environment. Stack templates and resource templates can explicitly reference files by using the ``get_file`` intrinsic function. In addition, the ``environment`` parameter can contain implicit references to files. The value is a JSON object, where each key is a relative or absolute URI which serves as the name of a file, and the associated value provides the contents of the file. The following code shows the general structure of this parameter. .. code-block:: none { ... "files": { "fileA.yaml": "Contents of the file", "file:///usr/fileB.template": "Contents of the file", "http://example.com/fileC.template": "Contents of the file" } ... } Additionally, some template authors encode their user data in a local file. The Orchestration client examines the template for the ``get_file`` intrinsic function and adds an entry to the ``files`` map with the path to the file as the name and the file contents as the value. So, a simple example looks like this: .. code-block:: none {    "files": {       "myfile": "#!/bin/bash\necho \"Hello world\" > /root/testfile.txt"    }, ...,    "stack_name": "teststack",    "template": { ...,       "resources": {          "my_server": {             "type": "OS::Nova::Server",             "properties": { ...,                "user_data": {                   "get_file": "myfile"                }             }          }       }    },    "timeout_mins": 60 } Do not use this parameter to provide the content of the template located at the ``template_url`` address. Instead, use the ``template`` parameter to supply the template content as part of the request. in: body required: false type: object files_container: description: | Name of the container in swift that has child templates and environment files. in: body required: false type: string function_description: description: | The textual description about the usage of the template function. in: body required: true type: string functions: description: | The name of a function supported by the specified template version. in: body required: true type: string group: description: | Namespace that groups this software configuration by when it is delivered to a server. This setting might simply define which configuration tool performs the configuration. in: body required: false type: string heat_template_version: description: | The version of the orchestration HOT template. in: body required: true type: string HeatTemplateFormatVersion: description: | The version of the orchestration CFN template. in: body required: true type: string host: description: | The host on which the service engine is or was running. in: body required: true type: string hostname: description: | The name of the host for the service engine. in: body required: true type: string input_values: description: | A dict comprises of input data as key-value pairs. in: body required: false type: object inputs: description: | Schema that represents the inputs that this software configuration expects. in: body required: false type: array links: description: | A list of URLs for the stack. Each URL is a JSON object with an ``href`` key indicating the URL and a ``rel`` key indicating its relationship to the stack in question. There may be multiple links returned. The ``self`` relationship identifies the URL of the stack itself. in: body required: true type: array logical_resource_id: description: | The ID of the logical stack resource. in: body required: true type: string mark_unhealthy: description: | A boolean indicating whether the target resource should be marked as unhealthy. in: body required: true type: boolean message: description: | The message in the response to a resource find request. in: body required: true type: string metadata: description: | The metadata of a resource. in: body required: true type: object notification_topics: description: | List of notification topics for stack. in: body required: true type: array options: description: | Map that contains options that are specific to the configuration management tool that this resource uses. in: body required: false type: string output: description: | An output record for the specified key. in: body required: true type: object output_description: description: | A textual description of a stack output. in: body required: true type: string output_error: description: | The error in a stack output. This key only appears when an output has problem in resolving its value. in: body required: false type: string output_key: description: | The name of a stack output. in: body required: true type: string output_value: description: | The value of a stack output. in: body required: true type: string Outputs: description: | Key and value pairs that contain output data for a CFN template. in: body required: true type: object outputs: description: | Schema that represents the outputs that this software configuration produces. in: body required: false type: array parameter_defaults: description: | A map of parameters and their default values defined for the stack. in: body required: true type: object ParameterGroups: description: | A list of parameter groups. Each group contains a list of parameter names. in: body required: false type: array Parameters: description: | Parameter schema in CFN format. in: body required: true type: object parameters: description: | Supplies arguments for parameters defined in the stack template. The value is a JSON object, where each key is the name of a parameter defined in the template and the associated value is the argument to use for that parameter when instantiating the template. The following code shows the general structure of this parameter. In the example, ``a`` and ``b`` would be the names of two parameters defined in the template. .. code-block:: none { ... "parameters": { "a": "Value", "b": "3" } ... } While the service accepts JSON numbers for parameters with the type ``number`` and JSON objects for parameters with the type ``json``, all parameter values are converted to their string representation for storage in the created Stack. Clients are encouraged to send all parameter values using their string representation for consistency between requests and responses from the Orchestration service. A value must be provided for each template parameter which does not specify a default value. However, this parameter is not allowed to contain JSON properties with names that do not match a parameter defined in the template. The ``files`` parameter maps logical file names to file contents. Both the ``get_file`` intrinsic function and provider template functionality use this mapping. When you want to use a provider template, for example, the Orchestration service adds an entry to the ``files`` map by using: - The URL of the provider template as the name. - The contents of that file as the value. Additionally, some template authors encode their user data in a local file. The Orchestration client examines the template for the ``get_file`` intrinsic function and adds an entry to the ``files`` map with the path to the file as the name and the file contents as the value. So, a simple example looks like this: .. code-block:: none { "files": { "myfile": "#!/bin/bash\necho \"Hello world\" > /root/testfile.txt" }, ..., "stack_name": "teststack", "template": { ..., "resources": { "my_server": { "type": "OS::Nova::Server", "properties": { ..., "user_data": { "get_file": "myfile" } } } } }, "timeout_mins": 60 } in: body required: false type: object parent: description: | The stack ID of the parent stack, if this is a nested stack. in: body required: true type: string physical_resource_id: description: | The ID of the stack physical resource. in: body required: true type: string preview_added: description: | A list of resource objects that will be added if a stack update is performed. in: body required: true type: array preview_deleted: description: | A list of resource objects that will be deleted if a stack update is performed. in: body required: true type: array preview_replaced: description: | A list of resource objects that will be replaced if a stack update is performed. in: body required: true type: array preview_unchanged: description: | A list of resource objects that will remain unchanged if a stack update is performed. in: body required: true type: array preview_updated: description: | A list of resource objects that will have their properties updated in place if a stack update is performed. in: body required: true type: array project_id: description: | The UUID of the project. in: body required: true type: string properties: description: | The properties of the resource. Includes description, type, and so on. in: body required: true type: object report_interval: description: | The polling interval, in seconds. The API reports events at this interval until heat engine creation completes. in: body required: true type: integer required: description: | If set to ``true`` the attribute is required. in: body required: true type: boolean required_by: description: | The list of resources that require this stack resource. in: body required: true type: array resource: description: | Key and value pairs that contain stack resource properties. in: body required: true type: object resource_changes: description: | An map that describes what resources will be added, deleted, replaced, updated or remain unchanged. in: body required: true type: object resource_links: description: | A list of URLs for the resource. Each URL is a JSON object with an ``href`` key indicating the URL and a ``rel`` key indicating its relationship to the resource in question. There may be multiple links returned. The ``self`` relationship identifies the URL of the resource itself. in: body required: true type: array resource_name: description: | The name of the resource. in: body required: true type: string resource_properties: description: | A map containing the properties of the resource associated with the event. in: body required: true type: object resource_registry: description: | A map containing customized resource definitions. This map contains at least a dict of ``resources`` registered for the stack. in: body required: true type: object resource_status: description: | The status of the resource. in: body required: true type: string resource_status_reason: description: | The reason for the current stack resource state. in: body required: true type: string resource_type: description: | The type name of the resource. in: body required: true type: string resource_type_description: description: | The textual description of the resource type. in: body required: true type: string resource_types_advanced: description: | A list of objects each of which provides the resource type name and a textual description about the type. in: body required: true type: array resource_types_simple: description: | A list of resource type names. in: body required: true type: array resource_update_status_reason: description: | The reason for the current stack resource state. in: body required: false default: '' type: string resources: description: | A map of resource names and their properties. in: body required: true type: array Resources: description: | A map containging all resource definitions for the resource template. in: body required: true type: object resources_abandon: description: | The required sources for creating the stack template. in: body required: true type: object resources_list: description: | A list of resource objects. in: body required: true type: array restore_code: description: | HTTP status code for a restore request. Usually ``202 Accepted``. in: body required: true type: string restore_message: description: | The message in the response to a stack restore request. in: body required: true type: string restore_title: description: | The title of the response to a stack restore request. e.g. ``Accepted``. in: body required: true type: string resume: description: | Specify the ``resume`` action in the request body. in: body required: true type: string server_id: description: | The UUID of the compute server to which the configuration applies. in: body required: true type: string services: description: | A list of heat engines. in: body required: true type: array snapshot: description: | Key and value pairs that contain snapshot properties. in: body required: true type: object snapshot_data: description: | The snapshot data. in: body required: true type: object snapshot_id: description: | The UUID of the snapshot. in: body required: true type: string snapshot_name: description: | The name of the snapshot. in: body required: true type: string snapshot_status: description: | The status of the snapshot. in: body required: true type: string snapshot_status_reason: description: | The reason for the current snapshot status. in: body required: true type: string snapshots: description: | A list of snapshots and their properties. in: body required: true type: array software_config: description: | The ``software_config`` object. in: body required: true type: object software_configs: description: | A list of ``software_config`` objects. in: body required: true type: array software_deployment: description: | The ``software_deployment`` object. in: body required: true type: object software_deployments: description: | A list of ``software_deployment`` objects. in: body required: true type: array stack: description: | The ``stack`` object. in: body required: true type: object stack_action: description: | The current action on the stack. in: body required: true type: string stack_disable_rollback: description: | Whether deletion of all stack resources when stack creation fails is enabled. in: body required: true type: boolean stack_environment: description: | A JSON environment for the stack. in: body required: true type: object stack_files: description: | A map containing the name and content of files used by the stack. in: body required: true type: object stack_id: description: | The UUID of the stack. in: body required: true type: string stack_name: description: | A name for the stack. The value must be unique within a project. The name must start with an ASCII letter and can contain ASCII letters, digits, underscores, periods, and hyphens. Specifically, the name must match the ``^[a-zA-Z][a-zA-Z0-9_.-]{0,254}$`` regular expression. When you delete or abandon a stack, its name will not become available for reuse until the deletion completes successfully. in: body required: true type: string stack_name_request: description: | A name for the stack. The value must be unique within a project. The name must start with an ASCII letter and can contain ASCII letters, digits, underscores, periods, and hyphens. Specifically, the name must match the ``^[a-zA-Z][a-zA-Z0-9_.-]{0,254}$`` regular expression. When you delete or abandon a stack, its name will not become available for reuse until the deletion completes successfully. in: body required: true type: string stack_outputs: description: | A list of stack outputs. in: body required: true type: array stack_owner: description: | The owner of the stack. in: body required: true type: string stack_parameters: description: | A group of key-value pairs where each key contains either a user-provided parameter name or a built-in parameter name (e.g. ``OS::project_id``). in: body required: true type: object stack_resources: description: | List of stack resources. in: body required: true type: array stack_stack_user_project_id: description: | The project UUID of the stack user. in: body required: true type: string stack_status: description: | The status of the stack. in: body required: true type: string stack_status_reason: description: | The reason for the current status of the stack. in: body required: true type: string stack_tags: description: | The stack tags. in: body required: true type: array stack_template: description: | The template used to create the stack. in: body required: true type: object stack_timeout_mins: description: | The timeout for stack creation in minutes. in: body required: true type: integer stack_user_project_id: description: | Authentication project ID, which can also perform operations on this deployment. in: body required: false type: string stacks: description: | A list of ``stack`` object. in: body required: true type: array support_status: description: | Information about the current support status of a resource type. in: body required: true type: object suspend: description: | Specify the ``suspend`` action in the request body. in: body required: true type: string tags: description: | One or more simple string tags to associate with the stack. To associate multiple tags with a stack, separate the tags with commas. For example, ``tag1,tag2``. in: body required: false type: string template: description: | The stack template on which to perform the operation. This parameter is always provided as a ``string`` in the JSON request body. The content of the string is a JSON- or YAML-formatted Orchestration template. For example: .. code-block:: none "template": { "heat_template_version": "2013-05-23", ... } This parameter is required only when you omit the ``template_url`` parameter. If you specify both parameters, this value overrides the ``template_url`` parameter value. in: body required: False type: object template_description: description: | The description of the stack template. in: body required: true type: string template_functions: description: | A list of template function descriptors. in: body required: true type: array template_outputs: description: | Key and value pairs that contain output data. in: body required: true type: object template_parameters: description: | Key and value pairs that contain the schemas of parameters acceptable by the template. in: body required: true type: object template_resources: description: | Key and value pairs that contain definition of resources in the template. in: body required: true type: object template_type: description: | The type of the template version which can be ``cfn`` or ``hot``. in: body required: true type: string template_url: description: | A URI to the location containing the stack template on which to perform the operation. See the description of the ``template`` parameter for information about the expected template content located at the URI. This parameter is only required when you omit the ``template`` parameter. If you specify both parameters, this parameter is ignored. in: body required: false type: string template_version: description: | The version string of the template format. in: body required: true type: string template_version_alias: description: | The alias of a template version. For newer template versions supported, the orchestration service is moving away from template versioning using release date (which is hard to remember). Newer versions are named after the OpenStack release code name. For example, ``heat_template_version.newton``. in: body required: true type: array template_versions: description: | A list of template version object each describes the type name and version information for a template version. in: body required: true type: array timeout_mins: description: | The timeout for stack creation in minutes. in: body required: false type: integer title: description: | The title of the response to a resource find request. e.g. ``Found``. in: body required: true type: string topic: description: | The messaging topic of the heat engine. in: body required: true type: string type: description: | The property type. in: body required: true type: string update_show_nested: description: | Set to ``true`` to include nested stacks in the preview result. in: body required: false default: false type: boolean updated_at: description: | The date and time when the service engine was updated. in: body required: true type: string updated_time: description: | The date and time when the object was updated. The date and time stamp format is `ISO 8601 `_: :: CCYY-MM-DDThh:mm:ss±hh:mm For example, ``2015-08-27T09:49:58-05:00``. The ``±hh:mm`` value, if included, is the time zone as an offset from UTC. in: body required: true type: string version_id: type: string in: body required: true description: > A common name for the version in question. Informative only, it has no real semantic meaning. version_status: type: string in: body required: true description: | The status of this API version. This can be one of: - ``CURRENT``: this is the preferred version of the API to use - ``SUPPORTED``: this is an older, but still supported version of the API - ``DEPRECATED``: a deprecated version of the API that is slated for removal versions: description: | A list of all orchestration API versions. Each object in the list provides information about a supported API version such as ``id``, ``status`` and ``links``, among other fields. in: body required: true type: array ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/resource-types.inc0000664000175000017500000001106100000000000023444 0ustar00zuulzuul00000000000000.. -*- rst -*- ============== Resource Types ============== List resource types =================== .. rest_method:: GET /v1/{tenant_id}/resource_types Lists all supported template resource types. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - name: type_name_query - support_status: support_status_query - version: type_version_query - with_description: with_description Response Parameters ------------------- Note that the format of the response from this API varies when different query parameters are specified. The default response has the following format: .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - resource_types: resource_types_simple When ``with_description`` is specified, the response has the following format: .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - resource_types: resource_types_advanced - resource_type: resource_type - description: resource_type_description Response Example ---------------- The following is an example of the simple response: .. literalinclude:: samples/resource-types-list-response.json :language: javascript The following is an example of the response when ``with_description`` is specified: .. literalinclude:: samples/resource-types-list-advanced-response.json :language: javascript Show resource type template =========================== .. rest_method:: GET /v1/{tenant_id}/resource_types/{type_name}/template Shows the template representation for a resource type. The returned template contains a single resource type. Each resource property is mapped to a template parameter and each resource attribute is mapped to a template output. You can use these templates as a starting place for creating customized, template-based resources or as examples of using the particular resource in another template. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - type_name: type_name - template_type: template_type_query Response Parameters ------------------- The format of the response varies when ``template_type`` is set to different values. When it is set to ``cfn`` or omitted, the response has the following format: .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - Description: Description - Outputs: Outputs - HeatTemplateFormatVersion: HeatTemplateFormatVersion - Parameters: Parameters - Resources: Resources When the ``template_type`` is explicitly set to ``hot``, the response has the following format: .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - heat_template_version: heat_template_version - description: template_description - outputs: template_outputs - parameters: template_parameters - resources: template_resources Response Example ---------------- The following is a sample of the response when ``template_type`` is set to ``cfn`` or omitted: .. literalinclude:: samples/resource-type-template-response.json :language: javascript The following is a sample of the response when ``template_type`` is explicitly set to ``hot``: .. literalinclude:: samples/resource-type-template-hot-response.json :language: javascript Show resource type schema ========================= .. rest_method:: GET /v1/{tenant_id}/resource_types/{type_name} Shows the interface schema for a resource type. A schema describes the properties that can be set on the resource, their types, constraints, descriptions, and default values. Additionally, the response shows the resource attributes and their descriptions. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - type_name: type_name Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - attributes: attributes - properties: properties - resource_type: resource_type - support_status: support_status Response Example ---------------- .. literalinclude:: samples/resource-schema-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/resources.inc0000664000175000017500000001367500000000000022502 0ustar00zuulzuul00000000000000.. -*- rst -*- =============== Stack resources =============== Find stack resources ==================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_identity}/resources Finds the canonical URL for a resource list of a stack. The canonical URL is returned for only non-deleted stacks. To fetch the resource list for deleted stacks, use the following endpoint: :: /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources Response Codes -------------- .. rest_status_code:: success status.yaml - 302 .. rest_status_code:: error status.yaml - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_identity: stack_identity Response Parameter ------------------ .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - location: location Response Example ---------------- .. literalinclude:: samples/stack-find-response.json :language: javascript List stack resources ==================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources Lists resources in a stack based on filtering parameters like resource name, status, type, action, id and physical_resource_id. These parameters could be used multiple times. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - type: resource_type_query - status: resource_status_query - name: resource_name_query - action: resource_action_query - id: resource_id_query - physical_resource_id: physical_resource_id_query - nested_depth: nested_depth - with_detail: with_detail Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - resources: resources_list - creation_time: creation_time - links: links - logical_resource_id: logical_resource_id - physical_resource_id: physical_resource_id - required_by: required_by - resource_name: resource_name - resource_status: resource_status - resource_status_reason: resource_status_reason - resource_type: resource_type - updated_time: updated_time Response Example ---------------- .. literalinclude:: samples/resources-list-response.json :language: javascript Show resource data ================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name} Shows data for a resource. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_name: resource_name_url - with_attr: with_attr Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - resource: resource - attributes: attributes - creation_time: creation_time - description: description - links: resource_links - logical_resource_id: logical_resource_id - physical_resource_id: physical_resource_id - required_by: required_by - resource_name: resource_name - resource_status: resource_status - resource_status_reason: resource_status_reason - resource_type: resource_type - updated_time: updated_time Response Example ---------------- .. literalinclude:: samples/resource-show-response.json :language: javascript Show resource metadata ====================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/metadata Shows metadata for a resource. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_name: resource_name_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - metadata: metadata Response Example ---------------- .. literalinclude:: samples/resource-metadata-response.json :language: javascript Send a signal to a resource =========================== .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/signal Sends a signal to a resource. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400: resource_signal - 401 - 404 Request Parameters ------------------ The contents of the request body depends on the resource to which you send a signal. .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_name: resource_name_url Response Example ---------------- This operation does not return a response body. Mark a resource as unhealthy ============================ .. rest_method:: PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id} Mark the specified resource in the stack as unhealthy. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resource_name_or_physical_id: resource_name_or_physical_id_url - mark_unhealthy: mark_unhealthy - resource_status_reason: resource_update_status_reason Response Example ---------------- This operation does not return a response body. ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2350361 openstack_heat-24.0.0/api-ref/source/v1/samples/0000775000175000017500000000000000000000000021425 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/build-info-response.json0000664000175000017500000000020700000000000026203 0ustar00zuulzuul00000000000000{ "api": { "revision": "{api_build_revision}" }, "engine": { "revision": "{engine_build_revision}" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/config-create-request.json0000664000175000017500000000150600000000000026516 0ustar00zuulzuul00000000000000{ "inputs": [ { "default": null, "type": "String", "name": "foo", "description": null }, { "default": null, "type": "String", "name": "bar", "description": null } ], "group": "script", "name": "a-config-we5zpvyu7b5o", "outputs": [ { "type": "String", "name": "result", "error_output": false, "description": null } ], "config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2", "options": null } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/config-create-response.json0000664000175000017500000000206400000000000026664 0ustar00zuulzuul00000000000000{ "software_config": { "creation_time": "2015-01-31T15:12:36Z", "inputs": [ { "default": null, "type": "String", "name": "foo", "description": null }, { "default": null, "type": "String", "name": "bar", "description": null } ], "group": "script", "name": "a-config-we5zpvyu7b5o", "outputs": [ { "type": "String", "name": "result", "error_output": false, "description": null } ], "options": null, "config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2", "id": "ddee7aca-aa32-4335-8265-d436b20db4f1" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/config-show-response.json0000664000175000017500000000206400000000000026401 0ustar00zuulzuul00000000000000{ "software_config": { "inputs": [ { "default": null, "type": "String", "name": "foo", "description": null }, { "default": null, "type": "String", "name": "bar", "description": null } ], "group": "script", "name": "a-config-we5zpvyu7b5o", "outputs": [ { "type": "String", "name": "result", "error_output": false, "description": null } ], "creation_time": "2015-01-31T15:12:36Z", "id": "ddee7aca-aa32-4335-8265-d436b20db4f1", "config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2", "options": null } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/configs-list-response.json0000664000175000017500000000032100000000000026551 0ustar00zuulzuul00000000000000{ "software_configs": [{ "group": "script", "name": "a-config-we5zpvyu7b5o", "creation_time": "2015-01-31T15:12:36Z", "id": "ddee7aca-aa32-4335-8265-d436b20db4f1", }] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployment-create-request.json0000664000175000017500000000043100000000000027425 0ustar00zuulzuul00000000000000{ "status": "IN_PROGRESS", "server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd", "stack_user_project_id": "c024bfada67845ddb17d2b0c0be8cd79", "action": "CREATE", "status_reason": "Deploy data available" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployment-create-response.json0000664000175000017500000000074300000000000027601 0ustar00zuulzuul00000000000000{ "software_deployment": { "status": "IN_PROGRESS", "server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd", "output_values": null, "input_values": null, "action": "CREATE", "status_reason": "Deploy data available", "id": "ef422fa5-719a-419e-a10c-72e3a367b0b8", "creation_time": "2015-01-31T15:12:36Z", "updated_time": "2015-01-31T15:18:21Z" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployment-metadata-response.json0000664000175000017500000001342600000000000030120 0ustar00zuulzuul00000000000000{ "metadata": [ { "inputs": [ { "default": null, "type": "String", "name": "foo", "value": "fooooo", "description": null }, { "default": null, "type": "String", "name": "bar", "value": "baaaaa", "description": null }, { "type": "String", "name": "deploy_server_id", "value": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "description": "ID of the server being deployed to" }, { "type": "String", "name": "deploy_action", "value": "CREATE", "description": "Name of the current action being deployed" }, { "type": "String", "name": "deploy_stack_id", "value": "a/9bd57090-8954-48ab-bab9-adf9e1ac70fc", "description": "ID of the stack this deployment belongs to" }, { "type": "String", "name": "deploy_resource_name", "value": "deployment", "description": "Name of this deployment resource in the stack" }, { "type": "String", "name": "deploy_signal_id", "value": "http://192.168.20.103:8000/v1/signal/arn%3Aopenstack%3Aheat%3A%3Ae2a84fbdaeb047ae8da4b503f3b69f1f%3Astacks%2Fa%2F9bd57090-8954-48ab-bab9-adf9e1ac70fc%2Fresources%2Fdeployment?Timestamp=2014-03-19T20%3A30%3A59Z&SignatureMethod=HmacSHA256&AWSAccessKeyId=ca3571413e4a49998d580215517b3685&SignatureVersion=2&Signature=w6Iu%2BNbg86mqwSOUf1GLuKPO7KaD82PiGpL4ig9Q1l4%3D", "description": "ID of signal to use for signalling output values" } ], "group": "script", "name": "a-config-we5zpvyu7b5o", "outputs": [ { "type": "String", "name": "result", "error_output": false, "description": null } ], "options": null, "creation_time": "2015-01-31T15:12:36Z", "updated_time": "2015-01-31T15:18:21Z", "config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2", "id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434" }, { "inputs": [ { "default": null, "type": "String", "name": "foo", "value": "fu", "description": null }, { "default": null, "type": "String", "name": "bar", "value": "barmy", "description": null }, { "type": "String", "name": "deploy_server_id", "value": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "description": "ID of the server being deployed to" }, { "type": "String", "name": "deploy_action", "value": "CREATE", "description": "Name of the current action being deployed" }, { "type": "String", "name": "deploy_stack_id", "value": "a/9bd57090-8954-48ab-bab9-adf9e1ac70fc", "description": "ID of the stack this deployment belongs to" }, { "type": "String", "name": "deploy_resource_name", "value": "other_deployment", "description": "Name of this deployment resource in the stack" }, { "type": "String", "name": "deploy_signal_id", "value": "http://192.168.20.103:8000/v1/signal/arn%3Aopenstack%3Aheat%3A%3Ae2a84fbdaeb047ae8da4b503f3b69f1f%3Astacks%2Fa%2F9bd57090-8954-48ab-bab9-adf9e1ac70fc%2Fresources%2Fother_deployment?Timestamp=2014-03-19T20%3A30%3A59Z&SignatureMethod=HmacSHA256&AWSAccessKeyId=7b761482f8254946bcd3d5ccb36fe939&SignatureVersion=2&Signature=giMfv%2BhrAw6y%2FCMKQIQz2IhO5PkAj5%2BfP5YsL6rul3o%3D", "description": "ID of signal to use for signalling output values" } ], "group": "script", "name": "a-config-we5zpvyu7b5o", "outputs": [ { "type": "String", "name": "result", "error_output": false, "description": null } ], "options": null, "creation_time": "2015-01-31T16:14:13Z", "updated_time": "2015-01-31T16:18:19Z", "config": "#!/bin/sh -x\necho \"Writing to /tmp/$bar\"\necho $foo > /tmp/$bar\necho -n \"The file /tmp/$bar contains `cat /tmp/$bar` for server $deploy_server_id during $deploy_action\" > $heat_outputs_path.result\necho \"Written to /tmp/$bar\"\necho \"Output to stderr\" 1>&2", "id": "8da95794-2ad9-4979-8ae5-739ce314c5cd" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployment-show-response.json0000664000175000017500000000074300000000000027316 0ustar00zuulzuul00000000000000{ "software_deployment": { "status": "IN_PROGRESS", "server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "config_id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434", "output_values": null, "input_values": null, "action": "CREATE", "status_reason": "Deploy data available", "id": "06e87bcc-33a2-4bce-aebd-533e698282d3", "creation_time": "2015-01-31T15:12:36Z", "updated_time": "2015-01-31T15:18:21Z" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployment-update-request.json0000664000175000017500000000113700000000000027450 0ustar00zuulzuul00000000000000{ "status": "COMPLETE", "output_values": { "deploy_stdout": "Writing to /tmp/baaaaa\nWritten to /tmp/baaaaa\n", "deploy_stderr": "+ echo Writing to /tmp/baaaaa\n+ echo fooooo\n+ cat /tmp/baaaaa\n+ echo -n The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE\n+ echo Written to /tmp/baaaaa\n+ echo Output to stderr\nOutput to stderr\n", "deploy_status_code": 0, "result": "The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE" }, "status_reason": "Outputs received" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployment-update-response.json0000664000175000017500000000175500000000000027624 0ustar00zuulzuul00000000000000{ "software_deployment": { "status": "COMPLETE", "server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "config_id": "3d5ec2a8-7004-43b6-a7f6-542bdbe9d434", "output_values": { "deploy_stdout": "Writing to /tmp/baaaaa\nWritten to /tmp/baaaaa\n", "deploy_stderr": "+ echo Writing to /tmp/baaaaa\n+ echo fooooo\n+ cat /tmp/baaaaa\n+ echo -n The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE\n+ echo Written to /tmp/baaaaa\n+ echo Output to stderr\nOutput to stderr\n", "deploy_status_code": 0, "result": "The file /tmp/baaaaa contains fooooo for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE" }, "input_values": null, "action": "CREATE", "status_reason": "Outputs received", "id": "06e87bcc-33a2-4bce-aebd-533e698282d3", "creation_time": "2015-01-31T15:12:36Z", "updated_time": "2015-01-31T15:18:21Z" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/deployments-list-response.json0000664000175000017500000000205300000000000027470 0ustar00zuulzuul00000000000000{ "software_deployments": [ { "status": "COMPLETE", "server_id": "ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5", "config_id": "8da95794-2ad9-4979-8ae5-739ce314c5cd", "output_values": { "deploy_stdout": "Writing to /tmp/barmy\nWritten to /tmp/barmy\n", "deploy_stderr": "+ echo Writing to /tmp/barmy\n+ echo fu\n+ cat /tmp/barmy\n+ echo -n The file /tmp/barmy contains fu for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE\n+ echo Written to /tmp/barmy\n+ echo Output to stderr\nOutput to stderr\n", "deploy_status_code": 0, "result": "The file /tmp/barmy contains fu for server ec14c864-096e-4e27-bb8a-2c2b4dc6f3f5 during CREATE" }, "input_values": null, "action": "CREATE", "status_reason": "Outputs received", "id": "ef422fa5-719a-419e-a10c-72e3a367b0b8", "creation_time": "2015-01-31T15:12:36Z", "updated_time": "2015-01-31T15:18:21Z" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/event-show-response.json0000664000175000017500000000215500000000000026256 0ustar00zuulzuul00000000000000{ "event": { "event_time": "2015-06-25T14:59:53", "id": "8db23e2e-72b2-47a2-9ed9-b52417f56e50", "links": [ { "href": "http://hostname/v1/1234/stacks/mystack/56789/resources/random_key_name/events/8db23e2e-72b2-47a2-9ed9-b52417f56e50", "rel": "self" }, { "href": "http://hostname/v1/1234/stacks/mystack/56789/resources/random_key_name", "rel": "resource" }, { "href": "http://hostname/v1/1234/stacks/mystack/56789", "rel": "stack" } ], "logical_resource_id": "random_key_name", "physical_resource_id": null, "resource_name": "random_key_name", "resource_properties": { "character_classes": null, "character_sequences": null, "length": 8, "salt": null, "sequence": null }, "resource_status": "CREATE_IN_PROGRESS", "resource_status_reason": "state changed", "resource_type": "OS::Heat::RandomString" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/events-find-response.json0000664000175000017500000000063600000000000026403 0ustar00zuulzuul00000000000000{ "code": "302 Found", "message": "The resource was found at http://192.168.42.11:8004/v1/369166a68a3a49b78b4e138531556e55/stacks/s1/da778f26-6d25-4634-9531-d438188e48fd/events?sort_dir=asc;\nyou should be redirected automatically.\n\n", "title": "Found" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/events-list-response.json0000664000175000017500000000444500000000000026440 0ustar00zuulzuul00000000000000{ "events": [ { "event_time": "2014-07-23T08:14:47Z", "id": "474bfdf0-a450-46ec-a78a-0c7faa404073", "links": [ { "href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port/events/474bfdf0-a450-46ec-a78a-0c7faa404073", "rel": "self" }, { "href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port", "rel": "resource" }, { "href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5", "rel": "stack" } ], "logical_resource_id": "port", "physical_resource_id": null, "resource_name": "port", "resource_status": "CREATE_FAILED", "resource_status_reason": "NotFound: Subnet f8a699d0-3537-429e-87a5-6b5a8d0c2bf0 could not be found" }, { "event_time": "2014-07-23T08:14:47Z", "id": "66fa95b6-e6f8-4f05-b1af-e828f5aba04c", "links": [ { "href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port/events/66fa95b6-e6f8-4f05-b1af-e828f5aba04c", "rel": "self" }, { "href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5/resources/port", "rel": "resource" }, { "href": "http://192.168.123.200:8004/v1/dc4b074874244f7693dd65583733a758/stacks/aws_port/db467ed1-50b5-4a3e-aeb1-396ff1d151c5", "rel": "stack" } ], "logical_resource_id": "port", "physical_resource_id": null, "resource_name": "port", "resource_status": "CREATE_IN_PROGRESS", "resource_status_reason": "state changed" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-metadata-response.json0000664000175000017500000000015300000000000027560 0ustar00zuulzuul00000000000000{ "metadata": { "some_key": "some_value", "some_other_key": "some_other_value" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-schema-response.json0000664000175000017500000000154100000000000027242 0ustar00zuulzuul00000000000000{ "attributes": { "an_attribute": { "description": "A runtime value of the resource.", "type": "string" } }, "properties": { "a_property": { "constraints": [ { "description": "Must be between 1 and 255 characters", "length": { "max": 255, "min": 1 } } ], "description": "A resource property description.", "required": true, "type": "string", "update_allowed": false, "immutable": false } }, "resource_type": "OS::Heat::AResourceName", "support_status": { "message": "A status message", "status": "SUPPORTED", "version": "10.0.0" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-show-response.json0000664000175000017500000000165100000000000026764 0ustar00zuulzuul00000000000000{ "resource": { "attributes": { "value": "I9S20uIp" }, "creation_time": "2015-06-25T14:59:53", "description": "", "links": [ { "href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c/resources/random_key_name", "rel": "self" }, { "href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c", "rel": "stack" } ], "logical_resource_id": "random_key_name", "physical_resource_id": "mystack-random_key_name-pmjmy5pks735", "required_by": [], "resource_name": "random_key_name", "resource_status": "CREATE_COMPLETE", "resource_status_reason": "state changed", "resource_type": "OS::Heat::RandomString", "updated_time": "2015-06-25T14:59:53" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-type-template-hot-response.json0000664000175000017500000000567600000000000031401 0ustar00zuulzuul00000000000000{ "heat_template_version": "2016-10-14", "description": "Initial template of KeyPair", "parameters": { "public_key": { "type": "string", "description": "The optional public key. This allows users to supply the public key from a pre-existing key pair. If not supplied, a new key pair will be generated." }, "save_private_key": { "default": false, "type": "boolean", "description": "True if the system should remember a generated private key; False otherwise." }, "type": { "type": "string", "description": "Keypair type. Supported since Nova api version 2.2.", "constraints": [ { "allowed_values": [ "ssh", "x509" ] } ] }, "user": { "type": "string", "description": "ID or name of user to whom to add key-pair. The usage of this property is limited to being used by administrators only. Supported since Nova api version 2.10.", "constraints": [ {} ] }, "name": { "type": "string", "description": "The name of the key pair.", "constraints": [ { "length": { "max": 255, "min": 1 } } ] } }, "resources": { "KeyPair": { "type": "OS::Nova::KeyPair", "properties": { "public_key": { "get_param": "public_key" }, "save_private_key": { "get_param": "save_private_key" }, "type": { "get_param": "type" }, "user": { "get_param": "user" }, "name": { "get_param": "name" } } } }, "outputs": { "public_key": { "description": "The public key.", "value": { "get_attr": [ "KeyPair", "public_key" ] } }, "private_key": { "description": "The private key if it has been saved.", "value": { "get_attr": [ "KeyPair", "private_key" ] } }, "OS::stack_id": { "value": { "get_resource": "KeyPair" } }, "show": { "description": "Detailed information about resource.", "value": { "get_attr": [ "KeyPair", "show" ] } } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-type-template-response.json0000664000175000017500000000536000000000000030577 0ustar00zuulzuul00000000000000{ "HeatTemplateFormatVersion": "2012-12-12", "Description": "Initial template of KeyPair", "Parameters": { "public_key": { "Type": "String", "Description": "The optional public key. This allows users to supply the public key from a pre-existing key pair. If not supplied, a new key pair will be generated." }, "save_private_key": { "Default": false, "Type": "Boolean", "Description": "True if the system should remember a generated private key; False otherwise.", "AllowedValues": [ "True", "true", "False", "false" ] }, "type": { "Type": "String", "Description": "Keypair type. Supported since Nova api version 2.2.", "AllowedValues": [ "ssh", "x509" ] }, "user": { "Type": "String", "Description": "ID or name of user to whom to add key-pair. The usage of this property is limited to being used by administrators only. Supported since Nova api version 2.10." }, "name": { "MinLength": 1, "Type": "String", "Description": "The name of the key pair.", "MaxLength": 255 } }, "Resources": { "KeyPair": { "Type": "OS::Nova::KeyPair", "Properties": { "public_key": { "Ref": "public_key" }, "save_private_key": { "Ref": "save_private_key" }, "type": { "Ref": "type" }, "user": { "Ref": "user" }, "name": { "Ref": "name" } } } }, "Outputs": { "public_key": { "Description": "The public key.", "Value": { "Fn::GetAtt": [ "KeyPair", "public_key" ] } }, "private_key": { "Description": "The private key if it has been saved.", "Value": { "Fn::GetAtt": [ "KeyPair", "private_key" ] } }, "OS::stack_id": { "Value": { "Ref": "KeyPair" } }, "show": { "Description": "Detailed information about resource.", "Value": { "Fn::GetAtt": [ "KeyPair", "show" ] } } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-types-list-advanced-response.json0000664000175000017500000000310000000000000031653 0ustar00zuulzuul00000000000000{ "resource_types": [ { "description": "No description given", "resource_type": "AWS::EC2::Instance" }, { "description": "Resource for defining which resources can be accessed by users.\n\nNOTE: Now this resource is actually associated with an AWS user resource,\nnot any OS:: resource though it is registered under the OS namespace below.\n\nResource for defining resources that users are allowed to access by the\nDescribeStackResource API.\n", "resource_type": "OS::Heat::AccessPolicy" }, { "description": "A resource to manage scaling of `OS::Heat::AutoScalingGroup`.\n\n**Note** while it may incidentally support\n`AWS::AutoScaling::AutoScalingGroup` for now, please do not use it for that\npurpose and use `AWS::AutoScaling::ScalingPolicy` instead.\n\nResource to manage scaling for `OS::Heat::AutoScalingGroup`, i.e. define\nwhich metric should be scaled and scaling adjustment, set cooldown etc.\n", "resource_type": "OS::Heat::ScalingPolicy" }, { "description": "Represents a child stack to allow composition of templates.", "resource_type": "AWS::CloudFormation::Stack" }, { "description": "Heat Template Resource for Keystone Group.\n\nGroups are a container representing a collection of users. A group itself\nmust be owned by a specific domain, and hence all group names are not\nglobally unique, but only unique to their domain.\n", "resource_type": "OS::Keystone::Group" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resource-types-list-response.json0000664000175000017500000000021000000000000030107 0ustar00zuulzuul00000000000000{ "resource_types": [ "AWS::EC2::Instance", "OS::Heat::ScalingPolicy", "AWS::CloudFormation::Stack" ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/resources-list-response.json0000664000175000017500000000165400000000000027145 0ustar00zuulzuul00000000000000{ "resources": [ { "creation_time": "2015-06-25T14:59:53", "links": [ { "href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c/resources/random_key_name", "rel": "self" }, { "href": "http://hostname/v1/1234/stacks/mystack/629a32d0-ac4f-4f63-b58d-f0d047b1ba4c", "rel": "stack" } ], "logical_resource_id": "random_key_name", "physical_resource_id": "mystack-random_key_name-pmjmy5pks735", "required_by": [], "resource_name": "random_key_name", "resource_status": "CREATE_COMPLETE", "resource_status_reason": "state changed", "resource_type": "OS::Heat::RandomString", "updated_time": "2015-06-25T14:59:53" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/services-list-response.json0000664000175000017500000000174500000000000026757 0ustar00zuulzuul00000000000000{ "services": [ { "binary": "heat-engine", "created_at": "2015-02-03T05:55:59.000000", "deleted_at": null, "engine_id": "9d9242c3-4b9e-45e1-9e74-7615fbf20e5d", "host": "engine-1", "hostname": "mrkanag", "id": "e1908f44-42f9-483f-b778-bc814072c33d", "report_interval": 60, "status": "up", "topic": "engine", "updated_at": "2015-02-03T05:57:59.000000" }, { "binary": "heat-engine", "created_at": "2015-02-03T06:03:14.000000", "deleted_at": null, "engine_id": "2d2434bf-adb6-4453-9c6b-b22fb8bd2306", "host": "engine", "hostname": "mrkanag", "id": "582b5657-6db7-48ad-8483-0096350faa21", "report_interval": 60, "status": "down", "topic": "engine", "updated_at": "2015-02-03T06:09:55.000000" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-abandon-response.json0000664000175000017500000000412500000000000026663 0ustar00zuulzuul00000000000000{ "action": "CREATE", "environment": {}, "files": {}, "id": "16934ca3-40e0-4fb2-a289-a700662ec05a", "name": "g", "project_id": "369166a68a3a49b78b4e138531556e55", "resources": { "server": { "status": "COMPLETE", "name": "server", "resource_data": {}, "resource_id": "39d5dad7-7d7a-4cc8-bd84-851e9e2ff4ea", "action": "CREATE", "type": "OS::Nova::Server", "metadata": {} } }, "stack_user_project_id": "9bbd353467bc4f069a3692d223a48aac", "status": "COMPLETE", "tags": null, "template": { "outputs": { "instance_ip": { "value": { "str_replace": { "params": { "username": "ec2-user", "hostname": { "get_attr": [ "server", "first_address" ] } }, "template": "ssh username@hostname" } } } }, "heat_template_version": "2013-05-23", "resources": { "server": { "type": "OS::Nova::Server", "properties": { "key_name": { "get_param": "key_name" }, "image": { "get_param": "image" }, "flavor": { "get_param": "flavor" } } } }, "parameters": { "key_name": { "default": "heat_key", "type": "string" }, "image": { "default": "fedora-amd64", "type": "string" }, "flavor": { "default": "m1.small", "type": "string" } } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-action-cancel-update-request.json0000664000175000017500000000003600000000000031070 0ustar00zuulzuul00000000000000{ "cancel_update": null } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-action-cancel-without-rollback-request.json0000664000175000017500000000005000000000000033074 0ustar00zuulzuul00000000000000{ "cancel_without_rollback": null } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-action-check-request.json0000664000175000017500000000002600000000000027437 0ustar00zuulzuul00000000000000{ "check": null } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-action-resume-request.json0000664000175000017500000000002700000000000027663 0ustar00zuulzuul00000000000000{ "resume": null } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-action-suspend-request.json0000664000175000017500000000003000000000000030036 0ustar00zuulzuul00000000000000{ "suspend": null } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-adopt-request.json0000664000175000017500000000167300000000000026227 0ustar00zuulzuul00000000000000{ "adopt_stack_data": { "action": "CREATE", "id": "bxxxxx4-0xx2-4xx1-axx6-exxxxxxxc", "name": "teststack", "resources": { "MyServer": { "action": "CREATE", "metadata": {}, "name": "MyServer", "resource_data": {}, "resource_id": "cxxxx3-dxx3-4xx-bxx2-3xxxxxxxxa", "status": "COMPLETE", "type": "OS::Trove::Instance" } }, "status": "COMPLETE", "template": { "heat_template_version": "2013-05-23", "resources": { "MyServer": { "type": "OS::Trove::Instance", "properties": { "flavor": "m1.small", "size": 10 } } } } }, "stack_name": "new_stack", "timeout_mins": 30 } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-create-request.json0000664000175000017500000000163600000000000026362 0ustar00zuulzuul00000000000000{ "files": {}, "disable_rollback": true, "parameters": { "flavor": "m1.heat" }, "stack_name": "teststack", "template": { "heat_template_version": "2013-05-23", "description": "Simple template to test heat commands", "parameters": { "flavor": { "default": "m1.tiny", "type": "string" } }, "resources": { "hello_world": { "type": "OS::Nova::Server", "properties": { "key_name": "heat_key", "flavor": { "get_param": "flavor" }, "image": "40be8d1a-3eb9-40de-8abd-43237517384f", "user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n" } } } }, "timeout_mins": 60 } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-create-response.json0000664000175000017500000000046700000000000026531 0ustar00zuulzuul00000000000000{ "stack": { "id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c", "links": [ { "href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/teststack/3095aefc-09fb-4bc7-b1f0-f21a304e864c", "rel": "self" } ] } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-environment-show-response.json0000664000175000017500000000025100000000000030577 0ustar00zuulzuul00000000000000{ "encrypted_param_names": [], "event_sinks": [], "parameter_defaults": {}, "parameters": {}, "resource_registry": { "resources": {} } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-export-response.json0000664000175000017500000000304200000000000026577 0ustar00zuulzuul00000000000000{ "action": "SUSPEND", "environment": { "event_sinks": [], "parameter_defaults": {}, "parameters": {}, "resource_registry": { "resources": {} } }, "files": {}, "id": "da778f26-6d25-4634-9531-d438188e48fd", "name": "s1", "project_id": "369166a68a3a49b78b4e138531556e55", "resources": { "random": { "action": "SUSPEND", "metadata": {}, "name": "random", "resource_data": { "value": "wCPWWoGJH5SZKtNFAgqGcbiWokCkRgam" }, "resource_id": "s1-random-pzuzs6pbjhho", "status": "COMPLETE", "type": "OS::Heat::RandomString" } }, "stack_user_project_id": "a4e6fd443f5b4d4694331ff441ad2397", "status": "COMPLETE", "tags": null, "template": { "heat_template_version": "2014-10-16", "outputs": { "result": { "value": { "get_attr": [ "random", "value" ] } } }, "parameters": { "str_length": { "default": 32, "type": "number" } }, "resources": { "random": { "properties": { "length": { "get_param": "str_length" } }, "type": "OS::Heat::RandomString" } } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-files-show-response.json0000664000175000017500000000010400000000000027332 0ustar00zuulzuul00000000000000{ "file:///home/username/hello.sh": "#!/bin/sh\necho hello\n" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-find-delete-response.json0000664000175000017500000000056600000000000027446 0ustar00zuulzuul00000000000000{ "code": "302 Found", "message": "The resource was found at http://192.168.42.11:8004/v1/369166a68a3a49b78b4e138531556e55/stacks/s2/321c4eed-c87f-4cea-8288-9238f3b92e63;\nyou should be redirected automatically.\n\n", "title": "Found" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-find-response.json0000664000175000017500000000056600000000000026206 0ustar00zuulzuul00000000000000{ "code": "302 Found", "message": "The resource was found at http://192.168.42.11:8004/v1/369166a68a3a49b78b4e138531556e55/stacks/s1/da778f26-6d25-4634-9531-d438188e48fd;\nyou should be redirected automatically.\n\n", "title": "Found" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-output-show-response.json0000664000175000017500000000027400000000000027600 0ustar00zuulzuul00000000000000{ "output": { "output_key": "output_name", "output_value": "output_value", "description": "output description", "output_error": "error message" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-outputs-list-response.json0000664000175000017500000000021000000000000027744 0ustar00zuulzuul00000000000000{ "outputs": [ { "output_key": "output name", "description": "output description" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-preview-response.json0000664000175000017500000001476600000000000026756 0ustar00zuulzuul00000000000000{ "stack": { "capabilities": [], "creation_time": "2015-01-31T15:12:36Z", "deletion_time": null, "description": "HOT template for Nova Server resource.\n", "disable_rollback": true, "id": "None", "links": [ { "href": "http://192.168.122.102:8004/v1/6e18cc2bdbeb48a5basad2dc499f6804/stacks/test_stack/None", "rel": "self" } ], "notification_topics": [], "outputs": [], "parameters": { "OS::project_id": "6e18cc2bdbeb48a5basad2dc499f6804", "OS::stack_id": "None", "OS::stack_name": "teststack", "admin_user": "cloud-user", "flavor": "m1.small", "image": "F20-cfg", "key_name": "heat_key", "server_name": "MyServer" }, "parent": null, "resources": [ { "attributes": {}, "description": "", "metadata": {}, "physical_resource_id": "", "properties": { "description": "Ping and SSH", "name": "the_sg", "rules": [ { "direction": "ingress", "ethertype": "IPv4", "port_range_max": null, "port_range_min": null, "protocol": "icmp", "remote_group_id": null, "remote_ip_prefix": null, "remote_mode": "remote_ip_prefix" }, { "direction": "ingress", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 1, "protocol": "tcp", "remote_group_id": null, "remote_ip_prefix": null, "remote_mode": "remote_ip_prefix" }, { "direction": "ingress", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 1, "protocol": "udp", "remote_group_id": null, "remote_ip_prefix": null, "remote_mode": "remote_ip_prefix" } ] }, "required_by": [ "server1" ], "resource_action": "INIT", "resource_identity": { "path": "/resources/the_sg_res", "stack_id": "None", "stack_name": "teststack", "tenant": "6e18cc2bdbeb48a5b3cad2dc499f6804" }, "resource_name": "the_sg_res", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "OS::Neutron::SecurityGroup", "stack_identity": { "path": "", "stack_id": "None", "stack_name": "teststack", "tenant": "6e18cc2bdbeb48a5b3cad2dc499f6804" }, "stack_name": "teststack", "updated_time": "2015-01-31T15:12:36Z" }, { "attributes": { "accessIPv4": "", "accessIPv6": "", "addresses": "", "console_urls": "", "first_address": "", "instance_name": "", "name": "MyServer", "networks": "", "show": "" }, "description": "", "metadata": {}, "physical_resource_id": "", "properties": { "admin_pass": null, "admin_user": "cloud-user", "availability_zone": null, "block_device_mapping": null, "config_drive": null, "diskConfig": null, "flavor": "m1.small", "flavor_update_policy": "RESIZE", "image": "F20-cfg", "image_update_policy": "REPLACE", "key_name": "heat_key", "metadata": { "ha_stack": "None" }, "name": "MyServer", "networks": [ { "fixed_ip": null, "network": "private", "port": null, "uuid": null } ], "personality": {}, "reservation_id": null, "scheduler_hints": null, "security_groups": [ "None" ], "software_config_transport": "POLL_SERVER_CFN", "user_data": "", "user_data_format": "HEAT_CFNTOOLS" }, "required_by": [], "resource_action": "INIT", "resource_identity": { "path": "/resources/hello_world", "stack_id": "None", "stack_name": "teststack", "tenant": "6e18cc2bdbeb48a3433cad2dc499sdf32234" }, "resource_name": "hello_world", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "OS::Nova::Server", "stack_identity": { "path": "", "stack_id": "None", "stack_name": "teststack", "tenant": "6e18cc2bdbeb48a3433cad2dc499sdf32234" }, "stack_name": "teststack", "updated_time": "2015-01-31T15:12:36Z" } ], "stack_name": "test_stack", "stack_owner": null, "tags": null, "template_description": "HOT template for Nova Server resource.\n", "timeout_mins": null, "updated_time": null } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-show-response.json0000664000175000017500000000224700000000000026244 0ustar00zuulzuul00000000000000{ "stack": { "capabilities": [], "creation_time": "2014-06-03T20:59:46Z", "deletion_time": null, "description": "sample stack", "disable_rollback": true, "id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c", "links": [ { "href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/simple_stack/3095aefc-09fb-4bc7-b1f0-f21a304e864c", "rel": "self" } ], "notification_topics": [], "outputs": [], "parameters": { "OS::project_id": "3ab5b02f-a01f-4f95-afa1-e254afc4a435", "OS::stack_id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c", "OS::stack_name": "simple_stack" }, "parent": null, "stack_name": "simple_stack", "stack_owner": "simple_username", "stack_status": "CREATE_COMPLETE", "stack_status_reason": "Stack CREATE completed successfully", "stack_user_project_id": "65728b74-cfe7-4f17-9c15-11d4f686e591", "tags": null, "template_description": "sample stack", "timeout_mins": null, "updated_time": null } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-snapshot-request.json0000664000175000017500000000003700000000000026750 0ustar00zuulzuul00000000000000{ "name": "vol_snapshot" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-snapshot-response.json0000664000175000017500000000031000000000000027110 0ustar00zuulzuul00000000000000{ "id": "13c3a4b5-0585-440e-85a4-6f96b20e7a78", "name": "vol_snapshot", "status": "IN_PROGRESS", "status_reason": null, "data": null, "creation_time": "2015-09-01T20:57:55Z" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-snapshot-restore-response.json0000664000175000017500000000020400000000000030573 0ustar00zuulzuul00000000000000{ "code": "202 Accepted", "message": "The request is accepted for processing.

\n\n\n", "title": "Accepted" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-snapshot-show-response.json0000664000175000017500000000312100000000000030071 0ustar00zuulzuul00000000000000{ "snapshot": { "id": "7c4e1ef4-bf1b-41ab-a0c8-ce01f4ffdfa1", "name": "vol_snapshot", "status": "COMPLETE", "status_reason": "Stack SNAPSHOT completed successfully", "creation_time": "2015-08-04T20:57:55Z", "data": { "status": "COMPLETE", "name": "stack_vol1", "stack_user_project_id": "fffa11067b1c48129ddfb78fba2bf09f", "environment": { "parameters": {}, "resource_registry": { "resources": {} } }, "template": { "heat_template_version": "2013-05-23", "resources": { "volume": { "type": "OS::Cinder::Volume", "properties": { "size": 1 } } } }, "action": "SNAPSHOT", "project_id": "ecdb08032cd042179692a1b148f6565e", "id": "656452c2-e151-40da-8704-c844e69b485c", "resources": { "volume": { "status": "COMPLETE", "name": "volume", "resource_data": { "backup_id": "99108cf8-398f-461b-a043-bdceb7c9f572" }, "resource_id": "3ab8cf79-807b-4c40-b743-0655f91e072f", "action": "SNAPSHOT", "type": "OS::Cinder::Volume", "metadata": {} } } } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-snapshots-list-response.json0000664000175000017500000000044500000000000030255 0ustar00zuulzuul00000000000000{ "snapshots": [ { "id": "7c4e1ef4-bf1b-41ab-a0c8-ce01f4ffdfa1", "name": "vol_snapshot", "status": "IN_PROGRESS", "status_reason": null, "creation_time": "2015-08-04T20:57:55Z", "data": null } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-update-preview-response.json0000664000175000017500000000413300000000000030221 0ustar00zuulzuul00000000000000{ "unchanged": [ { "updated_time": "datetime", "resource_name": "", "physical_resource_id": "{resource id or ''}", "resource_action": "CREATE", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "restype", "stack_identity": "{stack_id}", "stack_name": "{stack_name}" } ], "updated": [ { "updated_time": "datetime", "resource_name": "", "physical_resource_id": "{resource id or ''}", "resource_action": "CREATE", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "restype", "stack_identity": "{stack_id}", "stack_name": "{stack_name}" } ], "replaced": [ { "updated_time": "datetime", "resource_name": "", "physical_resource_id": "{resource id or ''}", "resource_action": "CREATE", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "restype", "stack_identity": "{stack_id}", "stack_name": "{stack_name}" } ], "added": [ { "updated_time": "datetime", "resource_name": "", "physical_resource_id": "{resource id or ''}", "resource_action": "CREATE", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "restype", "stack_identity": "{stack_id}", "stack_name": "{stack_name}" } ], "deleted": [ { "updated_time": "datetime", "resource_name": "", "physical_resource_id": "{resource id or ''}", "resource_action": "CREATE", "resource_status": "COMPLETE", "resource_status_reason": "", "resource_type": "restype", "stack_identity": "{stack_id}", "stack_name": "{stack_name}" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-update-request.json0000664000175000017500000000144600000000000026400 0ustar00zuulzuul00000000000000{ "template": { "heat_template_version": "2013-05-23", "description": "Create a simple stack", "parameters": { "flavor": { "default": "m1.tiny", "type": "string" } }, "resources": { "hello_world": { "type": "OS::Nova::Server", "properties": { "key_name": "heat_key", "flavor": { "get_param": "flavor" }, "image": "40be8d1a-3eb9-40de-8abd-43237517384f", "user_data": "#!/bin/bash -xv\necho \"hello world\" > /root/hello-world.txt\n" } } } }, "parameters": { "flavor": "m1.small" } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stack-update-response.json0000664000175000017500000000020400000000000026535 0ustar00zuulzuul00000000000000{ "code": "202 Accepted", "message": "The request is accepted for processing.

\n\n\n", "title": "Accepted" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/stacks-list-response.json0000664000175000017500000000152300000000000026416 0ustar00zuulzuul00000000000000{ "stacks": [ { "creation_time": "2014-06-03T20:59:46Z", "deletion_time": null, "description": "sample stack", "id": "3095aefc-09fb-4bc7-b1f0-f21a304e864c", "links": [ { "href": "http://192.168.123.200:8004/v1/eb1c63a4f77141548385f113a28f0f52/stacks/simple_stack/3095aefc-09fb-4bc7-b1f0-f21a304e864c", "rel": "self" } ], "parent": null, "stack_name": "simple_stack", "stack_owner": null, "stack_status": "CREATE_COMPLETE", "stack_status_reason": "Stack CREATE completed successfully", "stack_user_project_id": "71510cbd459a49ac989ca1055de7038b", "tags": null, "updated_time": null } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/template-functions-list-response.json0000664000175000017500000000255300000000000030753 0ustar00zuulzuul00000000000000{ "template_functions": [ { "functions": "Fn::Select", "description": "A function for selecting an item from a list or map." }, { "functions": "repeat", "description": "A function for iterating over a list of items." }, { "functions": "resource_facade", "description": "A function for retrieving data in a parent provider template." }, { "functions": "list_join", "description": "A function for joining strings." }, { "functions": "str_replace", "description": "A function for performing string substitutions." }, { "functions": "get_attr", "description": "A function for resolving resource attributes." }, { "functions": "get_param", "description": "A function for resolving parameter references." }, { "functions": "get_file", "description": "A function for including a file inline." }, { "functions": "digest", "description": "A function for performing digest operations." }, { "functions": "get_resource", "description": "A function for resolving resource references." } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/template-show-response.json0000664000175000017500000000140200000000000026742 0ustar00zuulzuul00000000000000{ "description": "Hello world HOT template that just defines a single server. Contains just base features to verify base HOT support.\n", "heat_template_version": "2013-05-23", "outputs": { "foo": { "description": "Show foo parameter value", "value": { "get_param": "foo" } } }, "parameters": { "foo": { "default": "secret", "description": "Name of an existing key pair to use for the server", "hidden": true, "type": "string" } }, "resources": { "random_key_name": { "properties": { "length": 8 }, "type": "OS::Heat::RandomString" } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/template-validate-request.json0000664000175000017500000000012500000000000027406 0ustar00zuulzuul00000000000000{ "template_url": "/PATH_TO_HEAT_TEMPLATES/WordPress_Single_Instance.template" } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/template-validate-response.json0000664000175000017500000000257000000000000027562 0ustar00zuulzuul00000000000000{ "Description": "A template that provides a single server instance.", "Parameters": { "server-size": { "default": "1GB Standard Instance", "description": "Server size", "type": "String", "constraints": [ { "allowed_values": [ "512MB Standard Instance", "1GB Standard Instance", "4GB Standard Instance", "8GB Standard Instance" ], "description": "Must be a valid server size." } ] }, "key_name": { "description": "Keypair name for SSH access to the server", "required": true, "type": "String" }, "server_name": { "default": "My server", "description": "My server", "type": "String" } }, "ParameterGroups": [ { "label": "Parameter groups", "description": "My parameter groups", "parameters": [ "param_name-1", "param_name-2" ] } ], "Environment": { "event_sinks": [], "parameter_defaults": {}, "parameters": {}, "resource_registry": { "resources": {} } } } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/template-versions-response.json0000664000175000017500000000242300000000000027636 0ustar00zuulzuul00000000000000{ "template_versions": [ { "aliases": [], "version": "AWSTemplateFormatVersion.2010-09-09", "type": "cfn" }, { "aliases": [], "version": "HeatTemplateFormatVersion.2012-12-12", "type": "cfn" }, { "aliases": [], "version": "heat_template_version.2013-05-23", "type": "hot" }, { "aliases": [], "version": "heat_template_version.2014-10-16", "type": "hot" }, { "aliases": [], "version": "heat_template_version.2015-04-30", "type": "hot" }, { "aliases": [], "version": "heat_template_version.2015-10-15", "type": "hot" }, { "aliases": [], "version": "heat_template_version.2016-04-08", "type": "hot" }, { "aliases": ["heat_template_version.newton"], "version": "heat_template_version.2016-10-14", "type": "hot" }, { "aliases": ["heat_template_version.ocata"], "version": "heat_template_version.2017-02-24", "type": "hot" } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/samples/versions-list-response.json0000664000175000017500000000042400000000000026775 0ustar00zuulzuul00000000000000{ "versions": [ { "status": "CURRENT", "id": "v1.0", "links": [ { "href": "http://23.253.228.211:8000/v1/", "rel": "self" } ] } ] } ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/services.inc0000664000175000017500000000260300000000000022300 0ustar00zuulzuul00000000000000.. -*- rst -*- ============== Manage service ============== Show orchestration engine status ================================ .. rest_method:: GET /v1/{tenant_id}/services Enables administrative users to view details for all orchestration engines. Orchestration engine details include engine id, binary, topic name, host, report interval, last updated time, health status, and host name. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 403 - 503 Troubleshooting - A ``503`` error code indicates that the heat engines are not operational. Run the ``heat-manage service list`` command or contact your cloud provider to determine why the heat engines are not operational. Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - services: services - binary: binary - created_at: created_at - deleted_at: deleted_at - engine_id: engine_id - host: host - hostname: hostname - id: engine_record_id - report_interval: report_interval - status: engine_status - topic: topic - updated_at: updated_at Response Example ---------------- .. literalinclude:: samples/services-list-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/software-config.inc0000664000175000017500000002255200000000000023557 0ustar00zuulzuul00000000000000.. -*- rst -*- ====================== Software configuration ====================== Create configuration ==================== .. rest_method:: POST /v1/{tenant_id}/software_configs Creates a software configuration. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - inputs: inputs - group: group - name: config_name - outputs: outputs - config: config - options: options - tenant_id: tenant_id Request Example --------------- .. literalinclude:: samples/config-create-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - id: config_id - inputs: inputs - group: group - name: config_name - outputs: outputs - creation_time: creation_time - updated_time: updated_time - config: config - options: options - software_config: software_config Response Example ---------------- .. literalinclude:: samples/config-create-response.json :language: javascript List configs ============ .. rest_method:: GET /v1/{tenant_id}/software_configs Lists all available software configurations. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - limit: limit - marker: marker Response Parameters ------------------- .. rest_parameters:: parameters.yaml - creation_time: creation_time - group: group - id: config_id - name: config_name - software_configs: software_configs Response Example ---------------- .. literalinclude:: samples/configs-list-response.json :language: javascript Show configuration details ========================== .. rest_method:: GET /v1/{tenant_id}/software_configs/{config_id} Shows details for a software configuration. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - config_id: config_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - config: config - creation_time: creation_time - group: group - id: config_id - inputs: inputs - name: config_name - options: options - outputs: outputs - software_config: software_config Response Example ---------------- .. literalinclude:: samples/config-show-response.json :language: javascript Delete config ============= .. rest_method:: DELETE /v1/{tenant_id}/software_configs/{config_id} Deletes a software configuration. Response Codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - config_id: config_id_url Create deployment ================= .. rest_method:: POST /v1/{tenant_id}/software_deployments Creates a software deployment. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - action: deployment_action - config_id: deployment_config_id - input_values: input_values - server_id: server_id - stack_user_project_id: stack_user_project_id - status: deployment_status - status_reason: deployment_status_reason Request Example --------------- .. literalinclude:: samples/deployment-create-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - action: deployment_action - config_id: deployment_config_id - creation_time: creation_time - id: deployment_id - input_values: input_values - output_values: deployment_output_values - server_id: server_id - software_deployment: software_deployment - status: deployment_status - status_reason: deployment_status_reason - updated_time: deployment_updated_time Response Example ---------------- .. literalinclude:: samples/deployment-create-response.json :language: javascript List deployments ================ .. rest_method:: GET /v1/{tenant_id}/software_deployments Lists all available software deployments. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - server_id: deployment_server_id_query Response Parameters ------------------- .. rest_parameters:: parameters.yaml - action: deployment_action - config_id: deployment_config_id - creation_time: creation_time - id: deployment_id - input_values: input_values - output_values: deployment_output_values - server_id: server_id - software_deployments: software_deployments - status: deployment_status - status_reason: deployment_status_reason - updated_time: deployment_updated_time Response Example ---------------- .. literalinclude:: samples/deployments-list-response.json :language: javascript Show deployment details ======================= .. rest_method:: GET /v1/{tenant_id}/software_deployments/{deployment_id} Shows details for a software deployment. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - deployment_id: deployment_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - action: deployment_action - config_id: deployment_config_id - creation_time: creation_time - id: deployment_id - input_values: input_values - output_values: deployment_output_values - server_id: server_id - software_deployment: software_deployment - status: deployment_status - status_reason: deployment_status_reason - updated_time: deployment_updated_time Response Example ---------------- .. literalinclude:: samples/deployment-show-response.json :language: javascript Update deployment ================= .. rest_method:: PUT /v1/{tenant_id}/software_deployments/{deployment_id} Updates a software deployment. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - deployment_id: deployment_id_url - action: deployment_action - config_id: deployment_config_id - input_values: input_values - output_values: deployment_output_values - status: deployment_status - status_reason: deployment_status_reason Request Example --------------- .. literalinclude:: samples/deployment-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - action: deployment_action - config_id: deployment_config_id - creation_time: creation_time - id: deployment_id - input_values: input_values - output_values: deployment_output_values - server_id: server_id - software_deployments: software_deployments - status: deployment_status - status_reason: deployment_status_reason - updated_time: deployment_updated_time Response Example ---------------- .. literalinclude:: samples/deployment-update-response.json :language: javascript Delete deployment ================= .. rest_method:: DELETE /v1/{tenant_id}/software_deployments/{deployment_id} Deletes a software deployment. Response Codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - deployment_id: deployment_id_url - tenant_id: tenant_id Show server configuration metadata ================================== .. rest_method:: GET /v1/{tenant_id}/software_deployments/metadata/{server_id} Shows the deployment configuration metadata for a server. Use the ``group`` property to specify the configuration hook to which the pass the metadata item. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - server_id: deployment_server_id_url - tenant_id: tenant_id Response Parameters ------------------- .. rest_parameters:: parameters.yaml - config: config - creation_time: creation_time - group: group - id: config_id - inputs: inputs - metadata: deployment_metadata - name: config_name - options: options - outputs: outputs - updated_time: updated_time Response Example ---------------- .. literalinclude:: samples/deployment-metadata-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/stack-actions.inc0000664000175000017500000001044300000000000023221 0ustar00zuulzuul00000000000000.. -*- rst -*- ============= Stack actions ============= Performs non-lifecycle operations on the stack. Specify the action in the request body. Suspend stack ============= .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions Suspends a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - suspend: suspend Request Example --------------- .. literalinclude:: samples/stack-action-suspend-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- This operation does not return a response body. Resume stack ============ .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions Resumes a suspended stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resume: resume Request Example --------------- .. literalinclude:: samples/stack-action-resume-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- This operation does not return a response body. Cancel stack update =================== .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions Cancels a currently running update of a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - cancel_update: cancel_update Request Example --------------- .. literalinclude:: samples/stack-action-cancel-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- This operation does not return a response body. Cancel stack create/update without rollback =========================================== .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions Cancels a currently running create/update of a stack without rollback. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - cancel_without_rollback: cancel_without_rollback Request Example --------------- .. literalinclude:: samples/stack-action-cancel-without-rollback-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- This operation does not return a response body. Check stack resources ===================== .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions Checks whether the resources are in expected states for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - check: check Request Example --------------- .. literalinclude:: samples/stack-action-check-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- This operation does not return a response body. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/stack-outputs.inc0000664000175000017500000000330600000000000023304 0ustar00zuulzuul00000000000000.. -*- rst -*- ============= Stack Outputs ============= List outputs ============ .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs Lists outputs for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - outputs: stack_outputs - output_key: output_key - description: output_description Response Example ---------------- .. literalinclude:: samples/stack-outputs-list-response.json :language: javascript Show output =========== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs/{output_key} Shows details for a stack output. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - output_key: output_key_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - output: output - output_key: output_key - output_value: output_value - description: output_description - output_error: output_error Response Example ---------------- .. literalinclude:: samples/stack-output-show-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/stack-snapshots.inc0000664000175000017500000001103500000000000023601 0ustar00zuulzuul00000000000000.. -*- rst -*- =============== Stack Snapshots =============== Snapshot a stack ================ .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots Takes a snapshot of all resources in a stack. All snapshots are deleted when the stack is deleted. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - name: snapshot_name Request Example --------------- .. literalinclude:: samples/stack-snapshot-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - creation_time: creation_time - data: snapshot_data - id: snapshot_id - name: snapshot_name - status: snapshot_status - status_reason: snapshot_status_reason Response Example ---------------- .. literalinclude:: samples/stack-snapshot-response.json :language: javascript List snapshots ============== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots Lists snapshots for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - snapshots: snapshots - creation_time: creation_time - data: snapshot_data - id: snapshot_id - name: snapshot_name - status: snapshot_status - status_reason: snapshot_status_reason Response Example ---------------- .. literalinclude:: samples/stack-snapshots-list-response.json :language: javascript Show snapshot ============= .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id} Shows details for a snapshot. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - snapshot_id: snapshot_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - snapshot: snapshot - creation_time: creation_time - data: snapshot_data - id: snapshot_id - name: snapshot_name - status: snapshot_status - status_reason: snapshot_status_reason Response Example ---------------- .. literalinclude:: samples/stack-snapshot-show-response.json :language: javascript Restore snapshot ================ .. rest_method:: POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}/restore Restores a stack snapshot. You can restore only active stacks from a snapshot. You must recreate deleted stacks. Response Codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 401 - 404 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - snapshot_id: snapshot_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - code: restore_code - message: restore_message - title: restore_title Response Example ---------------- .. literalinclude:: samples/stack-snapshot-restore-response.json :language: javascript Delete a snapshot ================= .. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id} Deletes a stack snapshot. Response Codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - snapshot_id: snapshot_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- The response to this API does not have a body. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/stack-templates.inc0000664000175000017500000000526500000000000023565 0ustar00zuulzuul00000000000000.. -*- rst -*- ========= Templates ========= List template versions ====================== .. rest_method:: GET /v1/{tenant_id}/template_versions Lists all available template versions. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request_id: request_id - template_versions: template_versions - alias: template_version_alias - type: template_type - version: template_version Response Example ---------------- .. literalinclude:: samples/template-versions-response.json :language: javascript List template functions ======================= .. rest_method:: GET /v1/{tenant_id}/template_versions/{template_version}/functions Lists all available functions for a template version. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - template_version: template_version_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - template_functions: template_functions - description: function_description - functions: functions Response Example ---------------- .. literalinclude:: samples/template-functions-list-response.json :language: javascript Validate template ================= .. rest_method:: POST /v1/{tenant_id}/validate Validates a template. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - environment: environment - environment_files: environment_files - files: files - ignore_errors: ignore_errors - show_nested: show_nested - template: template - template_url: template_url Request Example --------------- .. literalinclude:: samples/template-validate-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - Description: Description - ParameterGroups: ParameterGroups - Parameters: Parameters - Environment: Environment Response Example ---------------- .. literalinclude:: samples/template-validate-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/stacks.inc0000664000175000017500000004755700000000000021766 0ustar00zuulzuul00000000000000.. -*- rst -*- ====== Stacks ====== Create stack ============ .. rest_method:: POST /v1/{tenant_id}/stacks Creates a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 201 .. rest_status_code:: error status.yaml - 400 - 401 - 409 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - disable_rollback: disable_rollback - environment: environment - environment_files: environment_files - files: files - files_container: files_container - parameters: parameters - stack_name: stack_name_request - tags: tags - template: template - template_url: template_url - timeout_mins: timeout_mins Request Example --------------- .. literalinclude:: samples/stack-create-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - location: location - X-Openstack-Request-Id: request_id - stack: stack - id: stack_id - links: links Response Example ---------------- .. literalinclude:: samples/stack-create-response.json :language: javascript Preview stack ============= .. rest_method:: POST /v1/{tenant_id}/stacks/preview Previews a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 409 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - disable_rollback: disable_rollback - environment: environment - environment_files: environment_files - files_container: files_container - files: files - parameters: parameters - stack_name: stack_name_request - tags: tags - template: template - template_url: template_url - timeout_mins: timeout_mins Request Example --------------- .. literalinclude:: samples/stack-create-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - capabilities: capabilities - creation_time: creation_time - deletion_time: deletion_time - description: description - disable_rollback: disable_rollback - id: stack_id - links: links - notification_topics: notification_topics - outputs: stack_outputs - parameters: stack_parameters - parent: parent - resources: stack_resources - stack: stack - stack_name: stack_name - stack_owner: stack_owner - stack_user_project_id: stack_stack_user_project_id - tags: stack_tags - template_description: template_description - timeout_mins: stack_timeout_mins - updated_time: updated_time Response Example ---------------- .. literalinclude:: samples/stack-preview-response.json :language: javascript List stacks =========== .. rest_method:: GET /v1/{tenant_id}/stacks Lists active stacks. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - id: stack_id_query - status: stack_status_query - name: stack_name_query - action: stack_action_query - tenant: stack_tenant_query - username: stack_user_query - owner_id: owner_id_query - limit: limit - marker: marker - sort_keys: stack_sort_keys - sort_dir: sort_dir - show_deleted: show_deleted - show_nested: show_nested - tags: tags_query - tags_any: tags_any - not_tags: not_tags - not_tags_any: not_tags_any - global_tenant: global_tenant - with_count: with_count Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - stacks: stacks - creation_time: creation_time - deletion_time: deletion_time - description: description - links: links - parent: parent - stack_name: stack_name - stack_owner: stack_owner - stack_status: stack_status - stack_status_reason: stack_status_reason - tags: stack_tags - updated_time: updated_time - stack_user_project_id: stack_stack_user_project_id Response Example ---------------- .. literalinclude:: samples/stacks-list-response.json :language: javascript Find stack ========== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_identity} Finds the canonical URL for a stack. Also works with verbs other than GET, so that you can perform PUT and DELETE operations on a current stack. Set your client to follow redirects. When redirecting, the request method should not change as defined in RFC2626. However, in many clients the default behavior is to change the method to GET when you receive a ``302`` response code because this behavior is ubiquitous in web browsers. Response Codes -------------- .. rest_status_code:: success status.yaml - 302 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_identity: stack_identity Response Parameters ------------------- .. rest_parameters:: parameters.yaml - location: location - X-Openstack-Request-Id: request_id - code: code - message: message - title: title Response Example ---------------- .. literalinclude:: samples/stack-find-response.json :language: javascript Show stack details ================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id} Shows details for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - resolve_outputs: resolve_outputs Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - stack: stack - capabilities: capabilities - creation_time: creation_time - deletion_time: deletion_time - description: description - disable_rollback: stack_disable_rollback - id: stack_id - links: links - notification_topics: notification_topics - outputs: stack_outputs - parameters: stack_parameters - parent: parent - stack_name: stack_name - stack_owner: stack_owner - stack_status: stack_status - stack_status_reason: stack_status_reason - stack_user_project_id: stack_stack_user_project_id - tags: stack_tags - template_description: template_description - timeout_mins: stack_timeout_mins - updated_time: updated_time Response Example ---------------- .. literalinclude:: samples/stack-show-response.json :language: javascript Update stack ============ .. rest_method:: PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id} Updates a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - clear_parameters: clear_parameters - disable_rollback: disable_rollback - environment: environment - environment_files: environment_files - files_container: files_container - existing: existing - files: files - parameters: parameters - tags: tags - template: template - template_url: template_url - timeout_mins: timeout_mins - converge: converge Request Example --------------- .. literalinclude:: samples/stack-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - code: code - message: message - title: title Response Example ---------------- .. literalinclude:: samples/stack-update-response.json :language: javascript Update stack (PATCH) ==================== .. rest_method:: PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id} Updates a stack using the ``PATCH`` verb. The logic is identical to stack update with a ``PUT`` verb except that the ``existing`` parameter is always set to True. Response Codes -------------- .. rest_status_code:: success status.yaml - 202 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - clear_parameters: clear_parameters - disable_rollback: disable_rollback - environment: environment - environment_files: environment_files - files_container: files_container - existing: existing_patch - files: files - parameters: parameters - tags: tags - template: template - template_url: template_url - timeout_mins: timeout_mins - converge: converge Request Example --------------- .. literalinclude:: samples/stack-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - code: code - message: message - title: title Response Example ---------------- .. literalinclude:: samples/stack-update-response.json :language: javascript Preview stack update ==================== .. rest_method:: PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/preview Previews an update for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - clear_parameters: clear_parameters - disable_rollback: disable_rollback - environment: environment - environment_files: environment_files - files_container: files_container - existing: existing - files: files - parameters: parameters - show_nested: update_show_nested - tags: tags - template: template - template_url: template_url - timeout_mins: timeout_mins - converge: converge Request Example --------------- .. literalinclude:: samples/stack-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - resource_changes: resource_changes - added: preview_added - deleted: preview_deleted - replaced: preview_replaced - unchanged: preview_unchanged - updated: preview_updated Response Example ---------------- .. literalinclude:: samples/stack-update-preview-response.json :language: javascript Preview stack update (PATCH) ============================ .. rest_method:: PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/preview Previews an update for a stack using the ``PATCH`` verb. The logic is the same as that of stack update preview with a ``PUT`` verb except that the ``existing`` parameter is always set to True. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url - clear_parameters: clear_parameters - disable_rollback: disable_rollback - environment: environment - environment_files: environment_files - files_container: files_container - existing: existing_patch - files: files - parameters: parameters - show_nested: update_show_nested - tags: tags - template: template - template_url: template_url - timeout_mins: timeout_mins - converge: converge Request Example --------------- .. literalinclude:: samples/stack-update-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - resource_changes: resource_changes - added: preview_added - deleted: preview_deleted - replaced: preview_replaced - unchanged: preview_unchanged - updated: preview_updated Response Example ---------------- .. literalinclude:: samples/stack-update-preview-response.json :language: javascript Find stack for deletion ======================= .. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_identity} Find the canonical URL for a stack for deletion. This request returns a status code of ``302`` pointing to the location where a DELETE request can be sent to request a stack deletion. Response Codes -------------- .. rest_status_code:: success status.yaml - 302 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_identity: stack_identity Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - location: location - code: code - message: message - title: title Response Example ---------------- .. literalinclude:: samples/stack-find-delete-response.json :language: javascript Delete stack ============ .. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id} Deletes a stack. If a stack has snapshots, those snapshots are deleted as well. Response Codes -------------- .. rest_status_code:: success status.yaml - 204 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- This request does not return anything in the response body. Abandon stack ============= .. rest_method:: DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/abandon Deletes a stack but leaves its resources intact, and returns data that describes the stack and its resources. This is a preview feature which has to be explicitly enabled by setting the following option in the ``heat.conf`` file:: [DEFAULT] enable_stack_abandon = True Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - action: stack_action - environment: stack_environment - files: stack_files - id: stack_id - stack_name: stack_name - project_id: project_id - resources: resources_abandon - stack_user_project_id: stack_stack_user_project_id - status: stack_status - tags: stack_tags - template: stack_template Response Example ---------------- .. literalinclude:: samples/stack-abandon-response.json :language: javascript Adopt stack =========== .. rest_method:: POST /v1/{tenant_id}/stacks Creates a stack from existing resources. This is a preview feature which has to be explicitly enabled by setting the following option in the ``heat.conf`` file:: [DEFAULT] enable_stack_adopt = True Response Codes -------------- .. rest_status_code:: success status.yaml - 201 .. rest_status_code:: error status.yaml - 400 - 401 - 409 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - adopt_stack_data: adopt_stack_data - disable_rollback: disable_rollback - environment: environment - files: files - parameters: parameters - stack_name: stack_name - timeout_mins: timeout_mins Request Example --------------- .. literalinclude:: samples/stack-adopt-request.json :language: javascript Response Parameters ------------------- .. rest_parameters:: parameters.yaml - location: location - X-Openstack-Request-Id: request_id - stack: stack - id: stack_id - links: links Response Example ---------------- .. literalinclude:: samples/stack-create-response.json :language: javascript Export stack ============ .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/export Gets the stack data in JSON format. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 409 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- The body of the response contains a map of file names and file contents. .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - action: action - environment: stack_environment - files: stack_files - id: stack_id - name: stack_name - project_id: project_id - resources: resources - stack_user_project_id: stack_stack_user_project_id - status: stack_status - tags: stack_tags - template: stack_template Response Example ---------------- .. literalinclude:: samples/stack-export-response.json :language: javascript Get stack template ================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/template Gets a template for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - heat_template_version: heat_template_version - outputs: template_outputs - parameters: template_parameters - description: template_description - resources: template_resources Response Example ---------------- .. literalinclude:: samples/template-show-response.json :language: javascript Get stack environment ===================== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/environment Gets the environment for a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - encrypted_param_names: encrypted_param_names - event_sinks: event_sinks - parameter_defaults: parameter_defaults - parameters: parameters - resource_registry: resource_registry Response Example ---------------- .. literalinclude:: samples/stack-environment-show-response.json :language: javascript Get stack files =============== .. rest_method:: GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/files Gets the files associated with a stack. Response Codes -------------- .. rest_status_code:: success status.yaml - 200 .. rest_status_code:: error status.yaml - 400 - 401 - 404 - 500 Request Parameters ------------------ .. rest_parameters:: parameters.yaml - tenant_id: tenant_id - stack_name: stack_name_url - stack_id: stack_id_url Response Parameters ------------------- The body of the response contains a map of file names and file contents. .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id Response Example ---------------- .. literalinclude:: samples/stack-files-show-response.json :language: javascript ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/status.yaml0000664000175000017500000000340000000000000022165 0ustar00zuulzuul00000000000000################# # Success Codes # ################# 200: default: | Request was successful. 201: default: | Resource was created and is ready to use. 202: default: | Request was accepted for processing, but the processing has not been completed. A 'location' header is included in the response which contains a link to check the progress of the request. 204: default: | The server has fulfilled the request by deleting the resource. 300: default: | There are multiple choices for resources. The request has to be more specific to successfully retrieve one of these resources. 302: default: | The response is about a redirection hint. The header of the response usually contains a 'location' value where requesters can check to track the real location of the resource. ################# # Error Codes # ################# 400: default: | Some content in the request was invalid. resource_signal: | The target resource doesn't support receiving a signal. 401: default: | User must authenticate before making a request. 403: default: | Policy does not allow current user to do this operation. 404: default: | The requested resource could not be found. 405: default: | Method is not valid for this endpoint. 409: default: | This operation conflicted with another operation on this resource. duplicate_zone: | There is already a zone with this name. 500: default: | Something went wrong inside the service. This should not happen usually. If it does happen, it means the server has experienced some serious problems. 503: default: | Service is not available. This is mostly caused by service configuration errors which prevents the service from successful start up. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/api-ref/source/v1/versions.inc0000664000175000017500000000120600000000000022323 0ustar00zuulzuul00000000000000.. -*- rst -*- ============ API versions ============ List versions ============= .. rest_method:: GET / Lists all Orchestration API versions. Response Codes -------------- .. rest_status_code:: success status.yaml - 300 Request Parameters ------------------ This operation does not accept a request body. Response Parameters ------------------- .. rest_parameters:: parameters.yaml - X-Openstack-Request-Id: request_id - versions: versions - id: version_id - status: version_status - links: links Response Example ---------------- .. literalinclude:: samples/versions-list-response.json :language: javascript ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.239036 openstack_heat-24.0.0/bin/0000775000175000017500000000000000000000000015360 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/bin/heat-db-setup0000775000175000017500000001571700000000000017763 0ustar00zuulzuul00000000000000#!/bin/bash # # 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. # # # Print --help output and exit. # usage() { cat << EOF Set up a local MySQL database for use with heat. This script will create a 'heat' database that is accessible only on localhost by user 'heat' with password 'heat'. Usage: heat-db-setup [options] Options: select a distro type (rpm or debian) --help | -h Print usage information. --password | -p Specify the password for the 'heat' MySQL user that will use to connect to the 'heat' MySQL database. By default, the password 'heat' will be used. --rootpw | -r Specify the root MySQL password. If the script installs the MySQL server, it will set the root password to this value instead of prompting for a password. If the MySQL server is already installed, this password will be used to connect to the database instead of having to prompt for it. --yes | -y In cases where the script would normally ask for confirmation before doing something, such as installing mysql-server, just assume yes. This is useful if you want to run the script non-interactively. EOF exit 0 } install_mysql_server() { if [ -z "${ASSUME_YES}" ] ; then $PACKAGE_INSTALL $DB_SERVER else $PACKAGE_INSTALL -y $DB_SERVER fi } start_mysql_server() { $SERVICE_START } MYSQL_HEAT_PW_DEFAULT="heat" MYSQL_HEAT_PW=${MYSQL_HEAT_PW_DEFAULT} HEAT_CONFIG="/etc/heat/heat.conf" ASSUME_YES="" ELEVATE="" # Check for root privileges if [[ $EUID -ne 0 ]] ; then echo "This operation requires superuser privileges, using sudo:" if sudo -l > /dev/null ; then ELEVATE="sudo" else exit 1 fi fi case "$1" in rpm) echo "Installing on an RPM system." PACKAGE_INSTALL="$ELEVATE yum install" PACKAGE_STATUS="rpm -q" SERVICE_MYSQLD="mysqld" DB_SERVER="mysql-server" # Install mariadb-server in rhel7 and fedora if [[ -r /etc/redhat-release ]];then ver=`grep -E -o '[0-9]+' /etc/redhat-release| sed 1q` if [[ $ver -ge 7 ]];then SERVICE_MYSQLD="mariadb" DB_SERVER="mariadb-server" fi fi SERVICE_START="$ELEVATE service $SERVICE_MYSQLD start" SERVICE_STATUS="service $SERVICE_MYSQLD status" SERVICE_ENABLE="$ELEVATE chkconfig" ;; deb) echo "Installing on a Debian system." PACKAGE_INSTALL="$ELEVATE apt-get install" PACKAGE_STATUS="dpkg-query -s" SERVICE_MYSQLD="mysql" DB_SERVER="mysql-server" SERVICE_START="$ELEVATE service $SERVICE_MYSQLD start" SERVICE_STATUS="$ELEVATE service $SERVICE_MYSQLD status" SERVICE_ENABLE="" ;; *) usage ;; esac while [ $# -gt 0 ] do case "$1" in -h|--help) usage ;; -p|--password) shift MYSQL_HEAT_PW=${1} ;; -r|--rootpw) shift MYSQL_ROOT_PW=${1} ;; -y|--yes) ASSUME_YES="yes" ;; *) # ignore ;; esac shift done # Make sure MySQL is installed. NEW_MYSQL_INSTALL=0 if ! $PACKAGE_STATUS mysql-server && ! $PACKAGE_STATUS mariadb-server > /dev/null then if [ -z "${ASSUME_YES}" ] ; then printf "mysql-server is not installed. Would you like to install it now? (y/n): " read response case "$response" in y|Y) ;; n|N) echo "mysql-server must be installed. Please install it before proceeding." exit 0 ;; *) echo "Invalid response." >&2 exit 1 esac fi NEW_MYSQL_INSTALL=1 install_mysql_server fi # Make sure mysqld is running. if ! $SERVICE_STATUS > /dev/null then if [ -z "${ASSUME_YES}" ] ; then printf "$SERVICE_MYSQLD is not running. Would you like to start it now? (y/n): " read response case "$response" in y|Y) ;; n|N) echo "$SERVICE_MYSQLD must be running. Please start it before proceeding." exit 0 ;; *) echo "Invalid response." >&2 exit 1 esac fi start_mysql_server # If we both installed and started, ensure it starts at boot [ $NEW_MYSQL_INSTALL -eq 1 ] && $SERVICE_ENABLE $SERVICE_MYSQLD on fi # Get MySQL root access. if [ $NEW_MYSQL_INSTALL -eq 1 ] then if [ ! "${MYSQL_ROOT_PW+defined}" ] ; then echo "Since this is a fresh installation of MySQL, please set a password for the 'root' mysql user." PW_MATCH=0 while [ $PW_MATCH -eq 0 ] do printf "Enter new password for 'root' mysql user: " read -s MYSQL_ROOT_PW echo printf "Enter new password again: " read -s PW2 echo if [ "${MYSQL_ROOT_PW}" = "${PW2}" ] ; then PW_MATCH=1 else echo "Passwords did not match." >&2 fi done fi echo "UPDATE mysql.user SET password = password('${MYSQL_ROOT_PW}') WHERE user = 'root'; DELETE FROM mysql.user WHERE user = ''; flush privileges;" | mysql -u root if ! [ $? -eq 0 ] ; then echo "Failed to set password for 'root' MySQL user." >&2 exit 1 fi elif [ ! "${MYSQL_ROOT_PW+defined}" ] ; then printf "Please enter the password for the 'root' MySQL user: " read -s MYSQL_ROOT_PW echo fi # Sanity check MySQL credentials. MYSQL_ROOT_PW_ARG="" if [ "${MYSQL_ROOT_PW+defined}" ] then MYSQL_ROOT_PW_ARG="--password=${MYSQL_ROOT_PW}" fi echo "SELECT 1;" | mysql -u root ${MYSQL_ROOT_PW_ARG} > /dev/null if ! [ $? -eq 0 ] then echo "Failed to connect to the MySQL server. Please check your root user credentials." >&2 exit 1 fi echo "Verified connectivity to MySQL." # Now create the db. echo "Creating 'heat' database." cat << EOF | mysql -u root ${MYSQL_ROOT_PW_ARG} CREATE DATABASE IF NOT EXISTS heat DEFAULT CHARACTER SET utf8; GRANT ALL ON heat.* TO 'heat'@'localhost' IDENTIFIED BY '${MYSQL_HEAT_PW}'; GRANT ALL ON heat.* TO 'heat'@'%' IDENTIFIED BY '${MYSQL_HEAT_PW}'; flush privileges; EOF # Make sure heat configuration has the right MySQL password. if [ "${MYSQL_HEAT_PW}" != "${MYSQL_HEAT_PW_DEFAULT}" ] ; then echo "Updating 'heat' database password in ${HEAT_CONFIG}" sed -i -e "s/mysql:\/\/heat:\(.*\)@/mysql:\/\/heat:${MYSQL_HEAT_PW}@/" ${HEAT_CONFIG} fi # override the logging config in heat.conf log_conf=$(mktemp /tmp/heat-logging.XXXXXXXXXX.conf) cat < $log_conf [loggers] keys=root [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=INFO handlers=consoleHandler [handler_consoleHandler] class=StreamHandler formatter=simpleFormatter args=(sys.stdout,) [formatter_simpleFormatter] format=%(name)s - %(levelname)s - %(message)s EOF heat-manage --log-config=$log_conf db_sync rm $log_conf # Do a final sanity check on the database. echo "SELECT * FROM alembic_version;" | mysql -u heat --password=${MYSQL_HEAT_PW} heat > /dev/null if ! [ $? -eq 0 ] then echo "Final sanity check failed." >&2 exit 1 fi echo "Complete!" ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/bin/heat-keystone-setup-domain0000775000175000017500000001416200000000000022475 0ustar00zuulzuul00000000000000#!/usr/bin/env python # # 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. import os import sys import keystoneclient.exceptions as kc_exception from keystoneclient.v3 import client from oslo_config import cfg from oslo_log import log as logging from heat.common.i18n import _ from heat import version logger = logging.getLogger(__name__) DEBUG = False USERNAME = os.environ.get('OS_USERNAME') PASSWORD = os.environ.get('OS_PASSWORD') AUTH_URL = os.environ.get('OS_AUTH_URL', '').replace('v2.0', 'v3') PROJECT_NAME = os.environ.get('OS_PROJECT_NAME') USER_DOMAIN_NAME = os.environ.get('OS_USER_DOMAIN_NAME') PROJECT_DOMAIN_NAME = os.environ.get('OS_PROJECT_DOMAIN_NAME') opts = [ cfg.StrOpt('stack-user-domain-name', default="heat", help=_("Name of domain to create for stack users.")), cfg.StrOpt('stack-domain-admin', default="heat_stack_admin", help=_("Keystone username with roles sufficient to manage users" " and projects in the stack-user-domain")), cfg.StrOpt('stack-domain-admin-password', secret=True, help=_("Password to set for stack-domain-admin")), cfg.BoolOpt('insecure', default=False, help=_("If set, then the server's certificate will not " "be verified.")), cfg.StrOpt('os-cacert', help=_('Optional CA cert file to use in SSL connections.')), cfg.StrOpt('os-cert', help=_('Optional PEM-formatted certificate chain file.')), cfg.StrOpt('os-key', help=_('Optional PEM-formatted file that contains the ' 'private key.')), ] # Setup logging before registering additional options logging.register_options(cfg.CONF) extra_log_level_defaults = ['urllib3.connectionpool=WARNING'] logging.set_defaults( logging_context_format_string="%(levelname)s (%(module)s:" "%(lineno)d) %(message)s", default_log_levels=(logging.get_default_log_levels() + extra_log_level_defaults)) logging.setup(cfg.CONF, 'heat-keystone-setup-domain', version.version_info.version_string()) # Register additional options cfg.CONF.register_cli_opts(opts) cfg.CONF(sys.argv[1:], project='heat', prog='heat-keystone-setup-domain', version=version.version_info.version_string()) HEAT_DOMAIN_NAME = os.environ.get( 'HEAT_DOMAIN', cfg.CONF.stack_user_domain_name) HEAT_DOMAIN_ADMIN = os.environ.get('HEAT_DOMAIN_ADMIN', cfg.CONF.stack_domain_admin) HEAT_DOMAIN_PASSWORD = os.environ.get('HEAT_DOMAIN_PASSWORD', cfg.CONF.stack_domain_admin_password) HEAT_DOMAIN_DESCRIPTION = 'Contains users and projects created by heat' CACERT = os.environ.get('OS_CACERT', cfg.CONF.os_cacert) CERT = os.environ.get('OS_CERT', cfg.CONF.os_cert) KEY = os.environ.get('OS_KEY', cfg.CONF.os_key) insecure = cfg.CONF.insecure def main(): client_kwargs = { 'debug': DEBUG, 'username': USERNAME, 'password': PASSWORD, 'auth_url': AUTH_URL, 'endpoint': AUTH_URL, 'project_name': PROJECT_NAME, 'user_domain_name': USER_DOMAIN_NAME, 'project_domain_name': PROJECT_DOMAIN_NAME } if insecure: client_kwargs['verify'] = False else: client_kwargs.update({ 'cacert': CACERT, 'cert': CERT, 'key': KEY }) c = client.Client(**client_kwargs) c.authenticate() # Create the heat domain logger.info("Creating domain %s" % HEAT_DOMAIN_NAME) try: heat_domain = c.domains.create(name=HEAT_DOMAIN_NAME, description=HEAT_DOMAIN_DESCRIPTION) except kc_exception.Conflict: logger.warning("Domain %s already exists" % HEAT_DOMAIN_NAME) heat_domain = c.domains.list(name=HEAT_DOMAIN_NAME)[0] if heat_domain.name != HEAT_DOMAIN_NAME: logger.error("Unexpected filtered list response, please upgrade " "keystoneclient to >= 0.5") sys.exit(1) except kc_exception.Forbidden: logger.error("User '%s' is not authorized to perform this " "operation, please try with other OS_USERNAME setting." % USERNAME) sys.exit(1) # Create heat domain admin user if not HEAT_DOMAIN_PASSWORD: logger.error("Must export HEAT_DOMAIN_PASSWORD or use" " --stack-domain-admin-password") sys.exit(1) try: domain_admin = c.users.create(name=HEAT_DOMAIN_ADMIN, password=HEAT_DOMAIN_PASSWORD, domain=heat_domain, description="Heat domain admin") except kc_exception.Conflict: logger.warning("User %s already exists" % HEAT_DOMAIN_ADMIN) domain_admin = c.users.list(name=HEAT_DOMAIN_ADMIN, domain=heat_domain)[0] # Make the user a domain admin roles_list = c.roles.list() # FIXME(shardy): seems filtering roles by name currently doesn't work admin_role = [r for r in roles_list if r.name == 'admin'][0] c.roles.grant(role=admin_role, user=domain_admin, domain=heat_domain) print("\nPlease update your heat.conf with the following in [DEFAULT]\n") print("stack_user_domain_id=%s" % heat_domain.id) print("stack_domain_admin=%s" % HEAT_DOMAIN_ADMIN) print("stack_domain_admin_password=%s" % HEAT_DOMAIN_PASSWORD) if __name__ == "__main__": main() ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/bindep.txt0000664000175000017500000000240200000000000016610 0ustar00zuulzuul00000000000000# This is a cross-platform list tracking distribution packages needed for install and tests; # see https://docs.openstack.org/infra/bindep/ for additional information. mysql-server [platform:dpkg !platform:debian] mariadb-server [platform:redhat platform:debian] postgresql build-essential [platform:dpkg] python3-all-dev [platform:dpkg] libxml2-dev [platform:dpkg] libxslt1-dev [platform:dpkg] libyaml-dev [platform:dpkg] libssl-dev [platform:dpkg] libffi-dev [platform:dpkg] libmysqlclient-dev [platform:ubuntu] libmariadb-dev-compat [platform:debian] libpq-dev [platform:dpkg] mysql-client [platform:dpkg !platform:debian] postgresql-client [platform:dpkg] gcc [platform:rpm] python3-devel [platform:fedora platform:suse] python3 [platform:suse] libxml2-devel [platform:rpm] libxslt-devel [platform:rpm] libyaml-devel [platform:rpm] openssl-devel [platform:rpm] libffi-devel [platform:redhat platform:suse !platform:opensuse423] libffi48-devel [platform:opensuse423] mariadb-devel [platform:redhat] libmysqlclient-devel [platform:suse] postgresql-devel [platform:rpm] dev-libs/libxml2 [platform:gentoo] dev-libs/libxslt [platform:gentoo] dev-libs/libyaml [platform:gentoo] dev-libs/openssl [platform:gentoo] virtual/libffi [platform:gentoo] dev-db/mariadb [platform:gentoo] ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.1510358 openstack_heat-24.0.0/contrib/0000775000175000017500000000000000000000000016250 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.239036 openstack_heat-24.0.0/contrib/heat_docker/0000775000175000017500000000000000000000000020520 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/README.md0000664000175000017500000000075500000000000022006 0ustar00zuulzuul00000000000000Docker plugin for OpenStack Heat ================================ This plugin enable using Docker containers as resources in a Heat template. ### 1. Install the Docker plugin in Heat NOTE: These instructions assume the value of heat.conf plugin_dirs includes the default directory /usr/lib/heat. To install the plugin, from this directory run: sudo python ./setup.py install ### 2. Restart heat Only the process "heat-engine" needs to be restarted to load the new installed plugin. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.239036 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/0000775000175000017500000000000000000000000022770 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/__init__.py0000664000175000017500000000000000000000000025067 0ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.239036 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/resources/0000775000175000017500000000000000000000000025002 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/resources/__init__.py0000664000175000017500000000000000000000000027101 0ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/resources/docker_container.py0000664000175000017500000005122500000000000030672 0ustar00zuulzuul00000000000000# # Copyright (c) 2013 Docker, Inc. # All Rights Reserved. # # 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. from oslo_log import log as logging import packaging.version from heat.common import exception from heat.common.i18n import _ from heat.engine import attributes from heat.engine import constraints from heat.engine import properties from heat.engine import resource from heat.engine import support LOG = logging.getLogger(__name__) DOCKER_INSTALLED = False MIN_API_VERSION_MAP = {'read_only': '1.17', 'cpu_shares': '1.8', 'devices': '1.14', 'cpu_set': '1.12'} DEVICE_PATH_REGEX = r"^/dev/[/_\-a-zA-Z0-9]+$" # conditionally import so tests can work without having the dependency # satisfied try: import docker DOCKER_INSTALLED = True except ImportError: docker = None class DockerContainer(resource.Resource): support_status = support.SupportStatus( status=support.UNSUPPORTED, message=_('This resource is not supported, use at your own risk.')) PROPERTIES = ( DOCKER_ENDPOINT, HOSTNAME, USER, MEMORY, PORT_SPECS, PRIVILEGED, TTY, OPEN_STDIN, STDIN_ONCE, ENV, CMD, DNS, IMAGE, VOLUMES, VOLUMES_FROM, PORT_BINDINGS, LINKS, NAME, RESTART_POLICY, CAP_ADD, CAP_DROP, READ_ONLY, CPU_SHARES, DEVICES, CPU_SET ) = ( 'docker_endpoint', 'hostname', 'user', 'memory', 'port_specs', 'privileged', 'tty', 'open_stdin', 'stdin_once', 'env', 'cmd', 'dns', 'image', 'volumes', 'volumes_from', 'port_bindings', 'links', 'name', 'restart_policy', 'cap_add', 'cap_drop', 'read_only', 'cpu_shares', 'devices', 'cpu_set' ) ATTRIBUTES = ( INFO, NETWORK_INFO, NETWORK_IP, NETWORK_GATEWAY, NETWORK_TCP_PORTS, NETWORK_UDP_PORTS, LOGS, LOGS_HEAD, LOGS_TAIL, ) = ( 'info', 'network_info', 'network_ip', 'network_gateway', 'network_tcp_ports', 'network_udp_ports', 'logs', 'logs_head', 'logs_tail', ) _RESTART_POLICY_KEYS = ( POLICY_NAME, POLICY_MAXIMUM_RETRY_COUNT, ) = ( 'Name', 'MaximumRetryCount', ) _DEVICES_KEYS = ( PATH_ON_HOST, PATH_IN_CONTAINER, PERMISSIONS ) = ( 'path_on_host', 'path_in_container', 'permissions' ) _CAPABILITIES = ['SETPCAP', 'SYS_MODULE', 'SYS_RAWIO', 'SYS_PACCT', 'SYS_ADMIN', 'SYS_NICE', 'SYS_RESOURCE', 'SYS_TIME', 'SYS_TTY_CONFIG', 'MKNOD', 'AUDIT_WRITE', 'AUDIT_CONTROL', 'MAC_OVERRIDE', 'MAC_ADMIN', 'NET_ADMIN', 'SYSLOG', 'CHOWN', 'NET_RAW', 'DAC_OVERRIDE', 'FOWNER', 'DAC_READ_SEARCH', 'FSETID', 'KILL', 'SETGID', 'SETUID', 'LINUX_IMMUTABLE', 'NET_BIND_SERVICE', 'NET_BROADCAST', 'IPC_LOCK', 'IPC_OWNER', 'SYS_CHROOT', 'SYS_PTRACE', 'SYS_BOOT', 'LEASE', 'SETFCAP', 'WAKE_ALARM', 'BLOCK_SUSPEND', 'ALL'] properties_schema = { DOCKER_ENDPOINT: properties.Schema( properties.Schema.STRING, _('Docker daemon endpoint (by default the local docker daemon ' 'will be used).'), default=None ), HOSTNAME: properties.Schema( properties.Schema.STRING, _('Hostname of the container.'), default='' ), USER: properties.Schema( properties.Schema.STRING, _('Username or UID.'), default='' ), MEMORY: properties.Schema( properties.Schema.INTEGER, _('Memory limit (Bytes).') ), PORT_SPECS: properties.Schema( properties.Schema.LIST, _('TCP/UDP ports mapping.'), default=None ), PORT_BINDINGS: properties.Schema( properties.Schema.MAP, _('TCP/UDP ports bindings.'), ), LINKS: properties.Schema( properties.Schema.MAP, _('Links to other containers.'), ), NAME: properties.Schema( properties.Schema.STRING, _('Name of the container.'), ), PRIVILEGED: properties.Schema( properties.Schema.BOOLEAN, _('Enable extended privileges.'), default=False ), TTY: properties.Schema( properties.Schema.BOOLEAN, _('Allocate a pseudo-tty.'), default=False ), OPEN_STDIN: properties.Schema( properties.Schema.BOOLEAN, _('Open stdin.'), default=False ), STDIN_ONCE: properties.Schema( properties.Schema.BOOLEAN, _('If true, close stdin after the 1 attached client disconnects.'), default=False ), ENV: properties.Schema( properties.Schema.LIST, _('Set environment variables.'), ), CMD: properties.Schema( properties.Schema.LIST, _('Command to run after spawning the container.'), default=[] ), DNS: properties.Schema( properties.Schema.LIST, _('Set custom dns servers.'), ), IMAGE: properties.Schema( properties.Schema.STRING, _('Image name.') ), VOLUMES: properties.Schema( properties.Schema.MAP, _('Create a bind mount.'), default={} ), VOLUMES_FROM: properties.Schema( properties.Schema.LIST, _('Mount all specified volumes.'), default='' ), RESTART_POLICY: properties.Schema( properties.Schema.MAP, _('Restart policies (only supported for API version >= 1.2.0).'), schema={ POLICY_NAME: properties.Schema( properties.Schema.STRING, _('The behavior to apply when the container exits.'), default='no', constraints=[ constraints.AllowedValues(['no', 'on-failure', 'always']), ] ), POLICY_MAXIMUM_RETRY_COUNT: properties.Schema( properties.Schema.INTEGER, _('A maximum restart count for the ' 'on-failure policy.'), default=0 ) }, default={}, support_status=support.SupportStatus(version='2015.1') ), CAP_ADD: properties.Schema( properties.Schema.LIST, _('Be used to add kernel capabilities (only supported for ' 'API version >= 1.2.0).'), schema=properties.Schema( properties.Schema.STRING, _('The security features provided by Linux kernels.'), constraints=[ constraints.AllowedValues(_CAPABILITIES), ] ), default=[], support_status=support.SupportStatus(version='2015.1') ), CAP_DROP: properties.Schema( properties.Schema.LIST, _('Be used to drop kernel capabilities (only supported for ' 'API version >= 1.2.0).'), schema=properties.Schema( properties.Schema.STRING, _('The security features provided by Linux kernels.'), constraints=[ constraints.AllowedValues(_CAPABILITIES), ] ), default=[], support_status=support.SupportStatus(version='2015.1') ), READ_ONLY: properties.Schema( properties.Schema.BOOLEAN, _('If true, mount the container\'s root filesystem ' 'as read only (only supported for API version >= %s).') % MIN_API_VERSION_MAP['read_only'], default=False, support_status=support.SupportStatus(version='2015.1'), ), CPU_SHARES: properties.Schema( properties.Schema.INTEGER, _('Relative weight which determines the allocation of the CPU ' 'processing power(only supported for API version >= %s).') % MIN_API_VERSION_MAP['cpu_shares'], default=0, support_status=support.SupportStatus(version='5.0.0'), ), DEVICES: properties.Schema( properties.Schema.LIST, _('Device mappings (only supported for API version >= %s).') % MIN_API_VERSION_MAP['devices'], schema=properties.Schema( properties.Schema.MAP, schema={ PATH_ON_HOST: properties.Schema( properties.Schema.STRING, _('The device path on the host.'), constraints=[ constraints.Length(max=255), constraints.AllowedPattern(DEVICE_PATH_REGEX), ], required=True ), PATH_IN_CONTAINER: properties.Schema( properties.Schema.STRING, _('The device path of the container' ' mappings to the host.'), constraints=[ constraints.Length(max=255), constraints.AllowedPattern(DEVICE_PATH_REGEX), ], ), PERMISSIONS: properties.Schema( properties.Schema.STRING, _('The permissions of the container to' ' read/write/create the devices.'), constraints=[ constraints.AllowedValues(['r', 'w', 'm', 'rw', 'rm', 'wm', 'rwm']), ], default='rwm' ) } ), default=[], support_status=support.SupportStatus(version='5.0.0'), ), CPU_SET: properties.Schema( properties.Schema.STRING, _('The CPUs in which to allow execution ' '(only supported for API version >= %s).') % MIN_API_VERSION_MAP['cpu_set'], support_status=support.SupportStatus(version='5.0.0'), ) } attributes_schema = { INFO: attributes.Schema( _('Container info.') ), NETWORK_INFO: attributes.Schema( _('Container network info.') ), NETWORK_IP: attributes.Schema( _('Container ip address.') ), NETWORK_GATEWAY: attributes.Schema( _('Container ip gateway.') ), NETWORK_TCP_PORTS: attributes.Schema( _('Container TCP ports.') ), NETWORK_UDP_PORTS: attributes.Schema( _('Container UDP ports.') ), LOGS: attributes.Schema( _('Container logs.') ), LOGS_HEAD: attributes.Schema( _('Container first logs line.') ), LOGS_TAIL: attributes.Schema( _('Container last logs line.') ), } def get_client(self): client = None if DOCKER_INSTALLED: endpoint = self.properties.get(self.DOCKER_ENDPOINT) if endpoint: client = docker.APIClient(endpoint) else: client = docker.APIClient() return client def _parse_networkinfo_ports(self, networkinfo): tcp = [] udp = [] for port, info in networkinfo['Ports'].items(): p = port.split('/') if not info or len(p) != 2 or 'HostPort' not in info[0]: continue port = info[0]['HostPort'] if p[1] == 'tcp': tcp.append(port) elif p[1] == 'udp': udp.append(port) return (','.join(tcp), ','.join(udp)) def _container_networkinfo(self, client, resource_id): info = client.inspect_container(self.resource_id) networkinfo = info['NetworkSettings'] ports = self._parse_networkinfo_ports(networkinfo) networkinfo['TcpPorts'] = ports[0] networkinfo['UdpPorts'] = ports[1] return networkinfo def _resolve_attribute(self, name): if not self.resource_id: return if name == 'info': client = self.get_client() return client.inspect_container(self.resource_id) if name == 'network_info': client = self.get_client() networkinfo = self._container_networkinfo(client, self.resource_id) return networkinfo if name == 'network_ip': client = self.get_client() networkinfo = self._container_networkinfo(client, self.resource_id) return networkinfo['IPAddress'] if name == 'network_gateway': client = self.get_client() networkinfo = self._container_networkinfo(client, self.resource_id) return networkinfo['Gateway'] if name == 'network_tcp_ports': client = self.get_client() networkinfo = self._container_networkinfo(client, self.resource_id) return networkinfo['TcpPorts'] if name == 'network_udp_ports': client = self.get_client() networkinfo = self._container_networkinfo(client, self.resource_id) return networkinfo['UdpPorts'] if name == 'logs': client = self.get_client() logs = client.logs(self.resource_id) return logs if name == 'logs_head': client = self.get_client() logs = client.logs(self.resource_id) return logs.split('\n')[0] if name == 'logs_tail': client = self.get_client() logs = client.logs(self.resource_id) return logs.split('\n').pop() def handle_create(self): create_args = { 'image': self.properties[self.IMAGE], 'command': self.properties[self.CMD], 'hostname': self.properties[self.HOSTNAME], 'user': self.properties[self.USER], 'stdin_open': self.properties[self.OPEN_STDIN], 'tty': self.properties[self.TTY], 'mem_limit': self.properties[self.MEMORY], 'ports': self.properties[self.PORT_SPECS], 'environment': self.properties[self.ENV], 'dns': self.properties[self.DNS], 'volumes': self.properties[self.VOLUMES], 'name': self.properties[self.NAME], 'cpu_shares': self.properties[self.CPU_SHARES], 'cpuset': self.properties[self.CPU_SET] } client = self.get_client() client.pull(self.properties[self.IMAGE]) result = client.create_container(**create_args) container_id = result['Id'] self.resource_id_set(container_id) start_args = {} if self.properties[self.PRIVILEGED]: start_args[self.PRIVILEGED] = True if self.properties[self.VOLUMES]: start_args['binds'] = self.properties[self.VOLUMES] if self.properties[self.VOLUMES_FROM]: start_args['volumes_from'] = self.properties[self.VOLUMES_FROM] if self.properties[self.PORT_BINDINGS]: start_args['port_bindings'] = self.properties[self.PORT_BINDINGS] if self.properties[self.LINKS]: start_args['links'] = self.properties[self.LINKS] if self.properties[self.RESTART_POLICY]: start_args['restart_policy'] = self.properties[self.RESTART_POLICY] if self.properties[self.CAP_ADD]: start_args['cap_add'] = self.properties[self.CAP_ADD] if self.properties[self.CAP_DROP]: start_args['cap_drop'] = self.properties[self.CAP_DROP] if self.properties[self.READ_ONLY]: start_args[self.READ_ONLY] = True if (self.properties[self.DEVICES] and not self.properties[self.PRIVILEGED]): start_args['devices'] = self._get_mapping_devices( self.properties[self.DEVICES]) client.start(container_id, **start_args) return container_id def _get_mapping_devices(self, devices): actual_devices = [] for device in devices: if device[self.PATH_IN_CONTAINER]: actual_devices.append(':'.join( [device[self.PATH_ON_HOST], device[self.PATH_IN_CONTAINER], device[self.PERMISSIONS]])) else: actual_devices.append(':'.join( [device[self.PATH_ON_HOST], device[self.PATH_ON_HOST], device[self.PERMISSIONS]])) return actual_devices def _get_container_status(self, container_id): client = self.get_client() info = client.inspect_container(container_id) return info['State'] def check_create_complete(self, container_id): status = self._get_container_status(container_id) exit_status = status.get('ExitCode') if exit_status is not None and exit_status != 0: logs = self.get_client().logs(self.resource_id) raise exception.ResourceInError(resource_status=self.FAILED, status_reason=logs) return status['Running'] def handle_delete(self): if self.resource_id is None: return client = self.get_client() try: client.kill(self.resource_id) except docker.errors.APIError as ex: if ex.response.status_code != 404: raise return self.resource_id def check_delete_complete(self, container_id): if container_id is None: return True try: status = self._get_container_status(container_id) if not status['Running']: client = self.get_client() client.remove_container(container_id) except docker.errors.APIError as ex: if ex.response.status_code == 404: return True raise return False def handle_suspend(self): if not self.resource_id: return client = self.get_client() client.stop(self.resource_id) return self.resource_id def check_suspend_complete(self, container_id): status = self._get_container_status(container_id) return (not status['Running']) def handle_resume(self): if not self.resource_id: return client = self.get_client() client.start(self.resource_id) return self.resource_id def check_resume_complete(self, container_id): status = self._get_container_status(container_id) return status['Running'] def validate(self): super(DockerContainer, self).validate() self._validate_arg_for_api_version() def _validate_arg_for_api_version(self): version = None for key in MIN_API_VERSION_MAP: if self.properties[key]: if not version: client = self.get_client() version = client.version()['ApiVersion'] min_version = MIN_API_VERSION_MAP[key] if compare_version(min_version, version) < 0: raise InvalidArgForVersion(arg=key, min_version=min_version) def resource_mapping(): return { 'DockerInc::Docker::Container': DockerContainer, } def available_resource_mapping(): if DOCKER_INSTALLED: return resource_mapping() else: LOG.warning("Docker plug-in loaded, but docker lib " "not installed.") return {} def compare_version(v1, v2): s1 = packaging.version.Version(v1) s2 = packaging.version.Version(v2) if s1 == s2: return 0 elif s1 > s2: return -1 else: return 1 class InvalidArgForVersion(exception.HeatException): msg_fmt = _('"%(arg)s" is not supported for API version ' '< "%(min_version)s"') ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.239036 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/tests/0000775000175000017500000000000000000000000024132 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/tests/__init__.py0000664000175000017500000000000000000000000026231 0ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/tests/fake_docker_client.py0000664000175000017500000000736200000000000030307 0ustar00zuulzuul00000000000000# # Copyright (c) 2013 Docker, Inc. # All Rights Reserved. # # 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. import random import string from unittest import mock class APIError(Exception): def __init__(self, content, response): super(APIError, self).__init__(content) self.response = response errors = mock.MagicMock() errors.APIError = APIError class FakeResponse (object): def __init__(self, status_code=200, reason='OK'): self.status_code = status_code self.reason = reason self.content = reason class Client(object): def __init__(self, endpoint=None): self._endpoint = endpoint self._containers = {} self.pulled_images = [] self.container_create = [] self.container_start = [] self.version_info = {} def _generate_string(self, n=32): return ''.join(random.choice(string.ascii_lowercase) for i in range(n)) def _check_exists(self, container_id): if container_id not in self._containers: raise APIError( '404 Client Error: Not Found ("No such container: ' '{0}")'.format(container_id), FakeResponse(status_code=404, reason='No such container')) def _set_running(self, container_id, running): self._check_exists(container_id) self._containers[container_id] = running def inspect_container(self, container_id): self._check_exists(container_id) info = { 'Id': container_id, 'NetworkSettings': { 'Bridge': 'docker0', 'Gateway': '172.17.42.1', 'IPAddress': '172.17.0.3', 'IPPrefixLen': 16, 'Ports': { '80/tcp': [{'HostIp': '0.0.0.0', 'HostPort': '1080'}] } }, 'State': { 'Running': self._containers[container_id] } } return info def logs(self, container_id): logs = ['---logs_begin---'] for i in range(random.randint(1, 20)): logs.append(self._generate_string(random.randint(5, 42))) logs.append('---logs_end---') return '\n'.join(logs) def create_container(self, **kwargs): self.container_create.append(kwargs) container_id = self._generate_string() self._containers[container_id] = None self._set_running(container_id, False) return self.inspect_container(container_id) def remove_container(self, container_id, **kwargs): self._check_exists(container_id) del self._containers[container_id] def start(self, container_id, **kwargs): self.container_start.append(kwargs) self._set_running(container_id, True) def stop(self, container_id): self._set_running(container_id, False) def kill(self, container_id): self._set_running(container_id, False) def pull(self, image): self.pulled_images.append(image) def version(self, api_version=True): if not self.version_info: self.version_info['ApiVersion'] = '1.15' return self.version_info def set_api_version(self, version): self.version_info['ApiVersion'] = version ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/heat_docker/tests/test_docker_container.py0000664000175000017500000005166600000000000031072 0ustar00zuulzuul00000000000000# # Copyright (c) 2013 Docker, Inc. # All Rights Reserved. # # 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. from unittest import mock from heat.common import exception from heat.common.i18n import _ from heat.common import template_format from heat.engine import resource from heat.engine import scheduler from heat.tests import common from heat.tests import utils import testtools from heat_docker.resources import docker_container from heat_docker.tests import fake_docker_client as docker docker_container.docker = docker template = ''' { "AWSTemplateFormatVersion": "2010-09-09", "Description": "Test template", "Parameters": {}, "Resources": { "Blog": { "Type": "DockerInc::Docker::Container", "Properties": { "image": "samalba/wordpress", "env": [ "FOO=bar" ] } } } } ''' class DockerContainerTest(common.HeatTestCase): def setUp(self): super(DockerContainerTest, self).setUp() for res_name, res_class in docker_container.resource_mapping().items(): resource._register_class(res_name, res_class) def create_container(self, resource_name): t = template_format.parse(template) self.stack = utils.parse_stack(t) resource = docker_container.DockerContainer( resource_name, self.stack.t.resource_definitions(self.stack)[resource_name], self.stack) self.patchobject(resource, 'get_client', return_value=docker.Client()) self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) return resource def get_container_state(self, resource): client = resource.get_client() return client.inspect_container(resource.resource_id)['State'] def test_resource_create(self): container = self.create_container('Blog') self.assertTrue(container.resource_id) running = self.get_container_state(container)['Running'] self.assertIs(True, running) client = container.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertIsNone(client.container_create[0]['name']) def test_create_with_name(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['name'] = 'super-blog' resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) self.patchobject(resource, 'get_client', return_value=docker.Client()) self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual('super-blog', client.container_create[0]['name']) @mock.patch.object(docker_container.DockerContainer, 'get_client') def test_create_failed(self, test_client): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() mock_client = mock.Mock() mock_client.inspect_container.return_value = { "State": { "ExitCode": -1 } } mock_client.logs.return_value = "Container startup failed" test_client.return_value = mock_client docker_res = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) exc = self.assertRaises(exception.ResourceInError, docker_res.check_create_complete, 'foo') self.assertIn("Container startup failed", str(exc)) def test_start_with_bindings_and_links(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['port_bindings'] = {'80/tcp': [{'HostPort': '80'}]} props['links'] = {'db': 'mysql'} resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) self.patchobject(resource, 'get_client', return_value=docker.Client()) self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual({'db': 'mysql'}, client.container_start[0]['links']) self.assertEqual( {'80/tcp': [{'HostPort': '80'}]}, client.container_start[0]['port_bindings']) def test_resource_attributes(self): container = self.create_container('Blog') # Test network info attributes self.assertEqual('172.17.42.1', container.FnGetAtt('network_gateway')) self.assertEqual('172.17.0.3', container.FnGetAtt('network_ip')) self.assertEqual('1080', container.FnGetAtt('network_tcp_ports')) self.assertEqual('', container.FnGetAtt('network_udp_ports')) # Test logs attributes self.assertEqual('---logs_begin---', container.FnGetAtt('logs_head')) self.assertEqual('---logs_end---', container.FnGetAtt('logs_tail')) # Test a non existing attribute self.assertRaises(exception.InvalidTemplateAttribute, container.FnGetAtt, 'invalid_attribute') @testtools.skipIf(docker is None, 'docker-py not available') def test_resource_delete(self): container = self.create_container('Blog') scheduler.TaskRunner(container.delete)() self.assertEqual((container.DELETE, container.COMPLETE), container.state) exists = True try: self.get_container_state(container)['Running'] except docker.errors.APIError as error: if error.response.status_code == 404: exists = False else: raise self.assertIs(False, exists) @testtools.skipIf(docker is None, 'docker-py not available') def test_resource_delete_exception(self): response = mock.MagicMock() response.status_code = 404 response.content = 'some content' container = self.create_container('Blog') self.patchobject(container.get_client(), 'kill', side_effect=[docker.errors.APIError( 'Not found', response)]) self.patchobject(container, '_get_container_status', side_effect=[docker.errors.APIError( 'Not found', response)]) scheduler.TaskRunner(container.delete)() container.get_client().kill.assert_called_once_with( container.resource_id) container._get_container_status.assert_called_once_with( container.resource_id) def test_resource_suspend_resume(self): container = self.create_container('Blog') # Test suspend scheduler.TaskRunner(container.suspend)() self.assertEqual((container.SUSPEND, container.COMPLETE), container.state) running = self.get_container_state(container)['Running'] self.assertIs(False, running) # Test resume scheduler.TaskRunner(container.resume)() self.assertEqual((container.RESUME, container.COMPLETE), container.state) running = self.get_container_state(container)['Running'] self.assertIs(True, running) def test_start_with_restart_policy_no(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['restart_policy'] = {'Name': 'no', 'MaximumRetryCount': 0} resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual({'Name': 'no', 'MaximumRetryCount': 0}, client.container_start[0]['restart_policy']) def test_start_with_restart_policy_on_failure(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['restart_policy'] = {'Name': 'on-failure', 'MaximumRetryCount': 10} resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual({'Name': 'on-failure', 'MaximumRetryCount': 10}, client.container_start[0]['restart_policy']) def test_start_with_restart_policy_always(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['restart_policy'] = {'Name': 'always', 'MaximumRetryCount': 0} resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual({'Name': 'always', 'MaximumRetryCount': 0}, client.container_start[0]['restart_policy']) def test_start_with_caps(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['cap_add'] = ['NET_ADMIN'] props['cap_drop'] = ['MKNOD'] resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual(['NET_ADMIN'], client.container_start[0]['cap_add']) self.assertEqual(['MKNOD'], client.container_start[0]['cap_drop']) def test_start_with_read_only(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['read_only'] = True resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(resource, 'get_client') get_client_mock.return_value = docker.Client() get_client_mock.return_value.set_api_version('1.17') self.assertIsNone(resource.validate()) scheduler.TaskRunner(resource.create)() self.assertEqual((resource.CREATE, resource.COMPLETE), resource.state) client = resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertIs(True, client.container_start[0]['read_only']) def arg_for_low_api_version(self, arg, value, low_version): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props[arg] = value my_resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(my_resource, 'get_client') get_client_mock.return_value = docker.Client() get_client_mock.return_value.set_api_version(low_version) msg = self.assertRaises(docker_container.InvalidArgForVersion, my_resource.validate) min_version = docker_container.MIN_API_VERSION_MAP[arg] args = dict(arg=arg, min_version=min_version) expected = _('"%(arg)s" is not supported for API version ' '< "%(min_version)s"') % args self.assertEqual(expected, str(msg)) def test_start_with_read_only_for_low_api_version(self): self.arg_for_low_api_version('read_only', True, '1.16') def test_compare_version(self): self.assertEqual(docker_container.compare_version('1.17', '1.17'), 0) self.assertEqual(docker_container.compare_version('1.17', '1.16'), -1) self.assertEqual(docker_container.compare_version('1.17', '1.18'), 1) def test_create_with_cpu_shares(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['cpu_shares'] = 512 my_resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(my_resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(my_resource.validate()) scheduler.TaskRunner(my_resource.create)() self.assertEqual((my_resource.CREATE, my_resource.COMPLETE), my_resource.state) client = my_resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual(512, client.container_create[0]['cpu_shares']) def test_create_with_cpu_shares_for_low_api_version(self): self.arg_for_low_api_version('cpu_shares', 512, '1.7') def test_start_with_mapping_devices(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['devices'] = ( [{'path_on_host': '/dev/sda', 'path_in_container': '/dev/xvdc', 'permissions': 'r'}, {'path_on_host': '/dev/mapper/a_bc-d', 'path_in_container': '/dev/xvdd', 'permissions': 'rw'}]) my_resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(my_resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(my_resource.validate()) scheduler.TaskRunner(my_resource.create)() self.assertEqual((my_resource.CREATE, my_resource.COMPLETE), my_resource.state) client = my_resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual(['/dev/sda:/dev/xvdc:r', '/dev/mapper/a_bc-d:/dev/xvdd:rw'], client.container_start[0]['devices']) def test_start_with_mapping_devices_also_with_privileged(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['devices'] = ( [{'path_on_host': '/dev/sdb', 'path_in_container': '/dev/xvdc', 'permissions': 'r'}]) props['privileged'] = True my_resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(my_resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(my_resource.validate()) scheduler.TaskRunner(my_resource.create)() self.assertEqual((my_resource.CREATE, my_resource.COMPLETE), my_resource.state) client = my_resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertNotIn('devices', client.container_start[0]) def test_start_with_mapping_devices_for_low_api_version(self): value = ([{'path_on_host': '/dev/sda', 'path_in_container': '/dev/xvdc', 'permissions': 'rwm'}]) self.arg_for_low_api_version('devices', value, '1.13') def test_start_with_mapping_devices_not_set_path_in_container(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['devices'] = [{'path_on_host': '/dev/sda', 'permissions': 'rwm'}] my_resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(my_resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(my_resource.validate()) scheduler.TaskRunner(my_resource.create)() self.assertEqual((my_resource.CREATE, my_resource.COMPLETE), my_resource.state) client = my_resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual(['/dev/sda:/dev/sda:rwm'], client.container_start[0]['devices']) def test_create_with_cpu_set(self): t = template_format.parse(template) self.stack = utils.parse_stack(t) definition = self.stack.t.resource_definitions(self.stack)['Blog'] props = t['Resources']['Blog']['Properties'].copy() props['cpu_set'] = '0-8,16-24,28' my_resource = docker_container.DockerContainer( 'Blog', definition.freeze(properties=props), self.stack) get_client_mock = self.patchobject(my_resource, 'get_client') get_client_mock.return_value = docker.Client() self.assertIsNone(my_resource.validate()) scheduler.TaskRunner(my_resource.create)() self.assertEqual((my_resource.CREATE, my_resource.COMPLETE), my_resource.state) client = my_resource.get_client() self.assertEqual(['samalba/wordpress'], client.pulled_images) self.assertEqual('0-8,16-24,28', client.container_create[0]['cpuset']) def test_create_with_cpu_set_for_low_api_version(self): self.arg_for_low_api_version('cpu_set', '0-8,^2', '1.11') ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/requirements.txt0000664000175000017500000000003400000000000024001 0ustar00zuulzuul00000000000000docker>=2.4.2 # Apache-2.0 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/setup.cfg0000664000175000017500000000135500000000000022345 0ustar00zuulzuul00000000000000[metadata] name = heat-contrib-docker summary = Heat resource for Docker containers description-file = README.md author = OpenStack author-email = openstack-discuss@lists.openstack.org home-page = https://docs.openstack.org/heat/latest/ classifier = Environment :: OpenStack Intended Audience :: Information Technology Intended Audience :: System Administrators License :: OSI Approved :: Apache Software License Operating System :: POSIX :: Linux Programming Language :: Python Programming Language :: Python :: 2 Programming Language :: Python :: 2.7 [files] # Copy to /usr/lib/heat for plugin loading data_files = lib/heat/docker = heat_docker/resources/* [global] setup-hooks = pbr.hooks.setup_hook ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/contrib/heat_docker/setup.py0000664000175000017500000000202500000000000022231 0ustar00zuulzuul00000000000000#!/usr/bin/env python # Copyright (c) 2013 Hewlett-Packard Development Company, L.P. # # 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. # THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT import setuptools # In python < 2.7.4, a lazy loading of package `pbr` will break # setuptools if some other modules registered functions in `atexit`. # solution from: http://bugs.python.org/issue15881#msg170215 try: import multiprocessing # noqa except ImportError: pass setuptools.setup( setup_requires=['pbr'], pbr=True) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.243036 openstack_heat-24.0.0/devstack/0000775000175000017500000000000000000000000016414 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/devstack/README.rst0000664000175000017500000000054700000000000020111 0ustar00zuulzuul00000000000000========================= Enabling heat in DevStack ========================= 1. Download DevStack:: git clone https://opendev.org/openstack-dev/devstack cd devstack 2. Add this repo as an external repository into your ``local.conf`` file:: [[local|localrc]] enable_plugin heat https://opendev.org/openstack/heat 3. Run ``stack.sh``. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.243036 openstack_heat-24.0.0/devstack/lib/0000775000175000017500000000000000000000000017162 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/devstack/lib/heat0000664000175000017500000003756100000000000020042 0ustar00zuulzuul00000000000000#!/bin/bash # # lib/heat # Install and start **Heat** service # To enable, add the following to localrc # # ENABLED_SERVICES+=,heat,h-api,h-api-cfn,h-eng # Dependencies: # (none) # stack.sh # --------- # - install_heatclient # - install_heat # - configure_heatclient # - configure_heat # - init_heat # - start_heat # - stop_heat # - cleanup_heat # Save trace setting _XTRACE_HEAT=$(set +o | grep xtrace) set +o xtrace # Defaults # -------- # set up default directories GITDIR["python-heatclient"]=$DEST/python-heatclient # python heat client library GITREPO["python-heatclient"]=${HEATCLIENT_REPO:-${GIT_BASE}/openstack/python-heatclient.git} GITBRANCH["python-heatclient"]=${HEATCLIENT_BRANCH:-master} HEAT_DIR=$DEST/heat HEAT_HTTPD_VHOST_FILES_DIR=$HEAT_DIR/etc/heat/httpd HEAT_STANDALONE=$(trueorfalse False HEAT_STANDALONE) HEAT_ENABLE_ADOPT_ABANDON=$(trueorfalse False HEAT_ENABLE_ADOPT_ABANDON) HEAT_CONF_DIR=/etc/heat HEAT_CONF=$HEAT_CONF_DIR/heat.conf HEAT_ENV_DIR=$HEAT_CONF_DIR/environment.d HEAT_TEMPLATES_DIR=$HEAT_CONF_DIR/templates HEAT_API_HOST=${HEAT_API_HOST:-$SERVICE_HOST} HEAT_API_PORT=${HEAT_API_PORT:-8004} HEAT_API_CFN_HOST=${HEAT_API_CFN_HOST:-$SERVICE_HOST} HEAT_API_CFN_PORT=${HEAT_API_CFN_PORT:-8000} HEAT_SERVICE_USER=${HEAT_SERVICE_USER:-heat} HEAT_TRUSTEE_USER=${HEAT_TRUSTEE_USER:-$HEAT_SERVICE_USER} HEAT_TRUSTEE_PASSWORD=${HEAT_TRUSTEE_PASSWORD:-$SERVICE_PASSWORD} HEAT_TRUSTEE_DOMAIN=${HEAT_TRUSTEE_DOMAIN:-default} # Support entry points installation of console scripts HEAT_BIN_DIR=$(get_python_exec_prefix) HEAT_API_UWSGI_CONF=$HEAT_CONF_DIR/heat-api-uwsgi.ini HEAT_CFN_API_UWSGI_CONF=$HEAT_CONF_DIR/heat-api-cfn-uwsgi.ini HEAT_API_UWSGI=heat.wsgi.api:application HEAT_CFN_API_UWSGI=heat.wsgi.cfn:application # Flag to set the oslo_policy.enforce_scope and oslo_policy.enforce_new_defaults. # This is used to disable the compute API policies scope and new defaults. # By Default, it is True. # For more detail: https://docs.openstack.org/oslo.policy/latest/configuration/index.html#oslo_policy.enforce_scope HEAT_ENFORCE_SCOPE=$(trueorfalse True HEAT_ENFORCE_SCOPE) # other default options if [[ "$HEAT_STANDALONE" == "True" ]]; then # for standalone, use defaults which require no service user HEAT_STACK_DOMAIN=$(trueorfalse False HEAT_STACK_DOMAIN) HEAT_DEFERRED_AUTH=${HEAT_DEFERRED_AUTH:-password} if [[ ${HEAT_DEFERRED_AUTH} != "password" ]]; then # Heat does not support keystone trusts when deployed in # standalone mode die $LINENO \ 'HEAT_DEFERRED_AUTH can only be set to "password" when HEAT_STANDALONE is True.' fi else HEAT_STACK_DOMAIN=$(trueorfalse True HEAT_STACK_DOMAIN) HEAT_DEFERRED_AUTH=${HEAT_DEFERRED_AUTH:-} fi HEAT_PLUGIN_DIR=${HEAT_PLUGIN_DIR:-$DATA_DIR/heat/plugins} ENABLE_HEAT_PLUGINS=${ENABLE_HEAT_PLUGINS:-} HEAT_ENGINE_WORKERS=${HEAT_ENGINE_WORKERS:=$(( ($(nproc)/4)<2 ? 2 : ($(nproc)/4) ))} # Functions # --------- # Test if any Heat services are enabled # is_heat_enabled function is_heat_enabled { [[ ,${ENABLED_SERVICES} =~ ,"h-" ]] && return 0 return 1 } # cleanup_heat() - Remove residual data files, anything left over from previous # runs that a clean run would need to clean up function cleanup_heat { remove_uwsgi_config "$HEAT_API_UWSGI_CONF" "$HEAT_API_UWSGI" remove_uwsgi_config "$HEAT_CFN_API_UWSGI_CONF" "$HEAT_CFN_API_UWSGI" sudo rm -rf $HEAT_ENV_DIR sudo rm -rf $HEAT_TEMPLATES_DIR sudo rm -rf $HEAT_CONF_DIR } # configure_heat() - Set config files, create data dirs, etc function configure_heat { sudo install -d -o $STACK_USER $HEAT_CONF_DIR # remove old config files rm -f $HEAT_CONF_DIR/heat-*.conf HEAT_API_PASTE_FILE=$HEAT_CONF_DIR/api-paste.ini cp $HEAT_DIR/etc/heat/api-paste.ini $HEAT_API_PASTE_FILE # common options iniset_rpc_backend heat $HEAT_CONF iniset $HEAT_CONF DEFAULT heat_metadata_server_url http://$HEAT_API_CFN_HOST/heat-api-cfn iniset $HEAT_CONF DEFAULT heat_waitcondition_server_url http://$HEAT_API_CFN_HOST/heat-api-cfn/v1/waitcondition iniset $HEAT_CONF database connection `database_connection_url heat` # we are using a hardcoded auth_encryption_key as it has to be the same for # multinode deployment. iniset $HEAT_CONF DEFAULT auth_encryption_key "767c3ed056cbaa3b9dfedb8c6f825bf0" iniset $HEAT_CONF DEFAULT region_name_for_services "$REGION_NAME" # logging iniset $HEAT_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL # reduce Heat engine workers iniset $HEAT_CONF DEFAULT num_engine_workers "$HEAT_ENGINE_WORKERS" # Format logging setup_logging $HEAT_CONF if [[ ! -z "$HEAT_DEFERRED_AUTH" ]]; then iniset $HEAT_CONF DEFAULT deferred_auth_method $HEAT_DEFERRED_AUTH fi write_uwsgi_config "$HEAT_API_UWSGI_CONF" "$HEAT_API_UWSGI" "/heat-api" "" "heat-api" # configure threads for h-api to avoid IO wait and messaging timeout. We use # 'nproc/4' to calculate API workers, hence, 4 would be probably correct # approximation. iniset "$HEAT_API_UWSGI_CONF" uwsgi threads 4 write_uwsgi_config "$HEAT_CFN_API_UWSGI_CONF" "$HEAT_CFN_API_UWSGI" "/heat-api-cfn" "" "heat-api-cfn" if [[ "$HEAT_STANDALONE" = "True" ]]; then iniset $HEAT_CONF paste_deploy flavor standalone iniset $HEAT_CONF clients_heat url "http://$HEAT_API_HOST:$HEAT_API_PORT/v1/%(tenant_id)s" else configure_keystone_authtoken_middleware $HEAT_CONF heat fi # If HEAT_DEFERRED_AUTH is unset or explicitly set to trusts, configure # the section for the client plugin associated with the trustee if [ -z "$HEAT_DEFERRED_AUTH" -o "trusts" == "$HEAT_DEFERRED_AUTH" ]; then iniset $HEAT_CONF trustee auth_type password iniset $HEAT_CONF trustee auth_url $KEYSTONE_AUTH_URI iniset $HEAT_CONF trustee username $HEAT_TRUSTEE_USER iniset $HEAT_CONF trustee password $HEAT_TRUSTEE_PASSWORD iniset $HEAT_CONF trustee user_domain_id $HEAT_TRUSTEE_DOMAIN fi # clients_keystone iniset $HEAT_CONF clients_keystone auth_uri $KEYSTONE_AUTH_URI # OpenStack API iniset $HEAT_CONF heat_api bind_port $HEAT_API_PORT iniset $HEAT_CONF heat_api workers "$API_WORKERS" # Cloudformation API iniset $HEAT_CONF heat_api_cfn bind_port $HEAT_API_CFN_PORT if is_service_enabled tls-proxy; then iniset $HEAT_CONF clients_keystone ca_file $SSL_BUNDLE_FILE iniset $HEAT_CONF clients_nova ca_file $SSL_BUNDLE_FILE iniset $HEAT_CONF clients_cinder ca_file $SSL_BUNDLE_FILE iniset $HEAT_CONF clients_neutron ca_file $SSL_BUNDLE_FILE iniset $HEAT_CONF clients_glance ca_file $SSL_BUNDLE_FILE iniset $HEAT_CONF clients_swift ca_file $SSL_BUNDLE_FILE fi if [[ "$HEAT_ENABLE_ADOPT_ABANDON" = "True" ]]; then iniset $HEAT_CONF DEFAULT enable_stack_adopt true iniset $HEAT_CONF DEFAULT enable_stack_abandon true fi iniset $HEAT_CONF cache enabled "True" iniset $HEAT_CONF cache backend "dogpile.cache.memory" if ! is_service_enabled c-bak; then iniset $HEAT_CONF volumes backups_enabled false fi if [[ "$HEAT_ENFORCE_SCOPE" == True || "$ENFORCE_SCOPE" == True ]] ; then iniset $HEAT_CONF oslo_policy enforce_scope true iniset $HEAT_CONF oslo_policy enforce_new_defaults true else iniset $HEAT_CONF oslo_policy enforce_scope false iniset $HEAT_CONF oslo_policy enforce_new_defaults false fi sudo install -d -o $STACK_USER $HEAT_ENV_DIR $HEAT_TEMPLATES_DIR # copy the default environment cp $HEAT_DIR/etc/heat/environment.d/* $HEAT_ENV_DIR/ # copy the default templates cp $HEAT_DIR/etc/heat/templates/* $HEAT_TEMPLATES_DIR/ # Enable heat plugins. # NOTE(nic): The symlink nonsense is necessary because when # plugins are installed in "developer mode", the final component # of their target directory is always "resources", which confuses # Heat's plugin loader into believing that all plugins are named # "resources", and therefore are all the same plugin; so it # will only load one of them. Linking them all to a common # location with unique names avoids that type of collision, # while still allowing the plugins to be edited in-tree. local err_count=0 if [[ -n "$ENABLE_HEAT_PLUGINS" ]]; then mkdir -p $HEAT_PLUGIN_DIR # Clean up cruft from any previous runs rm -f $HEAT_PLUGIN_DIR/* iniset $HEAT_CONF DEFAULT plugin_dirs $HEAT_PLUGIN_DIR fi for heat_plugin in $ENABLE_HEAT_PLUGINS; do if [[ -d $HEAT_DIR/contrib/$heat_plugin ]]; then setup_package $HEAT_DIR/contrib/$heat_plugin -e ln -s $HEAT_DIR/contrib/$heat_plugin/$heat_plugin/resources $HEAT_PLUGIN_DIR/$heat_plugin else : # clear retval on the test so that we can roll up errors err $LINENO "Requested Heat plugin(${heat_plugin}) not found." err_count=$(($err_count + 1)) fi done [ $err_count -eq 0 ] || die $LINENO "$err_count of the requested Heat plugins could not be installed." } # init_heat() - Initialize database function init_heat { # recreate db only if one of the db services is enabled if is_service_enabled $DATABASE_BACKENDS; then # (re)create heat database recreate_database heat $HEAT_BIN_DIR/heat-manage db_sync fi } # install_heatclient() - Collect source and prepare function install_heatclient { if use_library_from_git "python-heatclient"; then git_clone_by_name "python-heatclient" setup_dev_lib "python-heatclient" sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-heatclient"]}/tools/,/etc/bash_completion.d/}heat.bash_completion fi } # install_heat() - Collect source and prepare function install_heat { setup_develop $HEAT_DIR pip_install uwsgi if [[ "$GLOBAL_VENV" == "True" ]] ; then # TODO(tkajinam): find a better solution for this sudo ln -sf $HEAT_BIN_DIR/heat-manage /usr/local/bin fi } # start_heat() - Start running processes, including screen function start_heat { run_process h-eng "$HEAT_BIN_DIR/heat-engine --config-file=$HEAT_CONF" # If the site is not enabled then we are in a grenade scenario run_process h-api "$HEAT_BIN_DIR/uwsgi --ini $HEAT_API_UWSGI_CONF" "" run_process h-api-cfn "$HEAT_BIN_DIR/uwsgi --ini $HEAT_CFN_API_UWSGI_CONF" "" } # stop_heat() - Stop running processes function stop_heat { # Kill the screen windows stop_process h-api stop_process h-api-cfn stop_process h-eng } # create_heat_accounts() - Set up common required heat accounts function create_heat_accounts { if [[ "$HEAT_STANDALONE" != "True" ]]; then create_service_user "heat" "admin" get_or_create_service "heat" "orchestration" "Heat Orchestration Service" get_or_create_endpoint \ "orchestration" \ "$REGION_NAME" \ "$SERVICE_PROTOCOL://$HEAT_API_HOST/heat-api/v1/\$(project_id)s" get_or_create_service "heat-cfn" "cloudformation" "Heat CloudFormation Service" get_or_create_endpoint \ "cloudformation" \ "$REGION_NAME" \ "$SERVICE_PROTOCOL://$HEAT_API_CFN_HOST/heat-api-cfn/v1" # heat_stack_user role is for users created by Heat get_or_create_role "heat_stack_user" fi if [[ "$HEAT_STACK_DOMAIN" == "True" ]]; then # domain -> heat and user -> heat_domain_admin domain_id=$(get_or_create_domain heat 'Owns users and projects created by heat') iniset $HEAT_CONF DEFAULT stack_user_domain_id ${domain_id} get_or_create_user heat_domain_admin $SERVICE_PASSWORD heat get_or_add_user_domain_role admin heat_domain_admin heat iniset $HEAT_CONF DEFAULT stack_domain_admin heat_domain_admin iniset $HEAT_CONF DEFAULT stack_domain_admin_password $SERVICE_PASSWORD fi } # configure_tempest_for_heat() # NOTE (gmann): Configure all the Tempest setting for Heat service in # this function. function configure_tempest_for_heat { # Skip SoftwareConfigIntegrationTest because it requires a custom image SKIP_SCENARIO_TEST_LIST='SoftwareConfigIntegrationTest' SKIP_SCENARIO_TEST_LIST+=',AodhAlarmTest' # Skip CfnInitIntegrationTest as latest fedora images don't have heat-cfntools SKIP_SCENARIO_TEST_LIST+=',CfnInitIntegrationTest' iniset $TEMPEST_CONFIG heat_plugin skip_scenario_test_list $SKIP_SCENARIO_TEST_LIST SKIP_FUNCTIONAL_TEST_LIST='NotificationTest' iniset $TEMPEST_CONFIG heat_plugin skip_functional_test_list $SKIP_FUNCTIONAL_TEST_LIST openstack flavor show m1.heat_int || openstack flavor create m1.heat_int --ram 1024 --vcpus 2 --disk 10 openstack flavor show m1.heat_micro || openstack flavor create m1.heat_micro --ram 128 --disk 1 export OS_CLOUD=devstack openstack network show heat-net || openstack network create heat-net openstack subnet show heat-subnet || openstack subnet create heat-subnet --network heat-net --subnet-range 10.0.5.0/24 openstack router add subnet router1 heat-subnet # NOTE(ianw) OpenDev infra only keeps the latest two Fedora's # around; prefer the mirror but allow fallback if [[ -e /etc/ci/mirror_info.sh ]]; then source /etc/ci/mirror_info.sh fi HEAT_TEST_FEDORA_IMAGE_UPSTREAM=https://download.fedoraproject.org/pub/fedora/linux HEAT_TEST_FEDORA_IMAGE_UPSTREAM_ARCHIVE=https://download.fedoraproject.org/pub/archive/fedora/linux/ HEAT_TEST_FEDORA_IMAGE_PATH=releases/37/Cloud/x86_64/images/Fedora-Cloud-Base-37-1.7.x86_64.qcow2 if curl --location --output /dev/null --silent --head --fail "${NODEPOOL_FEDORA_MIRROR}/${HEAT_TEST_FEDORA_IMAGE_PATH}"; then export HEAT_TEST_FEDORA_IMAGE="${NODEPOOL_FEDORA_MIRROR}/${HEAT_TEST_FEDORA_IMAGE_PATH}" elif curl --location --output /dev/null --silent --head --fail "${HEAT_TEST_FEDORA_IMAGE_UPSTREAM}/${HEAT_TEST_FEDORA_IMAGE_PATH}"; then export HEAT_TEST_FEDORA_IMAGE="${HEAT_TEST_FEDORA_IMAGE_UPSTREAM}/${HEAT_TEST_FEDORA_IMAGE_PATH}" else export HEAT_TEST_FEDORA_IMAGE="${HEAT_TEST_FEDORA_IMAGE_UPSTREAM_ARCHIVE}/${HEAT_TEST_FEDORA_IMAGE_PATH}" fi TOKEN=$(openstack token issue -c id -f value) local image_exists=$( openstack image list | grep "Fedora-Cloud-Base-37-1.7.x86_64" ) if [[ -z $image_exists ]]; then if is_service_enabled g-api; then upload_image $HEAT_TEST_FEDORA_IMAGE $TOKEN fi fi if is_service_enabled tls-proxy; then iniset $TEMPEST_CONFIG heat_plugin ca_file $SSL_BUNDLE_FILE fi # add application credential and secret to support test multi-cloud app_cred_id=$(openstack application credential show heat_multicloud || openstack application credential create heat_multicloud \ --secret secret --unrestricted -c id -f value) export OS_CREDENTIAL_SECRET_ID=$(openstack secret store -n heat-multi-cloud-test-cred --payload \ '{"auth_type": "v3applicationcredential", "auth": {"auth_url": $OS_AUTH_URL, "application_credential_id": $app_cred_id, "application_credential_secret": "secret"}}'\ -c "Secret href" -f value) source $TOP_DIR/openrc demo demo iniset $TEMPEST_CONFIG heat_plugin username $OS_USERNAME iniset $TEMPEST_CONFIG heat_plugin password $OS_PASSWORD iniset $TEMPEST_CONFIG heat_plugin project_name $OS_PROJECT_NAME iniset $TEMPEST_CONFIG heat_plugin auth_url $OS_AUTH_URL iniset $TEMPEST_CONFIG heat_plugin user_domain_id $OS_USER_DOMAIN_ID iniset $TEMPEST_CONFIG heat_plugin project_domain_id $OS_PROJECT_DOMAIN_ID iniset $TEMPEST_CONFIG heat_plugin user_domain_name $OS_USER_DOMAIN_NAME iniset $TEMPEST_CONFIG heat_plugin project_domain_name $OS_PROJECT_DOMAIN_NAME iniset $TEMPEST_CONFIG heat_plugin region $OS_REGION_NAME source $TOP_DIR/openrc admin admin iniset $TEMPEST_CONFIG heat_plugin admin_username $OS_USERNAME iniset $TEMPEST_CONFIG heat_plugin admin_password $OS_PASSWORD export OS_CLOUD=devstack-admin } # Restore xtrace $_XTRACE_HEAT ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/devstack/plugin.sh0000664000175000017500000000245300000000000020252 0ustar00zuulzuul00000000000000# heat.sh - Devstack extras script to install heat # Save trace setting XTRACE=$(set +o | grep xtrace) set -o xtrace echo_summary "heat's plugin.sh was called..." source $DEST/heat/devstack/lib/heat (set -o posix; set) if is_heat_enabled; then if [[ "$1" == "stack" && "$2" == "install" ]]; then echo_summary "Installing heat" # Use stack_install_service here to account for virtualenv stack_install_service heat echo_summary "Installing heatclient" install_heatclient elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then if is_service_enabled tempest; then echo_summary "Configuring Tempest for Heat" configure_tempest_for_heat fi elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then echo_summary "Cleaning up heat" cleanup_heat echo_summary "Configuring heat" configure_heat create_heat_accounts elif [[ "$1" == "stack" && "$2" == "extra" ]]; then # Initialize heat init_heat # Start the heat API and heat taskmgr components echo_summary "Starting heat" start_heat fi if [[ "$1" == "unstack" ]]; then stop_heat fi if [[ "$1" == "clean" ]]; then cleanup_heat fi fi # Restore xtrace $XTRACE ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/devstack/settings0000664000175000017500000000026600000000000020203 0ustar00zuulzuul00000000000000# Devstack settings # We have to add Heat to enabled services for screen_it to work # It consists of three parts enable_service h-eng enable_service h-api enable_service h-api-cfn ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.243036 openstack_heat-24.0.0/devstack/upgrade/0000775000175000017500000000000000000000000020043 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/devstack/upgrade/resources.sh0000775000175000017500000001455600000000000022427 0ustar00zuulzuul00000000000000#!/bin/bash # # 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. set -o errexit source $GRENADE_DIR/grenaderc source $GRENADE_DIR/functions source $TOP_DIR/openrc admin admin source $TOP_DIR/inc/ini-config set -o xtrace HEAT_USER=heat_grenade HEAT_PROJECT=heat_grenade HEAT_PASS=pass DEFAULT_DOMAIN=default function _heat_set_user { OS_TENANT_NAME=$HEAT_PROJECT OS_PROJECT_NAME=$HEAT_PROJECT OS_USERNAME=$HEAT_USER OS_PASSWORD=$HEAT_PASS OS_USER_DOMAIN_ID=$DEFAULT_DOMAIN OS_PROJECT_DOMAIN_ID=$DEFAULT_DOMAIN } function _write_heat_integrationtests { local upgrade_tests=$1 cat > $upgrade_tests <&2 echo "*********************************************************************" # Kill ourselves to signal any calling process trap 2; kill -2 $$ } trap cleanup SIGHUP SIGINT SIGTERM # Keep track of the grenade directory RUN_DIR=$(cd $(dirname "$0") && pwd) # Source params source $GRENADE_DIR/grenaderc # Import common functions source $GRENADE_DIR/functions # This script exits on an error so that errors don't compound and you see # only the first error that occurred. set -o errexit # Upgrade Heat # ============ # Locate heat devstack plugin, the directory above the # grenade plugin. HEAT_DEVSTACK_DIR=$(dirname $(dirname $0)) # Duplicate some setup bits from target DevStack source $TARGET_DEVSTACK_DIR/functions source $TARGET_DEVSTACK_DIR/stackrc source $TARGET_DEVSTACK_DIR/lib/tls source $TARGET_DEVSTACK_DIR/lib/stack source $TARGET_DEVSTACK_DIR/lib/apache source $TARGET_DEVSTACK_DIR/lib/rpc_backend # Get heat functions from devstack plugin source $HEAT_DEVSTACK_DIR/lib/heat # Print the commands being run so that we can see the command that triggers # an error. It is also useful for following allowing as the install occurs. set -o xtrace # Save current config files for posterity [[ -d $SAVE_DIR/etc.heat ]] || cp -pr $HEAT_CONF_DIR $SAVE_DIR/etc.heat # Install the target heat source $HEAT_DEVSTACK_DIR/plugin.sh stack install # Change transport-url in the host which runs upgrade script (primary) if [[ "${HOST_TOPOLOGY}" == "multinode" ]]; then vhost="newvhost" rpc_backend_add_vhost $vhost iniset_rpc_backend heat $HEAT_CONF DEFAULT $vhost fi # calls upgrade-heat for specific release upgrade_project heat $RUN_DIR $BASE_DEVSTACK_BRANCH $TARGET_DEVSTACK_BRANCH # Simulate init_heat() HEAT_BIN_DIR=$(get_python_exec_prefix) $HEAT_BIN_DIR/heat-manage --config-file $HEAT_CONF db_sync || die $LINENO "DB sync error" # Start Heat start_heat # Don't succeed unless the services come up # Truncating some service names to 11 characters ensure_services_started heat-api heat-engine h-api-cfn set +o xtrace echo "*********************************************************************" echo "SUCCESS: End $0" echo "*********************************************************************" ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.243036 openstack_heat-24.0.0/doc/0000775000175000017500000000000000000000000015355 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/.gitignore0000664000175000017500000000001700000000000017343 0ustar00zuulzuul00000000000000target/ build/ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/Makefile0000664000175000017500000001317100000000000017020 0ustar00zuulzuul00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " xml to make Docutils-native XML files" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Heat.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Heat.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/Heat" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Heat" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." xml: $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml @echo @echo "Build finished. The xml files are in $(BUILDDIR)/xml." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/README.rst0000664000175000017500000000135500000000000017050 0ustar00zuulzuul00000000000000=========================== Building the developer docs =========================== For user and admin docs, go to the directory `doc/docbkx`. Dependencies ============ You'll need to install python *Sphinx* package and *oslosphinx* package: :: sudo pip install sphinx oslosphinx If you are using the virtualenv you'll need to install them in the virtualenv. Get Help ======== Just type make to get help: :: make It will list available build targets. Build Doc ========= To build the man pages: :: make man To build the developer documentation as HTML: :: make html Type *make* for more formats. Test Doc ======== If you modify doc files, you can type: :: make doctest to check whether the format has problem. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/requirements.txt0000664000175000017500000000027300000000000020643 0ustar00zuulzuul00000000000000openstackdocstheme>=2.2.1 # Apache-2.0 os-api-ref>=1.4.0 # Apache-2.0 sphinx>=2.0.0 # BSD reno>=3.1.0 # Apache-2.0 sphinxcontrib-apidoc>=0.2.0 # BSD sphinxcontrib-httpdomain>=1.3.0 # BSD ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.247036 openstack_heat-24.0.0/doc/source/0000775000175000017500000000000000000000000016655 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.247036 openstack_heat-24.0.0/doc/source/_extra/0000775000175000017500000000000000000000000020137 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/_extra/.htaccess0000664000175000017500000000103700000000000021736 0ustar00zuulzuul00000000000000redirectmatch 301 ^/heat/([^/]+)/(architecture|pluginguide|schedulerhints|gmr|supportstatus)\.html$ /heat/$1/developing_guides/$2.html redirectmatch 301 ^/heat/([^/]+)/(scale_deployment)\.html$ /heat/$1/operating_guides/$2.html redirectmatch 301 ^/heat/([^/]+)/configuration/(api|clients)\.html /heat/$1/configuration/config-options.html redirectmatch 301 ^/heat/([^/]+)/contributing/(index|blueprints)\.html /heat/$1/developing_guides/$2.html redirectmatch 301 ^/heat/([^/]+)/contributor/(blueprints)\.html /heat/$1/developing_guides/$2.html ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.247036 openstack_heat-24.0.0/doc/source/_static/0000775000175000017500000000000000000000000020303 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/_static/.placeholder0000664000175000017500000000000000000000000022554 0ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.247036 openstack_heat-24.0.0/doc/source/_templates/0000775000175000017500000000000000000000000021012 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/_templates/.placeholder0000664000175000017500000000000000000000000023263 0ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.247036 openstack_heat-24.0.0/doc/source/admin/0000775000175000017500000000000000000000000017745 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/admin/auth-model.rst0000664000175000017500000001274300000000000022545 0ustar00zuulzuul00000000000000.. _orchestration-auth-model: ================================= Orchestration authorization model ================================= The Orchestration authorization model defines the authorization process for requests during deferred operations. A common example is an auto-scaling group update. During the auto-scaling update operation, the Orchestration service requests resources of other components (such as servers from Compute or networks from Networking) to extend or reduce the capacity of an auto-scaling group. The Orchestration service provides the following authorization models: * Password authorization * OpenStack Identity trusts authorization Password authorization ~~~~~~~~~~~~~~~~~~~~~~ The Orchestration service supports password authorization. Password authorization requires that a user pass a username and password to the Orchestration service. Encrypted password are stored in the database, and used for deferred operations. Password authorization involves the following steps: #. A user requests stack creation, by providing a token and username and password. The Dashboard or python-heatclient requests the token on the user's behalf. #. If the stack contains any resources that require deferred operations, then the orchestration engine fails its validation checks if the user did not provide a valid username/password. #. The username/password are encrypted and stored in the Orchestration database. #. Orchestration creates a stack. #. Later, the Orchestration service retrieves the credentials and requests another token on behalf of the user. The token is not limited in scope and provides access to all the roles of the stack owner. OpenStack Identity trusts authorization ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A trust is an OpenStack Identity extension that enables delegation, and optionally impersonation through the OpenStack Identity service. The key terminology is *trustor* (the user delegating) and *trustee* (the user being delegated to). To create a trust, the *trustor* (in this case, the user creating the stack in the Orchestration service) provides the OpenStack Identity service with the following information: * The ID of the *trustee* (who you want to delegate to, in this case, the Orchestration service user). * The roles to be delegated. Configure roles through the ``heat.conf`` file. Ensure the configuration contains whatever roles are required to perform the deferred operations on the user's behalf. For example, launching an OpenStack Compute instance in response to an auto-scaling event. * Whether to enable impersonation. The OpenStack Identity service provides a *trust ID*, which is consumed by *only* the trustee to obtain a *trust scoped token*. This token is limited in scope, such that the trustee has limited access to those roles delegated. In addition, the trustee has effective impersonation of the trustor user if it was selected when creating the trust. For more information, see :keystone-doc:`Identity management trusts `. Trusts authorization involves the following steps: #. A user creates a stack through an API request (only the token is required). #. The Orchestration service uses the token to create a trust between the stack owner (trustor) and the Orchestration service user (trustee). The service delegates a special role (or roles) as defined in the *trusts_delegated_roles* list in the Orchestration configuration file. By default, the Orchestration service sets all the roles from trustor available for trustee. Deployers might modify this list to reflect a local RBAC policy. For example, to ensure that the heat process can access only those services that are expected while impersonating a stack owner. #. Orchestration stores the encrypted *trust ID* in the Orchestration database. #. When a deferred operation is required, the Orchestration service retrieves the *trust ID* and requests a trust scoped token which enables the service user to impersonate the stack owner during the deferred operation. Impersonation is helpful, for example, so the service user can launch Compute instances on behalf of the stack owner in response to an auto-scaling event. Authorization model configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Initially, the password authorization model was the default authorization model. Since the Kilo release, the Identity trusts authorization model is enabled for the Orchestration service by default. To enable the password authorization model, change the following parameter in the ``heat.conf`` file: .. code-block:: ini deferred_auth_method=password To enable the trusts authorization model, change the following two parameters in the ``heat.conf`` file. Specify the authentication method for the deferred Orchestration actions. This parameter triggers creating *trust ID* and stores it in the Orchestration database: .. code-block:: ini deferred_auth_method=trusts Allow reauthentication with the trust scoped token issued by using the stored *trust ID* for long running tasks: .. code-block:: ini reauthentication_auth_method=trusts To specify the trustor roles that it delegates to trustee during authorization, specify the ``trusts_delegated_roles`` parameter in the ``heat.conf`` file. If ``trusts_delegated_roles`` is not defined, then all the trustor roles are delegated to trustee. .. note:: The trustor delegated roles must be pre-configured in the OpenStack Identity service before using them in the Orchestration service. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/admin/index.rst0000664000175000017500000000021400000000000021603 0ustar00zuulzuul00000000000000================== Administering Heat ================== .. toctree:: :maxdepth: 2 introduction auth-model stack-domain-users ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/admin/introduction.rst0000664000175000017500000000305500000000000023223 0ustar00zuulzuul00000000000000============ Introduction ============ The OpenStack Orchestration service, a tool for orchestrating clouds, automatically configures and deploys resources in stacks. The deployments can be simple, such as deploying WordPress on Ubuntu with an SQL back end, or complex, such as starting a server group that auto scales by starting and stopping using real-time CPU loading information from the Telemetry service. Orchestration stacks are defined with templates, which are non-procedural documents. Templates describe tasks in terms of resources, parameters, inputs, constraints, and dependencies. When the Orchestration service was originally introduced, it worked with AWS CloudFormation templates, which are in the JSON format. The Orchestration service also runs Heat Orchestration Template (HOT) templates that are written in YAML. YAML is a terse notation that loosely follows structural conventions (colons, returns, indentation) that are similar to Python or Ruby. Therefore, it is easier to write, parse, grep, generate with tools, and maintain source-code management systems. Orchestration can be accessed through a CLI and RESTful queries. The Orchestration service provides both an OpenStack-native REST API and a CloudFormation-compatible Query API. The Orchestration service is also integrated with the OpenStack dashboard to perform stack functions through a web interface. For more information about using the Orchestration service through the command line, see the :python-heatclient-doc:`Heat Command-Line Interface reference <#openstackclient-command-line>`. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/admin/stack-domain-users.rst0000664000175000017500000001404100000000000024210 0ustar00zuulzuul00000000000000.. _orchestration-stack-domain-users: ================== Stack domain users ================== Stack domain users allow the Orchestration service to authorize and start the following operations within booted virtual machines: * Provide metadata to agents inside instances. Agents poll for changes and apply the configuration that is expressed in the metadata to the instance. * Detect when an action is complete. Typically, software configuration on a virtual machine after it is booted. Compute moves the VM state to "Active" as soon as it creates it, not when the Orchestration service has fully configured it. * Provide application level status or meters from inside the instance. For example, allow auto-scaling actions to be performed in response to some measure of performance or quality of service. The Orchestration service provides APIs that enable all of these operations, but all of those APIs require authentication. For example, credentials to access the instance that the agent is running upon. The heat-cfntools agents use signed requests, which require an ec2 key pair created through Identity. The key pair is then used to sign requests to the Orchestration CloudFormation and CloudWatch compatible APIs, which are authenticated through signature validation. Signature validation uses the Identity ec2tokens extension. Stack domain users encapsulate all stack-defined users (users who are created as a result of data that is contained in an Orchestration template) in a separate domain. The separate domain is created specifically to contain data related to the Orchestration stacks only. A user is created, which is the *domain admin*, and Orchestration uses the *domain admin* to manage the lifecycle of the users in the stack *user domain*. Stack domain users configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To configure stack domain user, the Orchestration service completes the following tasks: #. A special OpenStack Identity service domain is created. For example, a domain that is called ``heat`` and the ID is set with the ``stack_user_domain`` option in the :file:`heat.conf` file. #. A user with sufficient permissions to create and delete projects and users in the ``heat`` domain is created. #. The username and password for the domain admin user is set in the :file:`heat.conf` file (``stack_domain_admin`` and ``stack_domain_admin_password``). This user administers *stack domain users* on behalf of stack owners, so they no longer need to be administrators themselves. The risk of this escalation path is limited because the ``heat_domain_admin`` is only given administrative permission for the ``heat`` domain. To set up stack domain users, complete the following steps: #. Create the domain: ``$OS_TOKEN`` refers to a token. For example, the service admin token or some other valid token for a user with sufficient roles to create users and domains. ``$KS_ENDPOINT_V3`` refers to the v3 OpenStack Identity endpoint (for example, ``http://keystone_address:5000/v3`` where *keystone_address* is the IP address or resolvable name for the Identity service). .. code-block:: console $ openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-\ identity-api-version=3 domain create heat --description "Owns \ users and projects created by heat" The domain ID is returned by this command, and is referred to as ``$HEAT_DOMAIN_ID`` below. #. Create the user: .. code-block:: console $ openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-\ identity-api-version=3 user create --password $PASSWORD --domain \ $HEAT_DOMAIN_ID heat_domain_admin --description "Manages users \ and projects created by heat" The user ID is returned by this command and is referred to as ``$DOMAIN_ADMIN_ID`` below. #. Make the user a domain admin: .. code-block:: console $ openstack --os-token $OS_TOKEN --os-url=$KS_ENDPOINT_V3 --os-\ identity-api-version=3 role add --user $DOMAIN_ADMIN_ID --domain \ $HEAT_DOMAIN_ID admin Then you must add the domain ID, username and password from these steps to the :file:`heat.conf` file: .. code-block:: ini stack_domain_admin_password = password stack_domain_admin = heat_domain_admin stack_user_domain = domain id returned from domain create above Usage workflow ~~~~~~~~~~~~~~ The following steps are run during stack creation: #. Orchestration creates a new *stack domain project* in the ``heat`` domain if the stack contains any resources that require creation of a *stack domain user*. #. For any resources that require a user, the Orchestration service creates the user in the *stack domain project*. The *stack domain project* is associated with the Orchestration stack in the Orchestration database, but is separate and unrelated (from an authentication perspective) to the stack owners project. The users who are created in the stack domain are still assigned the ``heat_stack_user`` role, so the API surface they can access is limited through the :file:`policy.yaml` file. For more information, see :keystone-doc:`OpenStack Identity documentation <>`. #. When API requests are processed, the Orchestration service performs an internal lookup, and allows stack details for a given stack to be retrieved. Details are retrieved from the database for both the stack owner's project (the default API path to the stack) and the stack domain project, subject to the :file:`policy.yaml` restrictions. This means there are now two paths that can result in the same data being retrieved through the Orchestration API. The following example is for resource-metadata:: GET v1/​{stack_owner_project_id}​/stacks/​{stack_name}​/\ ​{stack_id}​/resources/​{resource_name}​/metadata or:: GET v1/​{stack_domain_project_id}​/stacks/​{stack_name}​/​\ {stack_id}​/resources/​{resource_name}​/metadata The stack owner uses the former (via ``openstack stack resource metadata STACK RESOURCE``), and any agents in the instance use the latter. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.247036 openstack_heat-24.0.0/doc/source/api/0000775000175000017500000000000000000000000017426 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/api/index.rst0000664000175000017500000000015700000000000021272 0ustar00zuulzuul00000000000000:orphan: =================== Source Code Index =================== .. toctree:: :maxdepth: 6 modules ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/conf.py0000664000175000017500000002672100000000000020164 0ustar00zuulzuul00000000000000# -*- 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 documentation build configuration file, created by # sphinx-quickstart on Thu Dec 13 11:23:35 2012. # # 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. import glob import os import sys import tempfile from oslo_config import cfg BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.abspath(os.path.join(BASE_DIR, "..", "..")) # TODO(tkajinam): Fix this # CONTRIB_DIR = os.path.join(ROOT, 'contrib') # PLUGIN_DIRS = glob.glob(os.path.join(CONTRIB_DIR, '*')) ENV_DIR = os.path.join(ROOT, "etc", "heat", "environment.d") TEMP_ENV_DIR = tempfile.mkdtemp() for f in glob.glob(os.path.join(ENV_DIR, "*.yaml")): with open(f, "r") as fin: name = os.path.split(f)[-1] with open(os.path.join(TEMP_ENV_DIR, name), "w") as fout: fout.write(fin.read().replace("file:///", "file://%s/" % ROOT)) sys.path.insert(0, ROOT) sys.path.insert(0, BASE_DIR) cfg.CONF.import_opt('plugin_dirs', 'heat.common.config') # cfg.CONF.set_override(name='plugin_dirs', override=PLUGIN_DIRS) cfg.CONF.import_opt('environment_dir', 'heat.common.config') cfg.CONF.set_override(name='environment_dir', override=TEMP_ENV_DIR) # 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. # 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', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.intersphinx', 'sphinx.ext.doctest', 'sphinxcontrib.apidoc', 'openstackdocstheme', 'oslo_config.sphinxconfiggen', 'oslo_config.sphinxext', 'oslo_policy.sphinxext', 'oslo_policy.sphinxpolicygen', 'ext.resources', 'ext.tablefromtext', 'stevedore.sphinxext'] intersphinx_mapping = { 'types_typedecorator': ('https://docs.sqlalchemy.org', None), } # policy sample file generation policy_generator_config_file = '../../etc/heat/heat-policy-generator.conf' sample_policy_basename = '_static/heat' # oslo_config.sphinxconfiggen options config_generator_config_file = '../../etc/heat/heat-config-generator.conf' sample_config_basename = '_static/heat' # openstackdocstheme options openstackdocs_repo_name = 'openstack/heat' openstackdocs_pdf_link = True openstackdocs_use_storyboard = True todo_include_todos = True # openstackdocstheme external link helper projects openstackdocs_projects = [ 'devstack', 'diskimage-builder', 'keystone', 'keystoneauth', 'nova', 'oslo.reports', 'python-barbicanclient', 'python-heatclient', 'python-openstackclient', ] # Add any paths that contain templates here, relative to this directory. templates_path = [] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. # source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. copyright = '(c) 2012- Heat Developers' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: # today = '' # Else, today_fmt is used as the format for a strftime call. # today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['**/#*', '**~', '**/#*#'] # The reST default role (used for this markup: `text`) # to use for all documents. # default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. # add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). # add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. # show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'native' # A list of ignored prefixes for module index sorting. modindex_common_prefix = ['heat.'] primary_domain = 'py' nitpicky = False # -- Options for API documentation ------------------------------------------- apidoc_module_dir = '../../heat' apidoc_separate_modules = True apidoc_excluded_paths = [ 'cmd', 'cloudinit', 'db/migrations/versions', 'engine/resources/aws', 'engine/resources/openstack', 'hacking', 'locale', 'tests', 'version.py', 'wsgi', ] # -- 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_path = ['.'] # html_theme = '_theme' 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 = {"sidebar_mode": "toc"} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". # html_title = None # A shorter title for the navigation bar. Default is the same as html_title. # html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. # html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. # html_favicon = None # 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'] # Add any paths that contain "extra" files, such as .htaccess or # robots.txt. html_extra_path = ['_extra'] # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. # html_use_smartypants = True # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. # html_additional_pages = {} # If false, no module index is generated. # html_domain_indices = True # If false, no index is generated. # html_use_index = True # If true, the index is split into individual pages for each letter. # html_split_index = False # If true, links to the reST sources are added to the pages. # html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. # html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. # html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. # html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). # html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'Heatdoc' # -- Options for LaTeX output ------------------------------------------------- # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]) latex_documents = [ ('index', 'doc-heat.tex', 'Heat Documentation', 'Heat Developers', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. # latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. # latex_use_parts = False # If true, show page references after internal links. # latex_show_pagerefs = False # If true, show URL addresses after external links. # latex_show_urls = False # Documents to append as an appendix to all manuals. # latex_appendices = [] # If false, no module index is generated. latex_domain_indices = False # Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664 latex_use_xindy = False latex_elements = { 'makeindex': '', 'printindex': '', 'preamble': r'\setcounter{tocdepth}{3}', } # -- Options for manual page output ------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('man/heat-api', 'heat-api', 'REST API service to the heat project.', ['Heat Developers'], 1), ('man/heat-api-cfn', 'heat-api-cfn', 'CloudFormation compatible API service to the heat project.', ['Heat Developers'], 1), ('man/heat-db-setup', 'heat-db-setup', 'Command line utility to setup the Heat database', ['Heat Developers'], 1), ('man/heat-engine', 'heat-engine', 'Service which performs the actions from the API calls made by the user', ['Heat Developers'], 1), ('man/heat-keystone-setup-domain', 'heat-keystone-setup-domain', 'Script which sets up a keystone domain for heat users and projects', ['Heat Developers'], 1), ('man/heat-manage', 'heat-manage', 'Script which helps manage specific database operations', ['Heat Developers'], 1), ('man/heat-status', 'heat-status', 'Script to check status of Heat deployment.', ['Heat Developers'], 1), ] # If true, show URL addresses after external links. # man_show_urls = False # -- 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 = [ ('index', 'Heat', 'Heat Documentation', 'Heat Developers', 'Heat', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. # texinfo_appendices = [] # If false, no module index is generated. # texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. # texinfo_show_urls = 'footnote' ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2510362 openstack_heat-24.0.0/doc/source/configuration/0000775000175000017500000000000000000000000021524 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/configuration/config-options.rst0000664000175000017500000000057000000000000025216 0ustar00zuulzuul00000000000000=================================================== Configuration options for the Orchestration service =================================================== The following options can be set in the ``/etc/heat/heat.conf`` config file. A :doc:`sample configuration file ` is also available. .. show-options:: :config-file: etc/heat/heat-config-generator.conf ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/configuration/index.rst0000664000175000017500000000021600000000000023364 0ustar00zuulzuul00000000000000================ Configuring Heat ================ .. toctree:: :maxdepth: 1 config-options sample_config logs sample_policy ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/configuration/logs.rst0000664000175000017500000000107000000000000023220 0ustar00zuulzuul00000000000000======================= Orchestration log files ======================= The corresponding log file of each Orchestration service is stored in the ``/var/log/heat/`` directory of the host on which each service runs. .. list-table:: Log files used by Orchestration services :widths: 35 35 :header-rows: 1 * - Log filename - Service that logs to the file * - ``heat-api.log`` - Orchestration service API Service * - ``heat-engine.log`` - Orchestration service Engine Service * - ``heat-manage.log`` - Orchestration service events ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/configuration/sample_config.rst0000664000175000017500000000113600000000000025065 0ustar00zuulzuul00000000000000========================= Heat Configuration Sample ========================= The following is a sample heat configuration for adaptation and use. It is auto-generated from heat when this documentation is built, so if you are having issues with an option, please compare your version of heat with the version of this documentation. .. only:: html The sample configuration can also be downloaded in `file form <../_static/heat.conf.sample>`_. .. literalinclude:: ../_static/heat.conf.sample .. only:: latex See the online version of this documentation for the full example config file. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/configuration/sample_policy.rst0000664000175000017500000000221200000000000025113 0ustar00zuulzuul00000000000000================== Heat Sample Policy ================== .. warning:: JSON formatted policy file is deprecated since Heat 17.0.0 (Xena). This `oslopolicy-convert-json-to-yaml`__ tool will migrate your existing JSON-formatted policy file to YAML in a backward-compatible way. .. __: https://docs.openstack.org/oslo.policy/latest/cli/oslopolicy-convert-json-to-yaml.html The following is a sample heat policy file that has been auto-generated from default policy values in code. If you're using the default policies, then the maintenance of this file is not necessary, and it should not be copied into a deployment. Doing so will result in duplicate policy definitions. It is here to help explain which policy operations protect specific heat APIs, but it is not suggested to copy and paste into a deployment unless you're planning on providing a different policy for an operation that is not the default. If you wish build a policy file, you can also use ``tox -e genpolicy`` to generate it. The sample policy file can also be downloaded in `file form <../_static/heat.policy.yaml.sample>`_. .. literalinclude:: ../_static/heat.policy.yaml.sample ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2510362 openstack_heat-24.0.0/doc/source/contributor/0000775000175000017500000000000000000000000021227 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/contributor/contributing.rst0000664000175000017500000000354000000000000024472 0ustar00zuulzuul00000000000000============================ So You Want to Contribute... ============================ For general information on contributing to OpenStack, please check out the `contributor guide `_ to get started. It covers all the basics that are common to all OpenStack projects: the accounts you need, the basics of interacting with our Gerrit review system, how we communicate as a community, etc. Below will cover the more project specific information you need to get started with heat. Communication ~~~~~~~~~~~~~ * IRC channel #heat at OFTC * Mailing list (prefix subjects with ``[heat]`` for faster responses) http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss Contacting the Core Team ~~~~~~~~~~~~~~~~~~~~~~~~ Please refer the `heat Core Team `_ contacts. New Feature Planning ~~~~~~~~~~~~~~~~~~~~ heat features are tracked on `Storyboard `_. Task Tracking ~~~~~~~~~~~~~ We track our tasks in `Storyboard `_. If you're looking for some smaller, easier work item to pick up and get started on, search for the 'low-hanging-fruit' tag. Reporting a Bug ~~~~~~~~~~~~~~~ You found an issue and want to make sure we are aware of it? You can do so on `Storyboard `_. Getting Your Patch Merged ~~~~~~~~~~~~~~~~~~~~~~~~~ All changes proposed to the heat project require one or two +2 votes from heat core reviewers before one of the core reviewers can approve patch by giving ``Workflow +1`` vote. Project Team Lead Duties ~~~~~~~~~~~~~~~~~~~~~~~~ All common PTL duties are enumerated in the `PTL guide `_. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/contributor/index.rst0000664000175000017500000000030300000000000023064 0ustar00zuulzuul00000000000000Heat Contributor Guidelines =========================== .. toctree:: :maxdepth: 3 contributing .. bugs contributor-onboarding core-reviewers gate-failure-triage code-reviews ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2510362 openstack_heat-24.0.0/doc/source/developing_guides/0000775000175000017500000000000000000000000022351 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/architecture.rst0000664000175000017500000000704100000000000025567 0ustar00zuulzuul00000000000000.. Copyright 2011-2012 OpenStack Foundation All Rights Reserved. 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 architecture ================= Heat is a service to orchestrate multiple composite cloud applications using the `AWS CloudFormation`_ template format, through both an OpenStack-native REST API and a CloudFormation-compatible Query API. Detailed description ~~~~~~~~~~~~~~~~~~~~ What is the purpose of the project and vision for it? *Heat provides an AWS CloudFormation implementation for OpenStack that orchestrates an AWS CloudFormation template describing a cloud application by executing appropriate OpenStack API calls to generate running cloud applications.* Describe the relevance of the project to other OpenStack projects and the OpenStack mission to provide a ubiquitous cloud computing platform: *The software integrates other core components of OpenStack into a one-file template system. The templates allow creation of most OpenStack resource types (such as instances, floating IPs, volumes, security groups and users), as well as some more advanced functionality such as instance high availability, instance autoscaling, and nested stacks. By providing very tight integration with other OpenStack core projects, all OpenStack core projects could receive a larger user base.* *Currently no other CloudFormation implementation exists for OpenStack. The developers believe cloud developers have a strong desire to move workloads from AWS to OpenStack deployments. Given the missing gap of a well-implemented and integrated CloudFormation API in OpenStack, we provide a high quality implementation of this gap improving the ubiquity of OpenStack.* Heat services ~~~~~~~~~~~~~ The developers are focused on creating an OpenStack style project using OpenStack design tenets, implemented in Python. We have started with full integration with keystone. We have a number of components. As the developers have only started development in March 2012, the architecture is evolving rapidly. heat ---- The heat tool is a CLI which communicates with the heat-api to execute AWS CloudFormation APIs. End developers could also use the heat REST API directly. heat-api -------- The heat-api component provides an OpenStack-native REST API that processes API requests by sending them to the heat-engine over RPC. heat-api-cfn ------------ The heat-api-cfn component provides an AWS Query API that is compatible with AWS CloudFormation and processes API requests by sending them to the heat-engine over RPC. heat-engine ----------- The heat-engine's main responsibility is to orchestrate the launching of templates and provide events back to the API consumer. The templates integrate well with Puppet_ and Chef_. .. _Puppet: https://s3.amazonaws.com/cloudformation-examples/IntegratingAWSCloudFormationWithPuppet.pdf .. _Chef: https://www.full360.com/2011/02/27/integrating-aws-cloudformation-and-chef.html .. _`AWS CloudFormation`: https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/Welcome.html?r=7078 ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/blueprints.rst0000664000175000017500000000116000000000000025270 0ustar00zuulzuul00000000000000Blueprints and Specs ==================== You have to create a Story in StoryBoard `heat storyboard `_. And create tasks that fit with the plan to implement this spec (A task to link to a patch in gerrit). .. note:: heat-spacs is no longer active, there's no requirement for any feature to summit spac on it. Spec from existing stories ------------------------------- If there's an already existing story that describes feature suitable to the story. There is no need to create a new story. The comments and history of the existing story are important for its review. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/gmr.rst0000664000175000017500000000571300000000000023676 0ustar00zuulzuul00000000000000.. Copyright (c) 2014 OpenStack Foundation 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. ======================= Guru Meditation Reports ======================= Heat contains a mechanism whereby developers and system administrators can generate a report about the state of a running Heat executable. This report is called a *Guru Meditation Report* (*GMR* for short). Generating a GMR ~~~~~~~~~~~~~~~~ A *GMR* can be generated by sending the *USR2* signal to any Heat process with support (see below). The *GMR* will then be outputted standard error for that particular process. For example, suppose that ``heat-api`` has process id ``10172``, and was run with ``2>/var/log/heat/heat-api-err.log``. Then, ``kill -USR2 10172`` will trigger the Guru Meditation report to be printed to ``/var/log/heat/heat-api-err.log``. Structure of a GMR ~~~~~~~~~~~~~~~~~~ The *GMR* is designed to be extensible; any particular executable may add its own sections. However, the base *GMR* consists of several sections: Package Shows information about the package to which this process belongs, including version information Threads Shows stack traces and thread ids for each of the threads within this process Green Threads Shows stack traces for each of the green threads within this process (green threads don't have thread ids) Configuration Lists all the configuration options currently accessible via the CONF object for the current process Adding support for GMRs to new executable ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Adding support for a *GMR* to a given executable is fairly easy. First import the module (currently residing in oslo-incubator), as well as the Heat version module: .. code-block:: python from oslo_reports import guru_meditation_report as gmr from heat import version Then, register any additional sections (optional): .. code-block:: python TextGuruMeditation.register_section('Some Special Section', some_section_generator) Finally (under main), before running the "main loop" of the executable (usually ``server.start()`` or something similar), register the *GMR* hook: .. code-block:: python TextGuruMeditation.setup_autorun(version) Extending the GMR ~~~~~~~~~~~~~~~~~ As mentioned above, additional sections can be added to the GMR for a particular executable. For more information, see the documentation about :oslo.reports-doc:`oslo.reports <>`. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/index.rst0000664000175000017500000000114600000000000024214 0ustar00zuulzuul00000000000000Heat Developer Guidelines ========================= In the developer guide, you will find documented policies for developing heat. This includes the processes we use for stories (for bugs and features), contributor onboarding, core reviewer memberships, and other procedural items. .. note:: This guideline also includes documentation for developers. .. toctree:: :maxdepth: 3 ../getting_started/on_devstack blueprints architecture pluginguide schedulerhints gmr supportstatus rally_on_gates .. bugs contributor-onboarding core-reviewers gate-failure-triage code-reviews ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/pluginguide.rst0000664000175000017500000007146000000000000025427 0ustar00zuulzuul00000000000000.. 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 Resource Plug-in Development Guide ======================================= Heat allows service providers to extend the capabilities of the orchestration service by writing their own resource plug-ins. These plug-ins are written in Python and included in a directory configured by the service provider. This guide describes a resource plug-in structure and life cycle in order to assist developers in writing their own resource plug-ins. Resource Plug-in Life Cycle --------------------------- A resource plug-in is relatively simple in that it needs to extend a base ``Resource`` class and implement some relevant life cycle handler methods. The basic life cycle methods of a resource are: create The plug-in should create a new physical resource. update The plug-in should update an existing resource with new configuration or tell the engine that the resource must be destroyed and re-created. This method is optional; the default behavior is to create a replacement resource and then delete the old resource. suspend The plug-in should suspend operation of the physical resource; this is an optional operation. resume The plug-in should resume operation of the physical resource; this is an optional operation. delete The plug-in should delete the physical resource. The base class ``Resource`` implements each of these life cycle methods and defines one or more handler methods that plug-ins can implement in order to manifest and manage the actual physical resource abstracted by the plug-in. These handler methods will be described in detail in the following sections. Heat Resource Base Class ++++++++++++++++++++++++ Plug-ins must extend the class ``heat.engine.resource.Resource``. This class is responsible for managing the overall life cycle of the plug-in. It defines methods corresponding to the life cycle as well as the basic hooks for plug-ins to handle the work of communicating with specific down-stream services. For example, when the engine determines it is time to create a resource, it calls the ``create`` method of the applicable plug-in. This method is implemented in the ``Resource`` base class and handles most of the bookkeeping and interaction with the engine. This method then calls a ``handle_create`` method defined in the plug-in class (if implemented) which is responsible for using specific service calls or other methods needed to instantiate the desired physical resource (server, network, volume, etc). Resource Status and Action ************************** The base class handles reporting state of the resource back to the engine. A resource's state is the combination of the life cycle action and the status of that action. For example, if a resource is created successfully, the state of that resource will be ``CREATE_COMPLETE``. Alternatively, if the plug-in encounters an error when attempting to create the physical resource, the state would be ``CREATE_FAILED``. The base class handles the reporting and persisting of resource state, so a plug-in's handler methods only need to return data or raise exceptions as appropriate. Resource Support Status *********************** New resource should be marked from which OpenStack release it will be available with *support_status* option. For more details, see :ref:`supportstatus`. Resource description ******************** An important part of future resources is a concisely written description. It should be in class docstring and contain information about the resource and how it could be useful to the end-user. The docstring description is used in documentation generation and should be always defined, if resource is designed for public use. Docstring should follows `PEP 257 `_. .. code-block:: python class CustomResource(resource.Resource): """This custom resource has description. Now end-users could understand the meaning of the resource existing and will use it correctly without any additional questions. """ Properties and Attributes +++++++++++++++++++++++++ A resource's *properties* define the settings the template author can manipulate when including that resource in a template. Some examples would be: * Which flavor and image to use for a Nova server * The port to listen to on Neutron LBaaS nodes * The size of a Cinder volume .. note:: Properties should normally be accessed through self.properties. This resolves intrinsic functions, provides default values when required and performs property translation for backward compatible schema changes. The self.properties.data dict provides access to the raw data supplied by the user in the template without any of those transformations. *Attributes* describe runtime state data of the physical resource that the plug-in can expose to other resources in a Stack. Generally, these aren't available until the physical resource has been created and is in a usable state. Some examples would be: * The host id of a Nova server * The status of a Neutron network * The creation time of a Cinder volume Defining Resource Properties **************************** Each property that a resource supports must be defined in a schema that informs the engine and validation logic what the properties are, what type each is, and validation constraints. The schema is a dictionary whose keys define property names and whose values describe the constraints on that property. This dictionary must be assigned to the ``properties_schema`` attribute of the plug-in. .. code-block:: python from heat.common.i18n import _ from heat.engine import constraints from heat.engine import properties nested_schema = { "foo": properties.Schema( properties.Schema.STRING, _('description of foo field'), constraints=[ constraints.AllowedPattern('(Ba[rc]?)+'), constraints.Length(max=10, description="don't go crazy") ] ) } properties_schema = { "property_name": properties.Schema( properties.Schema.MAP, _('Internationalized description of property'), required=True, default={"Foo": "Bar"}, schema=nested_schema ) } As shown above, some properties may themselves be complex and reference nested schema definitions. Following are the parameters to the ``Schema`` constructor; all but the first have defaults. *data_type*: Defines the type of the property's value. The valid types are the members of the list ``properties.Schema.TYPES``, currently ``INTEGER``, ``STRING``, ``NUMBER``, ``BOOLEAN``, ``MAP``, ``LIST`` and ``ANY``; please use those symbolic names rather than the literals to which they are equated. For ``LIST`` and ``MAP`` type properties, the ``schema`` referenced constrains the format of complex items in the list or map. *description*: A description of the property and its function; also used in documentation generation. Default is ``None`` --- but you should always provide a description. *default*: The default value to assign to this property if none was supplied in the template. Default is ``None``. *schema*: This property's value is complex and its members must conform to this referenced schema in order to be valid. The referenced schema dictionary has the same format as the ``properties_schema``. Default is ``None``. *required*: ``True`` if the property must have a value for the template to be valid; ``False`` otherwise. The default is ``False`` *constraints*: A list of constraints that apply to the property's value. See `Property Constraints`_. *update_allowed*: ``True`` if an existing resource can be updated, ``False`` means update is accomplished by delete and re-create. Default is ``False``. *immutable*: ``True`` means updates are not supported, resource update will fail on every change of this property. ``False`` otherwise. Default is ``False``. *support_status*: Defines current status of the property. Read :ref:`supportstatus` for details. Accessing property values of the plug-in at runtime is then a simple call to: .. code-block:: python self.properties['PropertyName'] Based on the property type, properties without a set value will return the default "empty" value for that type: ======= ============ Type Empty Value ======= ============ String '' Number 0 Integer 0 List [] Map {} Boolean False ======= ============ Property Constraints ******************** Following are the available kinds of constraints. The description is optional and, if given, states the constraint in plain language for the end user. *AllowedPattern(regex, description)*: Constrains the value to match the given regular expression; applicable to STRING. *AllowedValues(allowed, description)*: Lists the allowed values. ``allowed`` must be a ``collections.abc.Sequence`` or ``string``. Applicable to all types of value except MAP. *Length(min, max, description)*: Constrains the length of the value. Applicable to STRING, LIST, MAP. Both ``min`` and ``max`` default to ``None``. *Range(min, max, description)*: Constrains a numerical value. Applicable to INTEGER and NUMBER. Both ``min`` and ``max`` default to ``None``. *Modulo(step, offset, description)*: Starting with the specified ``offset``, every multiple of ``step`` is a valid value. Applicable to INTEGER and NUMBER. Available from template version 2017-02-24. *CustomConstraint(name, description, environment)*: This constructor brings in a named constraint class from an environment. If the given environment is ``None`` (its default) then the environment used is the global one. Defining Resource Attributes **************************** Attributes communicate runtime state of the physical resource. Note that some plug-ins do not define any attributes and doing so is optional. If the plug-in needs to expose attributes, it will define an ``attributes_schema`` similar to the properties schema described above. Each item in the schema dictionary consists of an attribute name and an attribute Schema object. .. code-block:: python attributes_schema = { "foo": attributes.Schema( _("The foo attribute"), type=attribute.Schema.STRING ), "bar": attributes.Schema( _("The bar attribute"), type=attribute.Schema.STRING ), "baz": attributes.Schema( _("The baz attribute"), type=attribute.Schema.STRING ) } Following are the parameters to the Schema. *description* A description of the attribute; also used in documentation generation. Default is ``None`` --- but you should always provide a description. *type* Defines the type of attribute value. The valid types are the members of the list ``attributes.Schema.TYPES``, currently ``STRING``, ``NUMBER``, ``BOOLEAN``, ``MAP``, and ``LIST``; please use those symbolic names rather than the literals to which they are equated. *support_status* Defines current status of the attribute. Read :ref:`supportstatus` for details. If attributes are defined, their values must also be resolved by the plug-in. The simplest way to do this is to override the ``_resolve_attribute`` method from the ``Resource`` class: .. code-block:: python def _resolve_attribute(self, name): # _example_get_physical_resource is just an example and is not # defined in the Resource class phys_resource = self._example_get_physical_resource() if phys_resource: if not hasattr(phys_resource, name): # this is usually not needed, but this is a simple # example raise exception.InvalidTemplateAttribute(name) return getattr(phys_resource, name) return None If the plug-in needs to be more sophisticated in its attribute resolution, the plug-in may instead choose to override ``FnGetAtt``. However, if this method is chosen, validation and accessibility of the attribute would be the plug-in's responsibility. Also, each resource has ``show`` attribute by default. The attribute uses default implementation from ``heat.engine.resource.Resource`` class, but if resource has different way of resolving ``show`` attribute, the ``_show_resource`` method from the ``Resource`` class will need to be overridden: .. code-block:: python def _show_resource(self): """Default implementation; should be overridden by resources. :returns: the map of resource information or None """ if self.entity: try: obj = getattr(self.client(), self.entity) resource = obj.get(self.resource_id) if isinstance(resource, dict): return resource else: return resource.to_dict() except AttributeError as ex: LOG.warning("Resolving 'show' attribute has failed : %s", ex) return None Property and Attribute Example ****************************** Assume the following simple property and attribute definition: .. code-block:: python properties_schema = { 'foo': properties.Schema( properties.Schema.STRING, _('foo prop description'), default='foo', required=True ), 'bar': properties.Schema( properties.Schema.INTEGER, _('bar prop description'), required=True, constraints=[ constraints.Range(5, 10) ] ) } attributes_schema = { 'Attr_1': attributes.Schema( _('The first attribute'), support_status=support.Status('5.0.0'), type=attributes.Schema.STRING ), 'Attr_2': attributes.Schema( _('The second attribute'), type=attributes.Schema.MAP ) } Also assume the plug-in defining the above has been registered under the template reference name 'Resource::Foo' (see `Registering Resource Plug-ins`_). A template author could then use this plug-in in a stack by simply making following declarations in a template: .. code-block:: yaml # ... other sections omitted for brevity ... resources: resource-1: type: Resource::Foo properties: foo: Value of the foo property bar: 7 outputs: foo-attrib-1: value: { get_attr: [resource-1, Attr_1] } description: The first attribute of the foo resource foo-attrib-2: value: { get_attr: [resource-1, Attr_2] } description: The second attribute of the foo resource Life Cycle Handler Methods ++++++++++++++++++++++++++ To do the work of managing the physical resource the plug-in supports, the following life cycle handler methods should be implemented. Note that the plug-in need not implement *all* of these methods; optional handlers will be documented as such. Generally, the handler methods follow a basic pattern. The basic handler method for any life cycle step follows the format ``handle_``. So for the create step, the handler method would be ``handle_create``. Once a handler is called, an optional ``check__complete`` may also be implemented so that the plug-in may return immediately from the basic handler and then take advantage of cooperative multi-threading built in to the base class and periodically poll a down-stream service for completion; the check method is polled until it returns ``True``. Again, for the create step, this method would be ``check_create_complete``. Create ****** .. py:function:: handle_create(self) Create a new physical resource. This function should make the required calls to create the physical resource and return as soon as there is enough information to identify the resource. The function should return this identifying information and implement ``check_create_complete`` which will take this information in as a parameter and then periodically be polled. This allows for cooperative multi-threading between multiple resources that have had their dependencies satisfied. *Note* once the native identifier of the physical resource is known, this function should call ``self.resource_id_set`` passing the native identifier of the physical resource. This will persist the identifier and make it available to the plug-in by accessing ``self.resource_id``. :returns: A representation of the created physical resource :raise: any ``Exception`` if the create failed .. py:function:: check_create_complete(self, token) If defined, will be called with the return value of ``handle_create`` :param token: the return value of ``handle_create``; used to poll the physical resource's status. :returns: ``True`` if the physical resource is active and ready for use; ``False`` otherwise. :raise: any ``Exception`` if the create failed. Update (Optional) ***************** Note that there is a default implementation of ``handle_update`` in ``heat.engine.resource.Resource`` that simply raises an exception indicating that updates require the engine to delete and re-create the resource (this is the default behavior) so implementing this is optional. .. py:function:: handle_update(self, json_snippet, tmpl_diff, prop_diff) Update the physical resources using updated information. :param json_snippet: the resource definition from the updated template :type json_snippet: collections.abc.Mapping :param tmpl_diff: values in the updated definition that have changed with respect to the original template definition. :type tmpl_diff: collections.abc.Mapping :param prop_diff: property values that are different between the original definition and the updated definition; keys are property names and values are the new values. Deleted or properties that were originally present but now absent have values of ``None`` :type prop_diff: collections.abc.Mapping *Note* Before calling ``handle_update`` we check whether need to replace the resource, especially for resource in ``*_FAILED`` state, there is a default implementation of ``needs_replace_failed`` in ``heat.engine.resource.Resource`` that simply returns ``True`` indicating that updates require replacement. And we override the implementation for ``OS::Nova::Server``, ``OS::Cinder::Volume`` and all of neutron resources. The base principle is that to check whether the resource exists underlying and whether the real status is available. So override the method ``needs_replace_failed`` for your resource plug-ins if needed. .. py:function:: check_update_complete(self, token) If defined, will be called with the return value of ``handle_update`` :param token: the return value of ``handle_update``; used to poll the physical resource's status. :returns: ``True`` if the update has finished; ``False`` otherwise. :raise: any ``Exception`` if the update failed. Suspend (Optional) ****************** *These handler functions are optional and only need to be implemented if the physical resource supports suspending* .. py:function:: handle_suspend(self) If the physical resource supports it, this function should call the native API and suspend the resource's operation. This function should return information sufficient for ``check_suspend_complete`` to poll the native API to verify the operation's status. :return: a token containing enough information for ``check_suspend_complete`` to verify operation status. :raise: any ``Exception`` if the suspend operation fails. .. py:function:: check_suspend_complete(self, token) Verify the suspend operation completed successfully. :param token: the return value of ``handle_suspend`` :return: ``True`` if the suspend operation completed and the physical resource is now suspended; ``False`` otherwise. :raise: any ``Exception`` if the suspend operation failed. Resume (Optional) ***************** *These handler functions are optional and only need to be implemented if the physical resource supports resuming from a suspended state* .. py:function:: handle_resume(self) If the physical resource supports it, this function should call the native API and resume a suspended resource's operation. This function should return information sufficient for ``check_resume_complete`` to poll the native API to verify the operation's status. :return: a token containing enough information for ``check_resume_complete`` to verify operation status. :raise: any ``Exception`` if the resume operation fails. .. py:function:: check_resume_complete(self, token) Verify the resume operation completed successfully. :param token: the return value of ``handle_resume`` :return: ``True`` if the resume operation completed and the physical resource is now active; ``False`` otherwise. :raise: any Exception if the resume operation failed. Delete ****** .. py:function:: handle_delete(self) Delete the physical resource. :return: a token containing sufficient data to verify the operations status :raise: any ``Exception`` if the delete operation failed .. note:: As of the Liberty release, implementing handle_delete is optional. The parent resource class can handle the most common pattern for deleting resources: .. code-block:: python def handle_delete(self): if self.resource_id is not None: try: self.client()..delete(self.resource_id) except Exception as ex: self.client_plugin().ignore_not_found(ex) return None return self.resource_id For this to work for a particular resource, the `entity` and `default_client_name` attributes must be overridden in the resource implementation. For example, `entity` of Aodh Alarm should equals to "alarm" and `default_client_name` to "aodh". .. py:function:: handle_delete_snapshot(self, snapshot) Delete resource snapshot. :param snapshot: dictionary describing current snapshot. :return: a token containing sufficient data to verify the operations status :raise: any ``Exception`` if the delete operation failed .. py:function:: handle_snapshot_delete(self, state) Called instead of ``handle_delete`` when the deletion policy is SNAPSHOT. Create backup of resource and then delete resource. :param state: the (action, status) tuple of the resource to make sure that backup may be created for the current resource :return: a token containing sufficient data to verify the operations status :raise: any ``Exception`` if the delete operation failed .. py:function:: check_delete_complete(self, token) Verify the delete operation completed successfully. :param token: the return value of ``handle_delete`` or ``handle_snapshot_delete`` (for deletion policy - Snapshot) used to verify the status of the operation :return: ``True`` if the delete operation completed and the physical resource is deleted; ``False`` otherwise. :raise: any ``Exception`` if the delete operation failed. .. py:function:: check_delete_snapshot_complete(self, token) Verify the delete snapshot operation completed successfully. :param token: the return value of ``handle_delete_snapshot`` used to verify the status of the operation :return: ``True`` if the delete operation completed and the snapshot is deleted; ``False`` otherwise. :raise: any ``Exception`` if the delete operation failed. Resource Dependencies +++++++++++++++++++++ Ideally, your resource should not have any 'hidden' dependencies, i.e. Heat should be able to infer any inbound or outbound dependencies of your resource instances from resource properties and the other resources/resource attributes they reference. This is handled by ``heat.engine.resource.Resource.add_dependencies()``. If this is not possible, please do not simply override `add_dependencies()` in your resource plugin! This has previously caused `problems `_ for multiple operations, usually due to uncaught exceptions, If you feel you need to override `add_dependencies()`, please reach out to Heat developers on the `#heat` IRC channel on OFTC or on the `openstack-discuss `_ mailing list to discuss the possibility of a better solution. Registering Resource Plug-ins +++++++++++++++++++++++++++++ To make your plug-in available for use in stack templates, the plug-in must register a reference name with the engine. This is done by defining a ``resource_mapping`` function in your plug-in module that returns a map of template resource type names and their corresponding implementation classes:: def resource_mapping(): return { 'My::Custom::Plugin': MyResourceClass } This would allow a template author to define a resource as: .. code-block:: yaml resources: my_resource: type: My::Custom::Plugin properties: # ... your plug-in's properties ... Note that you can define multiple plug-ins per module by simply returning a map containing a unique template type name for each. You may also use this to register a single resource plug-in under multiple template type names (which you would only want to do when constrained by backwards compatibility). Configuring the Engine ---------------------- In order to use your plug-in, Heat must be configured to read your resources from a particular directory. The ``plugin_dirs`` configuration option lists the directories on the local file system where the engine will search for plug-ins. Simply place the file containing your resource in one of these directories and the engine will make them available next time the service starts. See :doc:`../configuration/index` for more information on configuring the orchestration service. Testing ------- Tests can live inside the plug-in under the ``tests`` namespace/directory. The Heat plug-in loader will implicitly not load anything under that directory. This is useful when your plug-in tests have dependencies you don't want installed in production. Putting It All Together ----------------------- You can find the plugin classes in ``heat/engine/resources``. An exceptionally simple one to start with is ``random_string.py``; it is unusual in that it does not manipulate anything in the cloud! Resource Contributions ---------------------- The Heat team is interested in adding new resources that give Heat access to additional OpenStack or StackForge projects. The following checklist defines the requirements for a candidate resource to be considered for inclusion: - Must wrap an OpenStack or StackForge project, or a third party project that is relevant to OpenStack users. - Must have its dependencies listed in OpenStack's ``global-requirements.txt`` file, or else it should be able to conditionally disable itself when there are missing dependencies, without crashing or otherwise affecting the normal operation of the heat-engine service. - The resource's support status flag must be set to ``UNSUPPORTED``, to indicate that the Heat team is not responsible for supporting this resource. - The code must be of comparable quality to official resources. The Heat team can help with this during the review phase. If you have a resource that is a good fit, you are welcome to contact the Heat team. If for any reason your resource does not meet the above requirements, but you still think it can be useful to other users, you are encouraged to host it on your own repository and share it as a regular Python installable package. You can find example resource plug-ins that have all the required packaging files in the ``contrib`` directory of the official Heat git repository. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/rally_on_gates.rst0000664000175000017500000003062100000000000026107 0ustar00zuulzuul00000000000000.. 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. .. _rally_gates: ========================= Using Rally on Heat gates ========================= Heat gate allows to use Rally for performance testing for each particular patch. This functionality can be used for checking patch on performance regressions and also for detecting any floating bugs for common scenarios. How to run Rally for particular patch ------------------------------------- As was mentioned above Heat allows to execute Rally scenarios as a gate job for particular patch. It can be done by posting comment with text ``check experimental`` for patch on review. It will run bunch of jobs, one of which has name ``gate-rally-dsvm-fakevirt-heat``. List of scenarios, which will be executed, is presented in file ``heat-fakevirt.yaml``. Default version of this file is available here: https://github.com/openstack/heat/blob/master/rally-scenarios/heat-fakevirt.yaml Obviously performance analysis make sense, when it can be compared with some another performance data. So two different approaches can be used for it: - Comparison of one part of code with some custom changes (see :ref:`check_performance_or_detect_regression`) - Comparison of two different code parts (see :ref:`compare_output_API_performance`) Examples of using Rally ----------------------- Previously two main approaches of using Rally job for Heat were highlighted. Corresponding examples will be described in this part of documentation. However need to note, that there are a lot of other ways how to use Rally job for Heat performance. For example, this job can be launched periodically (twice in week) for random patches and these results will be compared between each other. It allows to see, that Heat has not any performance regressions. .. _check_performance_or_detect_regression: Check performance or how to detect regression +++++++++++++++++++++++++++++++++++++++++++++ The easiest way of using Rally is to execute already existing scenarios. One of the examples is presented in patch https://review.opendev.org/#/c/279450/ . In this patch was executed scenario already existing in Rally ``HeatStacks.create_and_delete_stack``. During executing this scenario Rally creates and then, when stack is created, delete Heat stack. All existing scenarios can be found here: https://github.com/openstack/rally-openstack/blob/master/rally_openstack/scenarios/heat/stacks.py Mentioned scenario uses Heat template as a parameter for task. The template path should be mentioned for argument ``template_path``. It can be one of Heat templates presented in Rally repository (https://github.com/openstack/rally-openstack/tree/master/samples/tasks/scenarios/heat/templates) or new one, like it was done for mentioned patch. New added template should be placed in ``rally-scenarios/extra/`` directory. Also it's possible to specify other fields for each Rally task, like ``sla`` or ``context``. More information about other configuration setting is available by link https://rally.readthedocs.io/en/latest/plugins/#rally-plugins Mentioned patch was proposed for confirmation caching mechanism of Heat template validation process (see https://specs.openstack.org/openstack/heat-specs/specs/liberty/constraint-validation-cache.html). So it contains some changes in OS::Heat::TestResource resource, which allows to demonstrate mentioned caching feature improvements. Initially test was run against current devstack installation, where caching is disabled (e.g. Patch Set 7). The follow results were gotten: +------------------+----------+----------+----------+--------+------+ |Action | Min (sec)| Max (sec)| Avg (sec)| Success| Count| +------------------+----------+----------+----------+--------+------+ |heat.create_stack | 38.223 | 48.085 | 42.971 | 100.0% | 10 | +------------------+----------+----------+----------+--------+------+ |heat.delete_stack | 11.755 | 18.155 | 14.085 | 100.0% | 10 | +------------------+----------+----------+----------+--------+------+ |total | 50.188 | 65.361 | 57.057 | 100.0% | 10 | +------------------+----------+----------+----------+--------+------+ In the next patch set (Patch Set 8) was updated by adding Depends-On reference to commit message. It let to execute the same test with patch for devstack, which turns on caching (https://review.opendev.org/#/c/279400/). The results for this case were: +------------------+----------+----------+----------+--------+------+ |Action | Min (sec)| Max (sec)| Avg (sec)| Success| Count| +------------------+----------+----------+----------+--------+------+ |heat.create_stack | 11.863 | 16.074 | 14.174 | 100.0% | 10 | +------------------+----------+----------+----------+--------+------+ |heat.delete_stack | 9.144 | 11.663 | 10.595 | 100.0% | 10 | +------------------+----------+----------+----------+--------+------+ |total | 21.557 | 27.18 | 24.77 | 100.0% | 10 | +------------------+----------+----------+----------+--------+------+ Comparison average values for create_stack action in the first and the second executions shows, that with enabled caching create_stack works faster in 3 times. It is a tangible improvement for create_stack operation. Need to note, that in described test delay for each constraint validation request takes 0.3 sec. as specified in ``constraint_prop_secs`` property of TestResource. It may be more, than real time delay, but it allows to confirm, that caching works correct. Also this approach may be used for detecting regressions. In this case workflow may be presented as follow list of steps: - add to task list (``heat-fakevirt.yaml``) existing or new tasks. - wait a result of this execution. - upload patchset with changes (new feature) and launch the same test again. - compare performance results. .. _compare_output_API_performance: Compare output API performance ++++++++++++++++++++++++++++++ Another example of using Rally job is writing custom Rally scenarios in Heat repository. There is an example of this is presented on review: https://review.opendev.org/#/c/270225/ It's similar on the first example, but requires more Rally specific coding. New tasks in ``heat-fakevirt.yaml`` use undefined in Rally repository scenarios: - CustomHeatBenchmark.create_stack_and_show_output_new - CustomHeatBenchmark.create_stack_and_show_output_old - CustomHeatBenchmark.create_stack_and_list_output_new - CustomHeatBenchmark.create_stack_and_list_output_old All these scenarios are defined in the same patch and placed in ``rally-scenarios/plugins/`` directory. The aim of these scenarios and tasks is to demonstrate differences between new and old API calls. Heat client has a two commands for operating stack outputs: ``heat output-list`` and ``heat output-show ``. Previously there are no special API calls for getting this information from server and this data was obtained from whole Heat Stack object. This was changed after implementation new API for outputs: https://specs.openstack.org/openstack/heat-specs/specs/mitaka/api-calls-for-output.html As described in the mentioned specification outputs can be obtained via special requests to Heat API. According to this changes code in Heat client was updated to use new API, if it's available. The initial problem for this change was performance issue, which can be formulated as: execution command ``heat output-show `` with old approach required resolving all outputs in Heat Stack, before getting only one output specified by user. The same issue was and with ``heat output-list``, which required to resolve all outputs only for providing list of output keys without resolved values. Two scenarios with suffix ``*_new`` use new output API. These scenarios are not presented in Rally yet, because it's new API. Another two scenarios with suffix ``*_old`` are based on the old approach of getting outputs. This code was partially replaced by new API, so it's not possible to use it on fresh devstack. As result this custom code was written as two custom scenarios. All these scenarios were added to task list and executed in the same time. Results of execution are shown below: create_stack_and_show_output_old -------------------------------- +---------------------+----------+----------+----------+--------+------+ |Action | Min (sec)| Max (sec)| Avg (sec)| Success| Count| +---------------------+----------+----------+----------+--------+------+ |heat.create_stack | 13.559 | 14.298 | 13.899 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.show_output_old | 5.214 | 5.297 | 5.252 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.delete_stack | 5.445 | 6.962 | 6.008 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |total | 24.243 | 26.146 | 25.159 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ create_stack_and_show_output_new -------------------------------- +---------------------+----------+----------+----------+--------+------+ |Action | Min (sec)| Max (sec)| Avg (sec)| Success| Count| +---------------------+----------+----------+----------+--------+------+ |heat.create_stack | 13.719 | 14.286 | 13.935 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.show_output_new | 0.699 | 0.835 | 0.762 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.delete_stack | 5.398 | 6.457 | 5.636 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |total | 19.873 | 21.21 | 20.334 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ Average value for execution ``output-show`` for old approach obviously more, then for new API. It happens, because new API resolve only one specified output. Same results are for ``output-list``: create_stack_and_list_output_old -------------------------------- +---------------------+----------+----------+----------+--------+------+ |Action | Min (sec)| Max (sec)| Avg (sec)| Success| Count| +---------------------+----------+----------+----------+--------+------+ |heat.create_stack | 13.861 | 14.573 | 14.141 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.list_output_old | 5.247 | 5.339 | 5.281 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.delete_stack | 6.727 | 6.845 | 6.776 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |total | 25.886 | 26.696 | 26.199 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ create_stack_and_list_output_new -------------------------------- +---------------------+----------+----------+----------+--------+------+ |Action | Min (sec)| Max (sec)| Avg (sec)| Success| Count| +---------------------+----------+----------+----------+--------+------+ |heat.create_stack | 13.902 | 21.117 | 16.729 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.list_output_new | 0.147 | 0.363 | 0.213 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |heat.delete_stack | 6.616 | 8.202 | 7.022 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ |total | 20.838 | 27.908 | 23.964 | 100.0% | 5 | +---------------------+----------+----------+----------+--------+------+ It's also expected, because for getting list of output names is not necessary resolved values, how it is done in new API. All mentioned results clearly show performance changes and allow to confirm, that new approach works correctly. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/schedulerhints.rst0000664000175000017500000000341600000000000026133 0ustar00zuulzuul00000000000000.. 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 Stack Lifecycle Scheduler Hints ==================================== This is a mechanism whereby when heat processes a stack with Server or Volume resources, the stack id, root stack id, stack resource uuid, stack resource name and the path in the stack can be passed by heat to nova and cinder as scheduler hints. Enabling the scheduler hints ---------------------------- By default, passing the lifecycle scheduler hints is disabled. To enable it, set stack_scheduler_hints to True in heat.conf. The hints --------- When heat processes a stack, and the feature is enabled, the stack id, root stack id, stack resource uuid, stack resource name, and the path in the stack (as a list of comma delimited strings of stackresourcename and stackname) will be passed by heat to nova and cinder as scheduler hints. Purpose ------- A heat provider may have a need for custom code to examine stack requests prior to performing the operations to create or update a stack. After the custom code completes, the provider may want to provide hints to the nova or cinder schedulers with stack related identifiers, for processing by any custom scheduler plug-ins configured for nova or cinder. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/developing_guides/supportstatus.rst0000664000175000017500000002765500000000000026102 0ustar00zuulzuul00000000000000.. 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. .. _supportstatus: =============================== Heat Support Status usage Guide =============================== Heat allows to use for each resource, property, attribute special option named *support_status*, which describes current state of object: current status, since what time this status is actual, any additional information about object's state. This guide describes a detailed state life cycle of resources, properties and attributes. Support Status option and its parameters ---------------------------------------- Support status of object may be specified by using class ``SupportStatus``, which has follow options: *status*: Current status of object. Allowed values: - SUPPORTED. Default value of status parameter. All objects with this status are available and can be used. - DEPRECATED. Object with this status is available, but using it in code or templates is undesirable. As usual, can be reference in message to new object, which can be used instead of deprecated resource. - HIDDEN. The last step in the deprecation process. Old stacks containing resources in this status will continue functioning. Certain functionality is disabled for resources in this status (resource-type-list, resource-type-show, and resource-type-template). Resources in HIDDEN status are not included in the documentation. A known limitation is that new stacks can be created with HIDDEN resources. See below for more details about the removal and deprecation process. - UNSUPPORTED. Resources with UNSUPPORTED status are not supported by Heat team, i.e. user can use it, but it may be broken. *substitute_class*: Assign substitute class for object. If replacing the object with new object which inherited (or extended) from the substitute class will transfer the object to new class type gracefully (without calling update replace). *version*: Release name, since which current status is active. Parameter is optional, but should be defined or changed any time SupportStatus is specified or status changed. It used for better understanding from which release object in current status. .. note:: Since Liberty release mark looks like 5.0.0 instead of 2015.2. *message*: Any additional information about object's state, e.g. ``'Use property new_property instead.'``. *previous_status*: Option, which allows to display object's previous status, if any. This is helpful for displaying full life cycle of object. Type of *previous_status* is SupportStatus. Life cycle of resource, property, attribute ------------------------------------------- This section describes life cycle of such objects as resource, property and attribute. All these objects have same life cycle:: UNSUPPORTED -> SUPPORTED -> DEPRECATED -> HIDDEN \ -> UNSUPPORTED where UNSUPPORTED is optional. Creating process of object ++++++++++++++++++++++++++ During creating object there is a reason to add support status. So new object should contains *support_status* parameter equals to ``SupportStatus`` class with defined version of object and, maybe, *substitute_class* or some message. This parameter allows user to understand, from which OpenStack release this object is available and can be used. Deprecating process of object +++++++++++++++++++++++++++++ When some object becomes obsolete, user should know about that, so there is need to add information about deprecation in *support_status* of object. Status of ``SupportStatus`` must equals to DEPRECATED. If there is no *version* parameter, need to add one with current release otherwise move current status to *previous_status* and add to *version* current release as value. If some new object replaces old object, it will be good decision to add some information about new object to *support_status* message of old object, e.g. 'Use property new_property instead.'. If old object is directly replaceable by new object, we should add *substitute_class* to *support_status* in old object. Removing process of object ++++++++++++++++++++++++++ After at least one full release cycle deprecated object should be hidden and *support_status* status should equals to HIDDEN. HIDDEN status means hiding object from documentation and from result of :code:`resource-type-list` CLI command, if object is resource. Also, :code:`resource-type-show` command with such resource will raise `NotSupported` exception. The purpose of hiding, rather than removing, obsolete resources or properties is to ensure that users can continue to operate existing stacks - replacing or removing the offending resources, or deleting the entire stack. Steps should be taken to ensure that these operations can succeed, e.g. by replacing a hidden resource type's implementation with one that is equivalent to ``OS::Heat::None`` when the underlying API no longer exists, supplying a *substitute_class* for a resource type, or adding a property translation rule. Using Support Status during code writing ---------------------------------------- When adding new objects or adding objects instead of some old (e.g. property subnet instead of subnet_id in OS::Neutron::RouterInterface), there is some information about time of adding objects (since which release it will be available or unavailable). This section described ``SupportStatus`` during creating/deprecating/removing resources and properties and attributes. Note, that ``SupportStatus`` locates in support.py, so you need to import *support*. For specifying status, use *support* constant names, e.g. support.SUPPORTED. All constant names described in section above. Using Support Status during creation ++++++++++++++++++++++++++++++++++++ Option *support_status* may be used for whole resource: .. code-block:: python class ResourceWithType(resource.Resource): support_status=support.SupportStatus( version='5.0.0', message=_('Optional message') ) To define *support_status* for property or attribute, follow next steps: .. code-block:: python PROPERTY: properties.Schema( ... support_status=support.SupportStatus( version='5.0.0', message=_('Optional message') ) ) Same support_status definition for attribute schema. Note, that in this situation status parameter of ``SupportStatus`` uses default value, equals to SUPPORTED. Using Support Status during deprecation and hiding ++++++++++++++++++++++++++++++++++++++++++++++++++ When time of deprecation or hiding resource/property/attribute comes, follow next steps: 1. If there is some support_status in object, add `previous_status` parameter with current ``SupportStatus`` value and change all other parameters for current `status`, `version` and, maybe, `substitute_class` or `message`. 2. If there is no support_status option, add new one with parameters status equals to current status, `version` equals to current release note and, optionally, some message. Using Support Status during resource deprecating looks like: .. code-block:: python class ResourceWithType(resource.Resource): support_status=support.SupportStatus( status=support.DEPRECATED, version='5.0.0', substitute_class=SubstituteResourceWithType, message=_('Optional message'), previous_status=support.SupportStatus(version='2014.2') ) Using Support Status during attribute (or property) deprecating looks like: .. code-block:: python ATTRIBUTE: attributes.Schema( ... support_status=support.SupportStatus( status=support.DEPRECATED, version='5.0.0', message=_('Optional message like: Use attribute new_attr'), previous_status=support.SupportStatus( version='2014.2', message=_('Feature available since 2014.2')) ) ) Same *support_status* defining for property schema. Note, that during hiding object status should be equal support.HIDDEN instead of support.DEPRECATED. Besides that, SupportStatus with DEPRECATED status should be moved to *previous_status*, e.g.: .. code-block:: python support.SupportStatus( status=support.HIDDEN, version='6.0.0', message=_('Some message'), previous_status=support.SupportStatus( status=support.DEPRECATED, version='2015.1', substitute_class=SubstituteResourceWithType, previous_status=support.SupportStatus(version='2014.2') ) ) During hiding properties, if some hidden property has alternative, use translation mechanism for translating properties from old to new one. See below, how to use this mechanism. Translating mechanism for hidden properties ------------------------------------------- Sometimes properties become deprecated and replaced by another. There is translation mechanism for that. Mechanism used for such cases: 1. If there are two properties in properties_schema, which have STRING, INTEGER, NUMBER or BOOLEAN type. 2. If there are two properties: one in LIST or MAP property sub-schema and another on the top schema. 3. If there are two properties in LIST property. 4. If there are non-LIST property and LIST property, which is designed to replace non-LIST property. 5. If there is STRING property, which contains name or ID of some entity, e.g. `subnet`, and should be resolved to entity's ID. Mechanism has rules and executes them. To define rule, ``TranslationRule`` class called and specifies *translation_path* - list with path in properties_schema for property which will be affected; *value* - value, which will be added to property, specified by previous parameter; *value_name* - name of old property, used for case 4; *value_path* - list with path in properties_schema for property which will be used for getting value. ``TranslationRule`` supports next rules: - *ADD*. This rule allows to add some value to LIST-type properties. Only LIST-type values can be added to such properties. Using for other cases is prohibited and will be returned with error. - *REPLACE*. This rule allows to replace some property value to another. Used for all types of properties. Note, that if property has list type, then value will be replaced for all elements of list, where it needed. If element in such property must be replaced by value of another element of this property, *value_name* must be defined. - *DELETE*. This rule allows to delete some property. If property has list type, then deleting affects value in all list elements. - *RESOLVE* - This rule allows to resolve some property using client and the *finder* function. Finders may require an additional *entity* key. Each resource, which has some hidden properties, which can be replaced by new, must overload `translation_rules` method, which should return a list of ``TranslationRules``, for example: .. code-block:: python def translation_rules(self, properties): rules = [ translation.TranslationRule( properties, translation.TranslationRule.REPLACE, translation_path=[self.NETWORKS, self.NETWORK_ID], value_name=self.NETWORK_UUID), translation.TranslationRule( properties, translation.TranslationRule.RESOLVE, translation_path=[self.FLAVOR], client_plugin=self.client_plugin('nova'), finder='find_flavor_by_name_or_id')] return rules ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.255036 openstack_heat-24.0.0/doc/source/ext/0000775000175000017500000000000000000000000017455 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/ext/__init__.py0000664000175000017500000000000000000000000021554 0ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/ext/resources.py0000664000175000017500000004235200000000000022047 0ustar00zuulzuul00000000000000# # 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. # -*- coding: utf-8 -*- from functools import cmp_to_key import json import pydoc from docutils import core from docutils import nodes from docutils.parsers import rst from heat.common.i18n import _ from heat.engine import attributes from heat.engine import plugin_manager from heat.engine import properties from heat.engine import support _CODE_NAMES = { '2013.1': 'Grizzly', '2013.2': 'Havana', '2014.1': 'Icehouse', '2014.2': 'Juno', '2015.1': 'Kilo', '5.0.0': 'Liberty', '6.0.0': 'Mitaka', '7.0.0': 'Newton', '8.0.0': 'Ocata', '9.0.0': 'Pike', '10.0.0': 'Queens', '11.0.0': 'Rocky', '12.0.0': 'Stein', '13.0.0': 'Train', '14.0.0': 'Ussuri', '15.0.0': 'Victoria', '16.0.0': 'Wallaby', '17.0.0': 'Xena', '18.0.0': 'Yoga', '19.0.0': 'Zed', '20.0.0': '2023.1', '21.0.0': '2023.2', } all_resources = {} class integratedrespages(nodes.General, nodes.Element): pass class unsupportedrespages(nodes.General, nodes.Element): pass class contribresourcepages(nodes.General, nodes.Element): pass class ResourcePages(rst.Directive): has_content = False required_arguments = 0 optional_arguments = 1 final_argument_whitespace = False option_spec = {} def path(self): return None def statuses(self): return support.SUPPORT_STATUSES def run(self): prefix = self.arguments and self.arguments.pop() or None content = [] for resource_type, resource_classes in _filter_resources( prefix, self.path(), self.statuses()): 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) # NOTE(prazumovsky): Adding base_attributes_schema dict to # Resource class should means adding new attributes from this # dict to documentation of each resource, else there is no # chance to learn about base attributes. self.attrs_schemata.update( self.resource_class.base_attributes_schema) self.update_policy_schemata = properties.schemata( self.resource_class.update_policy_schema) 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) self.contribute_properties(section) self.contribute_attributes(section) self.contribute_update_policy(section) self.contribute_hot_syntax(section) return content def _version_str(self, version): if version in _CODE_NAMES: return _("%(version)s (%(code)s)") % {'version': version, 'code': _CODE_NAMES[version]} else: return version def _status_str(self, support_status, section): while support_status is not None: sstatus = support_status.to_dict() if sstatus['status'] is support.SUPPORTED: msg = _('Available') else: msg = sstatus['status'] if sstatus['version'] is not None: msg = _('%(msg)s since %(version)s') % { 'msg': msg, 'version': self._version_str(sstatus['version'])} if sstatus['message'] is not None: msg = _('%(msg)s - %(status_msg)s') % { 'msg': msg, 'status_msg': sstatus['message']} if not (sstatus['status'] == support.SUPPORTED and sstatus['version'] is None): para = nodes.inline('', msg) para['classes'] = ['versionmodified'] parent_para = nodes.paragraph() parent_para['classes'] = ['versionsupport'] parent_para.append(para) note = nodes.topic() if sstatus['status'] == support.SUPPORTED: note['classes'] = ['versionadded'] else: note['classes'] = ['deprecated'] note.append(parent_para) section.append(note) support_status = support_status.previous_status def _section(self, parent, title, id_pattern): id = id_pattern % self.resource_type section = nodes.section(ids=[id]) parent.append(section) title = nodes.title('', title) section.append(title) return section def _prop_section(self, parent, title, id_pattern): id = id_pattern % self.resource_type section = nodes.section(ids=[id]) parent.append(section) # Ignore title generated for list items if title != '*': title = nodes.term('', title) ref = nodes.reference('', '\xb6') ref['classes'] = ['headerlink'] ref['refid'] = id title.append(ref) section.append(title) field = nodes.definition() section.append(field) return field def _prop_syntax_example(self, prop): if not prop: return 'Value' if prop.type == properties.Schema.LIST: def schema(i): return prop.schema[i] if prop.schema else None sub_type = [self._prop_syntax_example(schema(i)) for i in range(2)] return '[%s, %s, ...]' % tuple(sub_type) elif prop.type == properties.Schema.MAP: def sub_props(): for sub_key, sub_value in prop.schema.items(): if sub_value.implemented: yield '"%s": %s' % ( sub_key, self._prop_syntax_example(sub_value)) return '{%s}' % (', '.join(sub_props()) if prop.schema else '...') else: return prop.type def contribute_hot_syntax(self, parent): section = self._section(parent, _('HOT Syntax'), '%s-hot') props = [] for prop_key in sorted(self.props_schemata.keys()): prop = self.props_schemata[prop_key] if (prop.implemented and prop.support_status.status == support.SUPPORTED): props.append('%s: %s' % (prop_key, self._prop_syntax_example(prop))) props_str = '' if props: props_str = '''\n properties: %s''' % ('\n '.join(props)) template = '''heat_template_version: 2015-04-30 ... resources: ... the_resource: type: %s%s''' % (self.resource_type, props_str) block = nodes.literal_block(template, template, language="yaml") section.append(block) @staticmethod def cmp_prop(x, y): x_key, x_prop = x y_key, y_prop = y if x_prop.support_status.status == y_prop.support_status.status: return (x_key > y_key) - (x_key < y_key) x_status = x_prop.support_status.status y_status = y_prop.support_status.status if x_status == support.SUPPORTED: return -1 if x_status == support.DEPRECATED: return 1 return (x_status > y_status) - (x_status < y_status) def contribute_property(self, parent, prop_key, prop, upd_para=None, id_pattern_prefix=None, sub_prop=False): if not id_pattern_prefix: id_pattern_prefix = '%s-prop' id_pattern = id_pattern_prefix + '-' + prop_key definition = self._prop_section(parent, prop_key, id_pattern) self._status_str(prop.support_status, definition) if not prop.implemented: para = nodes.line('', _('Not implemented.')) note = nodes.note('', para) if sub_prop: definition.append(para) else: definition.append(note) return if sub_prop and prop.type not in (properties.Schema.LIST, properties.Schema.MAP): if prop.required: para = nodes.line('', _('Required.')) definition.append(para) else: para = nodes.line('', _('Optional.')) definition.append(para) if prop.description: para = nodes.line('', prop.description) definition.append(para) type = nodes.line('', _('%s value expected.') % prop.type) definition.append(type) if upd_para is not None: definition.append(upd_para) else: if prop.update_allowed: upd_para = nodes.line( '', _('Can be updated without replacement.')) definition.append(upd_para) elif prop.immutable: upd_para = nodes.line('', _('Updates are not supported. ' 'Resource update will fail on ' 'any attempt to update this ' 'property.')) definition.append(upd_para) else: upd_para = nodes.line('', _('Updates cause replacement.')) definition.append(upd_para) if prop.default is not None: para = nodes.line('', _('Defaults to ')) default = nodes.literal('', json.dumps(prop.default)) para.append(default) definition.append(para) elif prop_key == 'description' and prop.update_allowed: para = nodes.line('', _('Defaults to the resource description')) for constraint in prop.constraints: para = nodes.line('', str(constraint)) definition.append(para) sub_schema = None if prop.schema and prop.type == properties.Schema.MAP: para = nodes.line() emph = nodes.emphasis('', _('Map properties:')) para.append(emph) definition.append(para) sub_schema = prop.schema elif prop.schema and prop.type == properties.Schema.LIST: para = nodes.line() emph = nodes.emphasis('', _('List contents:')) para.append(emph) definition.append(para) sub_schema = prop.schema if sub_schema: indent = nodes.definition_list() definition.append(indent) for _key, _prop in sorted(sub_schema.items(), key=cmp_to_key(self.cmp_prop)): if _prop.support_status.status != support.HIDDEN: self.contribute_property( indent, _key, _prop, upd_para, id_pattern, sub_prop=True) def contribute_properties(self, parent): if not self.props_schemata: return props = dict((k, v) for k, v in self.props_schemata.items() if v.support_status.status != support.HIDDEN) required_props = dict((k, v) for k, v in props.items() if v.required) if required_props: section = self._section( parent, _('Required Properties'), '%s-props-req') definition_list = nodes.definition_list() section.append(definition_list) for prop_key, prop in sorted(required_props.items(), key=cmp_to_key(self.cmp_prop)): self.contribute_property(definition_list, prop_key, prop) optional_props = dict((k, v) for k, v in props.items() if not v.required) if optional_props: section = self._section( parent, _('Optional Properties'), '%s-props-opt') definition_list = nodes.definition_list() section.append(definition_list) for prop_key, prop in sorted(optional_props.items(), key=cmp_to_key(self.cmp_prop)): self.contribute_property(definition_list, prop_key, prop) def contribute_attributes(self, parent): if not self.attrs_schemata: return section = self._section(parent, _('Attributes'), '%s-attrs') definition_list = nodes.definition_list() section.append(definition_list) for prop_key, prop in sorted(self.attrs_schemata.items()): if prop.support_status.status != support.HIDDEN: description = prop.description attr_section = self._prop_section( definition_list, prop_key, '%s-attr-' + prop_key) self._status_str(prop.support_status, attr_section) if description: def_para = nodes.paragraph('', description) attr_section.append(def_para) def contribute_update_policy(self, parent): if not self.update_policy_schemata: return section = self._section(parent, _('update_policy'), '%s-updpolicy') definition_list = nodes.definition_list() section.append(definition_list) for _key, _prop in sorted(self.update_policy_schemata.items(), key=cmp_to_key(self.cmp_prop)): self.contribute_property(definition_list, _key, _prop) class IntegrateResourcePages(ResourcePages): def path(self): return 'heat.engine.resources' def statuses(self): return [support.SUPPORTED] class UnsupportedResourcePages(ResourcePages): def path(self): return 'heat.engine.resources' def statuses(self): return [s for s in support.SUPPORT_STATUSES if s != support.SUPPORTED] class ContribResourcePages(ResourcePages): def path(self): return 'heat.engine.plugins' def _filter_resources(prefix=None, path=None, statuses=None): def not_hidden_match(cls): return cls.support_status.status != support.HIDDEN 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) def status_match(cls): return cls.support_status.status in statuses statuses = statuses or [] filtered_resources = {} for name in sorted(all_resources.keys()): if prefix_match(name): for cls in all_resources.get(name): if (path_match(cls) and status_match(cls) and not_hidden_match(cls)): if filtered_resources.get(name) is not None: filtered_resources[name].append(cls) else: filtered_resources[name] = [cls] return sorted(filtered_resources.items()) def _load_all_resources(): from oslo_log import log as logging logging.getLogger('heat.engine.environment').logger.setLevel(logging.ERROR) manager = plugin_manager.PluginManager('heat.engine.resources') resource_mapping = plugin_manager.PluginMapping('resource') res_plugin_mappings = resource_mapping.load_all(manager) 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 link_resource(app, env, node, contnode): reftarget = node.attributes['reftarget'] for resource_name in all_resources: if resource_name.lower() == reftarget.lower(): refnode = nodes.reference('', '', internal=True) refnode['reftitle'] = resource_name if resource_name.startswith('AWS'): source = 'template_guide/cfn' else: source = 'template_guide/openstack' uri = app.builder.get_relative_uri( node.attributes['refdoc'], source) refnode['refuri'] = '%s#%s' % (uri, resource_name) refnode.append(contnode) return refnode def setup(app): _load_all_resources() app.add_node(integratedrespages) app.add_directive('integratedrespages', IntegrateResourcePages) app.add_node(unsupportedrespages) app.add_directive('unsupportedrespages', UnsupportedResourcePages) app.add_node(contribresourcepages) app.add_directive('contribrespages', ContribResourcePages) app.connect('missing-reference', link_resource) ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/ext/tablefromtext.py0000664000175000017500000000721400000000000022713 0ustar00zuulzuul00000000000000# # 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. # -*- coding: utf-8 -*- import os import re from docutils import nodes from docutils.parsers.rst import directives from docutils.parsers.rst.directives.tables import Table class TableFromText(Table): """Take input from a file and create a simple table. Example: .. table_from_text:: ../setup.cfg :header: Name,Plug-in :regex: (.*)=(.*) :start-after: heat.constraints = :end-before: heat.stack_lifecycle_plugins = :sort: file: input file relative to source directory header: comma separated list of column titles regex: regular expression to parse the source line into columns start-after: string to look for to start column data end-before: string to look for to end column data sort: flag for sorting column data """ required_arguments = 1 option_spec = { 'header': directives.unchanged_required, 'regex': directives.unchanged_required, 'start-after': directives.unchanged_required, 'end-before': directives.unchanged_required, 'sort': directives.flag } def run(self): header = self.options.get('header').split(',') lines = self._get_lines() regex = self.options.get('regex') max_cols = len(header) table = nodes.table() tgroup = nodes.tgroup(max_cols) table += tgroup col_widths = self.get_column_widths(max_cols) if isinstance(col_widths, tuple): col_widths = col_widths[1] tgroup.extend(nodes.colspec(colwidth=col_width) for col_width in col_widths) thead = nodes.thead() tgroup += thead thead += self.create_table_row(header) tbody = nodes.tbody() tgroup += tbody for row in lines: matched = re.search(regex, row) if matched: tbody += self.create_table_row(matched.groups()) return [table] def create_table_row(self, row_cells): row = nodes.row() for cell in row_cells: entry = nodes.entry() row += entry entry += nodes.paragraph(text=cell.strip()) return row def _get_lines(self): env = self.state.document.settings.env sourcefile = os.path.join(env.srcdir, self.arguments[0]) startafter = self.options.get('start-after') endbefore = self.options.get('end-before') lines = [line.strip() for line in open(sourcefile)] if startafter is not None or endbefore is not None: includeline = not startafter result = [] for line in lines: if not includeline and startafter and startafter in line: includeline = True elif includeline and endbefore and endbefore in line: includeline = False break elif includeline: result.append(line) lines = result if 'sort' in self.options: lines = sorted(lines) return lines def setup(app): app.add_directive('table_from_text', TableFromText) ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.255036 openstack_heat-24.0.0/doc/source/getting_started/0000775000175000017500000000000000000000000022044 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/create_a_stack.rst0000664000175000017500000001024600000000000025531 0ustar00zuulzuul00000000000000.. 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. .. _create-a-stack: Creating your first stack ========================= Confirming you can access a Heat endpoint ----------------------------------------- Before any Heat commands can be run, your cloud credentials need to be sourced:: $ source openrc You can confirm that Heat is available with this command:: $ openstack stack list This should return an empty line Preparing to create a stack --------------------------- Download and register the image:: $ wget https://download.fedoraproject.org/pub/fedora/linux/releases/37/Cloud/x86_64/images/Fedora-Cloud-Base-37-1.7.x86_64.qcow2 $ openstack image create \ --disk-format=qcow2 \ --container-format=bare \ --file=Fedora-Cloud-Base-37-1.7.x86_64.qcow2 \ my-fedora-image Your cloud will have different flavors and images available for launching instances, you can discover what is available by running:: $ openstack flavor list $ openstack image list To allow you to SSH into instances launched by Heat, a keypair will be generated:: $ openstack keypair create heat_key > heat_key.priv $ chmod 600 heat_key.priv Launching a stack ----------------- Now lets launch a stack, using an example template from the heat-templates repository:: $ openstack stack create -t https://opendev.org/openstack/heat-templates/src/branch/master/hot/F20/WordPress_Native.yaml --parameter key_name=heat_key --parameter image_id=my-fedora-image --parameter instance_type=m1.small teststack Which will respond:: +--------------------------------------+-----------+--------------------+----------------------+ | ID | Name | Status | Created | +--------------------------------------+-----------+--------------------+----------------------+ | 718a712a-2571-4eac-aa03-426de00ecb43 | teststack | CREATE_IN_PROGRESS | 2017-04-11T03:06:24Z | +--------------------------------------+-----------+--------------------+----------------------+ .. note:: Link on Heat template presented in command above should reference on RAW template. In case if it be a "html" page with template, Heat will return an error. .. note:: You cannot rename a stack after it has been launched. List stacks ~~~~~~~~~~~ List the stacks in your tenant:: $ openstack stack list List stack events ~~~~~~~~~~~~~~~~~ List the events related to a particular stack:: $ openstack stack event list teststack Describe the wordpress stack ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Show detailed state of a stack:: $ openstack stack show teststack Note: After a few seconds, the stack_status should change from ``IN_PROGRESS`` to ``CREATE_COMPLETE``. Verify instance creation ~~~~~~~~~~~~~~~~~~~~~~~~ Because the software takes some time to install from the repository, it may be a few minutes before the Wordpress instance is in a running state. Point a web browser at the location given by the ``WebsiteURL`` output as shown by ``openstack stack output show``:: $ WebsiteURL=$(openstack stack output show teststack WebsiteURL -c output_value -f value) $ curl $WebsiteURL Delete the instance when done ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Note: The list operation will show no running stack.:: $ openstack stack delete teststack $ openstack stack list You can explore other heat commands by referring to the :python-heatclient-doc:`Heat command reference ` for the :python-openstackclient-doc:`OpenStack Command-Line Interface <>`; then read the :ref:`template-guide` and start authoring your own templates. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/index.rst0000664000175000017500000000134000000000000023703 0ustar00zuulzuul00000000000000.. 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. :orphan: Getting Started Guides ====================== .. toctree:: :maxdepth: 2 on_devstack on_fedora on_ubuntu on_other standalone ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/on_devstack.rst0000664000175000017500000000733200000000000025103 0ustar00zuulzuul00000000000000.. 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 and DevStack ================= Heat is fully integrated into DevStack. This is a convenient way to try out or develop heat alongside the current development state of all the other OpenStack projects. Heat on DevStack works on both Ubuntu and Fedora. These instructions assume you already have a working DevStack installation which can launch basic instances. Configure DevStack to enable heat --------------------------------- Heat is configured by default on devstack for Icehouse and Juno releases. Newer versions of OpenStack require enabling heat services in devstack `local.conf`. Add the following to `[[local|localrc]]` section of `local.conf`:: [[local|localrc]] #Enable heat services enable_service h-eng h-api h-api-cfn Since Newton release, heat is available as a devstack plugin. To enable the plugin add the following to the `[[local|localrc]]` section of `local.conf`:: [[local|localrc]] #Enable heat plugin enable_plugin heat https://opendev.org/openstack/heat To use stable branches, make sure devstack is on that branch, and specify the branch name to enable_plugin, for example:: enable_plugin heat https://opendev.org/openstack/heat stable/newton It would also be useful to automatically download and register a VM image that heat can launch. To do that add the following to `[[local|localrc]]` section of `local.conf`:: IMAGE_URL_SITE="https://download.fedoraproject.org" IMAGE_URL_PATH="/pub/fedora/linux/releases/37/Cloud/x86_64/images/" IMAGE_URL_FILE="Fedora-Cloud-Base-37-1.7.x86_64.qcow2" IMAGE_URLS+=","$IMAGE_URL_SITE$IMAGE_URL_PATH$IMAGE_URL_FILE URLs for any cloud image may be specified, but fedora images from F20 contain the heat-cfntools package which is required for some heat functionality. That is all the configuration that is required. When you run `./stack.sh` the heat processes will be launched in `screen` with the labels prefixed with `h-`. Configure DevStack to enable ceilometer and aodh (if using alarms) ------------------------------------------------------------------ To use aodh alarms you need to enable ceilometer and aodh in devstack. Adding the following lines to `[[local|localrc]]` section of `local.conf` will enable the services:: CEILOMETER_BACKENDS=gnocchi enable_plugin ceilometer https://opendev.org/openstack/ceilometer enable_plugin aodh https://opendev.org/openstack/aodh Configure DevStack to enable OSprofiler --------------------------------------- Adding the following line to `[[local|localrc]]` section of `local.conf` will add the profiler notifier to your ceilometer:: CEILOMETER_NOTIFICATION_TOPICS=notifications,profiler Enable the profiler in /etc/heat/heat.conf:: $ echo -e "[profiler]\nenabled = True\n"\ "trace_sqlalchemy = True\n"\ "hmac_keys = SECRET_KEY\n"\ >> /etc/heat/heat.conf Run any command with --profile SECRET_KEY:: $ heat --profile SECRET_KEY stack-list # it will print Get pretty HTML with traces:: $ osprofiler trace show --html Note that osprofiler should be run with the admin user name & tenant. Create a stack -------------- Now that you have a working heat environment you can go to :ref:`create-a-stack`. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/on_fedora.rst0000664000175000017500000000250400000000000024533 0ustar00zuulzuul00000000000000.. 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. Installing OpenStack and Heat on RHEL/Fedora/CentOS --------------------------------------------------- Go to the `OpenStack Documentation `_ for the latest version of the Installation Guide for Red Hat Enterprise Linux, CentOS and Fedora which includes a chapter on installing the Orchestration module (Heat). There are instructions for `installing the RDO OpenStack `_ on Fedora and CentOS. If installing with packstack, you can install heat by specifying ``--os-heat-install=y`` in your packstack invocation, or setting ``CONFIG_HEAT_INSTALL=y`` in your answers file. If installing with `TripleO `_ Heat will be installed by default. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/on_other.rst0000664000175000017500000000160500000000000024415 0ustar00zuulzuul00000000000000.. 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. Installing OpenStack on other distributions =========================================== - There is a `Debian packaging team for OpenStack`_. - Various other distributions may have packaging teams or getting started guides available. .. _Debian packaging team for OpenStack: http://wiki.openstack.org/Packaging/Debian ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/on_ubuntu.rst0000664000175000017500000000172300000000000024617 0ustar00zuulzuul00000000000000.. 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. Installing Heat on Ubuntu ------------------------- Heat is packaged for Debian, and Ubuntu (from 13.10) Go to the `OpenStack Documentation `_ for the latest version of the Installation Guide for Ubuntu which includes a chapter on installing the Orchestration module (Heat). There is a `Juju Charm for Heat ` available. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/getting_started/standalone.rst0000664000175000017500000000605400000000000024733 0ustar00zuulzuul00000000000000.. 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. How to get heat to work with a remote OpenStack. ================================================ Say you have a remote/public install of OpenStack and you want to use a local install of heat to talk to it. This can be handy when developing, as the remote OpenStack can be kept stable and is not effected by changes made to the development machine. So lets say you have 2 machines: * “rock” ip == 192.168.1.88 (used for base OpenStack services) * “hack” ip == 192.168.1.77 (used for heat development) Install your OpenStack as normal on “rock”. In this example "hack" is used as the devstack to install heat on. The localrc looked like this:: HEAT_STANDALONE=True KEYSTONE_AUTH_HOST=192.168.1.88 KEYSTONE_AUTH_PORT=5000 KEYSTONE_AUTH_PROTOCOL=http KEYSTONE_SERVICE_HOST=$KEYSTONE_AUTH_HOST KEYSTONE_SERVICE_PORT=$KEYSTONE_AUTH_PORT KEYSTONE_SERVICE_PROTOCOL=$KEYSTONE_AUTH_PROTOCOL MY_PASSWORD=abetterpasswordthanthis DATABASE_PASSWORD=$MY_PASSWORD RABBIT_PASSWORD=$MY_PASSWORD disable_all_services # Alternative RPC backends are zeromq and rabbit ENABLED_SERVICES=qpid enable_service mysql heat h-api h-api-cfn h-eng Then run your ./stack.sh as normal. You then need a special environment (not devstack/openrc) to make this work. go to your “rock” machine and get the tenant_id that you want to work with:: keystone tenant-list +----------------------------------+--------------------+---------+ | id | name | enabled | +----------------------------------+--------------------+---------+ | 6943e3ebad0d465387d05d73f8e0b3fc | admin | True | | b12482712e354dd3b9f64ce608ba20f3 | alt_demo | True | | bf03bf32e3884d489004ac995ff7a61c | demo | True | | c23ceb3bf5dd4f9692488855de99137b | invisible_to_admin | True | | c328c1f3b945487d859ed2f53dcf0fe4 | service | True | +----------------------------------+--------------------+---------+ Let's say you want “demo”. Now make a file to store your new environment (heat.env). :: export HEAT_URL=http://192.168.1.77:8004/v1/bf03bf32e3884d489004ac995ff7a61c export OS_NO_CLIENT_AUTH=True export OS_USERNAME=admin export OS_TENANT_NAME=demo export OS_PASSWORD=abetterpasswordthanthis export OS_AUTH_URL=http://192.168.1.88:5000/v3/ Now you use this like:: . heat.env heat stack-list Note: remember to open up firewall ports on “rock” so that you can access the OpenStack services. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/glossary.rst0000664000175000017500000001432500000000000021257 0ustar00zuulzuul00000000000000.. 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. ========== Glossary ========== .. glossary:: :sorted: API server HTTP REST API service for heat. CFN An abbreviated form of "AWS CloudFormation". constraint Defines valid input :term:`parameters` for a :term:`template`. dependency When a :term:`resource` must wait for another resource to finish creation before being created itself. Heat adds an implicit dependency when a resource references another resource or one of its :term:`attributes `. An explicit dependency can also be created by the user in the template definition. environment Used to affect the run-time behavior of the template. Provides a way to override the default resource implementation and parameters passed to Heat. See :ref:`Environments`. Heat Orchestration Template A particular :term:`template` format that is native to Heat. Heat Orchestration Templates are expressed in YAML and are not backwards-compatible with CloudFormation templates. HOT An acronym for ":term:`Heat Orchestration Template`". input parameters See :term:`parameters`. Metadata May refer to :term:`Resource Metadata`, :term:`Nova Instance metadata`, or the :term:`Metadata service`. Metadata service A Compute service that enables virtual machine instances to retrieve instance-specific data. See :nova-doc:`Nova Metadata service documentation `. multi-region A feature of Heat that supports deployment to multiple regions. nested resource A :term:`resource` instantiated as part of a :term:`nested stack`. nested stack A :term:`template` referenced by URL inside of another template. Used to reduce redundant resource definitions and group complex architectures into logical groups. Nova Instance metadata User-provided *key:value* pairs associated with a Compute Instance. See `Instance-specific data (OpenStack Operations Guide)`_. .. _Instance-specific data (OpenStack Operations Guide): https://wiki.openstack.org/wiki/OpsGuide/User-Facing_Operations#using-instance-specific-data OpenStack Open source software for building private and public clouds. orchestrate Arrange or direct the elements of a situation to produce a desired effect. outputs A top-level block in a :term:`template` that defines what data will be returned by a stack after instantiation. parameters A top-level block in a :term:`template` that defines what data can be passed to customise a template when it is used to create or update a :term:`stack`. provider resource A :term:`resource` implemented by a :term:`provider template`. The parent resource's properties become the :term:`nested stack's ` parameters. provider template Allows user-definable :term:`resource providers ` to be specified via :term:`nested stacks `. The nested stack's :term:`outputs` become the parent stack's :term:`attributes `. resource An element of OpenStack infrastructure instantiated from a particular :term:`resource provider`. See also :term:`nested resource`. resource attribute Data that can be obtained from a :term:`resource`, e.g. a server's public IP or name. Usually passed to another resource's :term:`properties ` or added to the stack's :term:`outputs`. resource group A :term:`resource provider` that creates one or more identically configured :term:`resources ` or :term:`nested resources `. Resource Metadata A :term:`resource property` that contains CFN-style template metadata. See `AWS::CloudFormation::Init (AWS CloudFormation User Guide)`_ .. _AWS::CloudFormation::Init (AWS CloudFormation User Guide): https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html resource plugin Python code that understands how to instantiate and manage a :term:`resource`. See `Heat Resource Plugins (OpenStack wiki)`_. .. _Heat Resource Plugins (OpenStack wiki): https://wiki.openstack.org/wiki/Heat/Plugins#Heat_Resource_Plugins resource property Data utilized for the instantiation of a :term:`resource`. Can be defined statically in a :term:`template` or passed in as :term:`input parameters `. resource provider The implementation of a particular resource type. May be a :term:`resource plugin` or a :term:`provider template`. stack A collection of instantiated :term:`resources ` that are defined in a single :term:`template`. stack resource A :term:`resource provider` that allows the management of a :term:`nested stack` as a :term:`resource` in a parent stack. template An orchestration document that details everything needed to carry out an :term:`orchestration `. template resource See :term:`provider resource`. user data A :term:`resource property` that contains a user-provided data blob. User data gets passed to `cloud-init`_ to automatically configure instances at boot time. See also :nova-doc:`Nova User data documentation `. .. _cloud-init: https://cloudinit.readthedocs.io/ wait condition A :term:`resource provider` that provides a way to communicate data or events from servers back to the orchestration engine. Most commonly used to pause the creation of the :term:`stack` while the server is being configured. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/index.rst0000664000175000017500000000627000000000000020523 0ustar00zuulzuul00000000000000.. 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. ================================== Welcome to the Heat documentation! ================================== Heat is a service to orchestrate composite cloud applications using a declarative template format through an OpenStack-native REST API. Heat's purpose and vision ========================= * Heat provides a template based orchestration for describing a cloud application by executing appropriate :term:`OpenStack` API calls to generate running cloud applications. * A Heat template describes the infrastructure for a cloud application in text files which are readable and writable by humans, and can be managed by version control tools. * Templates specify the relationships between resources (e.g. this volume is connected to this server). This enables Heat to call out to the OpenStack APIs to create all of your infrastructure in the correct order to completely launch your application. * The software integrates other components of OpenStack. The templates allow creation of most OpenStack resource types (such as instances, floating ips, volumes, security groups, users, etc), as well as some more advanced functionality such as instance high availability, instance autoscaling, and nested stacks. * Heat primarily manages infrastructure, but the templates integrate well with software configuration management tools such as Puppet and Ansible. * Operators can customise the capabilities of Heat by installing plugins. This documentation offers information aimed at end-users, operators and developers of Heat. Operating Heat ============== .. toctree:: :maxdepth: 1 install/index operating_guides/httpd configuration/index admin/index operating_guides/scale_deployment operating_guides/upgrades_guide man/index Using Heat ========== .. toctree:: :maxdepth: 1 getting_started/create_a_stack glossary Working with Templates ---------------------- .. toctree:: :maxdepth: 1 template_guide/index templates/index Using the Heat Service ---------------------- - `OpenStack Orchestration API v1 Reference`_ - :python-heatclient-doc:`Python and CLI client <>` .. _`OpenStack Orchestration API v1 Reference`: https://developer.openstack.org/api-ref/orchestration/v1/ Developing Heat =============== .. toctree:: :maxdepth: 2 developing_guides/index .. toctree:: :maxdepth: 1 api/index For Contributors ================ * If you are a new contributor to Heat please refer: :doc:`contributor/contributing` .. toctree:: :maxdepth: 2 contributor/index Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.259036 openstack_heat-24.0.0/doc/source/install/0000775000175000017500000000000000000000000020323 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/get_started.rst0000664000175000017500000000266300000000000023371 0ustar00zuulzuul00000000000000============================== Orchestration service overview ============================== The Orchestration service provides a template-based orchestration for describing a cloud application by running OpenStack API calls to generate running cloud applications. The software integrates other core components of OpenStack into a one-file template system. The templates allow you to create most OpenStack resource types such as instances, floating IPs, volumes, security groups, and users. It also provides advanced functionality such as instance high availability, instance auto-scaling, and nested stacks. This enables OpenStack core projects to receive a larger user base. The service allows deployers to integrate with the Orchestration service directly or through custom plug-ins. The Orchestration service consists of the following components: ``heat`` command-line client A CLI that communicates with the ``heat-api`` to run AWS CloudFormation APIs. End developers can directly use the Orchestration REST API. ``heat-api`` component An OpenStack-native REST API that processes API requests by sending them to the ``heat-engine`` over Remote Procedure Call (RPC). ``heat-api-cfn`` component An AWS Query API that is compatible with AWS CloudFormation. It processes API requests by sending them to the ``heat-engine`` over RPC. ``heat-engine`` Orchestrates the launching of templates and provides events back to the API consumer. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/index.rst0000664000175000017500000000067600000000000022175 0ustar00zuulzuul00000000000000=============== Installing Heat =============== .. toctree:: :maxdepth: 2 get_started.rst install.rst verify.rst launch-instance.rst next-steps.rst The Orchestration service (heat) uses a :ref:`Heat Orchestration Template (HOT) ` to create and manage cloud resources. This chapter assumes a working setup of OpenStack following the `OpenStack Installation Tutorial `_. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/install-debian.rst0000664000175000017500000003722300000000000023752 0ustar00zuulzuul00000000000000.. _install-debian: Install and configure for Debian ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This section describes how to install and configure the Orchestration service for Debian. Prerequisites ------------- Before you install and configure Orchestration, you must create a database, service credentials, and API endpoints. Orchestration also requires additional information in the Identity service. #. To create the database, complete these steps: * Use the database access client to connect to the database server as the ``root`` user: .. code-block:: console $ mysql -u root -p * Create the ``heat`` database: .. code-block:: console CREATE DATABASE heat; * Grant proper access to the ``heat`` database: .. code-block:: console GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \ IDENTIFIED BY 'HEAT_DBPASS'; GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ IDENTIFIED BY 'HEAT_DBPASS'; Replace ``HEAT_DBPASS`` with a suitable password. * Exit the database access client. #. Source the ``admin`` credentials to gain access to admin-only CLI commands: .. code-block:: console $ . admin-openrc #. To create the service credentials, complete these steps: * Create the ``heat`` user: .. code-block:: console $ openstack user create --domain default --password-prompt heat User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | e0353a670a9e496da891347c589539e9 | | enabled | True | | id | ca2e175b851943349be29a328cc5e360 | | name | heat | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat`` user: .. code-block:: console $ openstack role add --project service --user heat admin .. note:: This command provides no output. * Create the ``heat`` and ``heat-cfn`` service entities: .. code-block:: console $ openstack service create --name heat \ --description "Orchestration" orchestration +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | 727841c6f5df4773baa4e8a5ae7d72eb | | name | heat | | type | orchestration | +-------------+----------------------------------+ $ openstack service create --name heat-cfn \ --description "Orchestration" cloudformation +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | c42cede91a4e47c3b10c8aedc8d890c6 | | name | heat-cfn | | type | cloudformation | +-------------+----------------------------------+ #. Create the Orchestration service API endpoints: .. code-block:: console $ openstack endpoint create --region RegionOne \ orchestration public http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 3f4dab34624e4be7b000265f25049609 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration internal http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 9489f78e958e45cc85570fec7e836d98 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration admin http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 76091559514b40c6b7b38dde790efe99 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ .. code-block:: console $ openstack endpoint create --region RegionOne \ cloudformation public http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | b3ea082e019c4024842bf0a80555052c | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation internal http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 169df4368cdc435b8b115a9cb084044e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation admin http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 3d3edcd61eb343c1bbd629aa041ff88b | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ #. Orchestration requires additional information in the Identity service to manage stacks. To add this information, complete these steps: * Create the ``heat`` domain that contains projects and users for stacks: .. code-block:: console $ openstack domain create --description "Stack projects and users" heat +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Stack projects and users | | enabled | True | | id | 0f4d1bd326f2454dacc72157ba328a47 | | name | heat | +-------------+----------------------------------+ * Create the ``heat_domain_admin`` user to manage projects and users in the ``heat`` domain: .. code-block:: console $ openstack user create --domain heat --password-prompt heat_domain_admin User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | 0f4d1bd326f2454dacc72157ba328a47 | | enabled | True | | id | b7bd1abfbcf64478b47a0f13cd4d970a | | name | heat_domain_admin | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat_domain_admin`` user in the ``heat`` domain to enable administrative stack management privileges by the ``heat_domain_admin`` user: .. code-block:: console $ openstack role add --domain heat --user-domain heat --user heat_domain_admin admin .. note:: This command provides no output. * Create the ``heat_stack_owner`` role: .. code-block:: console $ openstack role create heat_stack_owner +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 15e34f0c4fed4e68b3246275883c8630 | | name | heat_stack_owner | +-----------+----------------------------------+ * Add the ``heat_stack_owner`` role to the ``demo`` project and user to enable stack management by the ``demo`` user: .. code-block:: console $ openstack role add --project demo --user demo heat_stack_owner .. note:: This command provides no output. .. note:: You must add the ``heat_stack_owner`` role to each user that manages stacks. * Create the ``heat_stack_user`` role: .. code-block:: console $ openstack role create heat_stack_user +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 88849d41a55d4d1d91e4f11bffd8fc5c | | name | heat_stack_user | +-----------+----------------------------------+ .. note:: The Orchestration service automatically assigns the ``heat_stack_user`` role to users that it creates during stack deployment. By default, this role restricts API operations. To avoid conflicts, do not add this role to users with the ``heat_stack_owner`` role. Install and configure components -------------------------------- .. note:: Default configuration files vary by distribution. You might need to add these sections and options rather than modifying existing sections and options. Also, an ellipsis (``...``) in the configuration snippets indicates potential default configuration options that you should retain. #. Install the packages: .. code-block:: console # apt-get install heat-api heat-api-cfn heat-engine 2. Edit the ``/etc/heat/heat.conf`` file and complete the following actions: * In the ``[database]`` section, configure database access: .. code-block:: ini [database] ... connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat Replace ``HEAT_DBPASS`` with the password you chose for the Orchestration database. * In the ``[DEFAULT]`` section, configure ``RabbitMQ`` message queue access: .. code-block:: ini [DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller Replace ``RABBIT_PASS`` with the password you chose for the ``openstack`` account in ``RabbitMQ``. * In the ``[keystone_authtoken]``, ``[trustee]`` and ``[clients_keystone]`` sections, configure Identity service access: .. code-block:: ini [keystone_authtoken] ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = heat password = HEAT_PASS [trustee] ... auth_type = password auth_url = http://controller:5000 username = heat password = HEAT_PASS user_domain_name = Default [clients_keystone] ... auth_uri = http://controller:5000 Replace ``HEAT_PASS`` with the password you chose for the ``heat`` user in the Identity service. * In the ``[DEFAULT]`` section, configure the metadata and wait condition URLs: .. code-block:: ini [DEFAULT] ... heat_metadata_server_url = http://controller:8000 heat_waitcondition_server_url = http://controller:8000/v1/waitcondition * In the ``[DEFAULT]`` section, configure the stack domain and administrative credentials: .. code-block:: ini [DEFAULT] ... stack_domain_admin = heat_domain_admin stack_domain_admin_password = HEAT_DOMAIN_PASS stack_user_domain_name = heat Replace ``HEAT_DOMAIN_PASS`` with the password you chose for the ``heat_domain_admin`` user in the Identity service. 3. Populate the Orchestration database: .. code-block:: console # su -s /bin/sh -c "heat-manage db_sync" heat .. note:: Ignore any deprecation messages in this output. Finalize installation --------------------- 1. Restart the Orchestration services: .. code-block:: console # service heat-api restart # service heat-api-cfn restart # service heat-engine restart ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/install-obs.rst0000664000175000017500000003743400000000000023317 0ustar00zuulzuul00000000000000.. _install-obs: Install and configure for openSUSE and SUSE Linux Enterprise ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This section describes how to install and configure the Orchestration service for openSUSE Leap 42.2 and SUSE Linux Enterprise Server 12 SP2. Prerequisites ------------- Before you install and configure Orchestration, you must create a database, service credentials, and API endpoints. Orchestration also requires additional information in the Identity service. #. To create the database, complete these steps: * Use the database access client to connect to the database server as the ``root`` user: .. code-block:: console $ mysql -u root -p * Create the ``heat`` database: .. code-block:: console CREATE DATABASE heat; * Grant proper access to the ``heat`` database: .. code-block:: console GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \ IDENTIFIED BY 'HEAT_DBPASS'; GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ IDENTIFIED BY 'HEAT_DBPASS'; Replace ``HEAT_DBPASS`` with a suitable password. * Exit the database access client. #. Source the ``admin`` credentials to gain access to admin-only CLI commands: .. code-block:: console $ . admin-openrc #. To create the service credentials, complete these steps: * Create the ``heat`` user: .. code-block:: console $ openstack user create --domain default --password-prompt heat User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | e0353a670a9e496da891347c589539e9 | | enabled | True | | id | ca2e175b851943349be29a328cc5e360 | | name | heat | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat`` user: .. code-block:: console $ openstack role add --project service --user heat admin .. note:: This command provides no output. * Create the ``heat`` and ``heat-cfn`` service entities: .. code-block:: console $ openstack service create --name heat \ --description "Orchestration" orchestration +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | 727841c6f5df4773baa4e8a5ae7d72eb | | name | heat | | type | orchestration | +-------------+----------------------------------+ $ openstack service create --name heat-cfn \ --description "Orchestration" cloudformation +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | c42cede91a4e47c3b10c8aedc8d890c6 | | name | heat-cfn | | type | cloudformation | +-------------+----------------------------------+ #. Create the Orchestration service API endpoints: .. code-block:: console $ openstack endpoint create --region RegionOne \ orchestration public http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 3f4dab34624e4be7b000265f25049609 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration internal http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 9489f78e958e45cc85570fec7e836d98 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration admin http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 76091559514b40c6b7b38dde790efe99 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ .. code-block:: console $ openstack endpoint create --region RegionOne \ cloudformation public http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | b3ea082e019c4024842bf0a80555052c | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation internal http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 169df4368cdc435b8b115a9cb084044e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation admin http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 3d3edcd61eb343c1bbd629aa041ff88b | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ #. Orchestration requires additional information in the Identity service to manage stacks. To add this information, complete these steps: * Create the ``heat`` domain that contains projects and users for stacks: .. code-block:: console $ openstack domain create --description "Stack projects and users" heat +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Stack projects and users | | enabled | True | | id | 0f4d1bd326f2454dacc72157ba328a47 | | name | heat | +-------------+----------------------------------+ * Create the ``heat_domain_admin`` user to manage projects and users in the ``heat`` domain: .. code-block:: console $ openstack user create --domain heat --password-prompt heat_domain_admin User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | 0f4d1bd326f2454dacc72157ba328a47 | | enabled | True | | id | b7bd1abfbcf64478b47a0f13cd4d970a | | name | heat_domain_admin | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat_domain_admin`` user in the ``heat`` domain to enable administrative stack management privileges by the ``heat_domain_admin`` user: .. code-block:: console $ openstack role add --domain heat --user-domain heat --user heat_domain_admin admin .. note:: This command provides no output. * Create the ``heat_stack_owner`` role: .. code-block:: console $ openstack role create heat_stack_owner +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 15e34f0c4fed4e68b3246275883c8630 | | name | heat_stack_owner | +-----------+----------------------------------+ * Add the ``heat_stack_owner`` role to the ``demo`` project and user to enable stack management by the ``demo`` user: .. code-block:: console $ openstack role add --project demo --user demo heat_stack_owner .. note:: This command provides no output. .. note:: You must add the ``heat_stack_owner`` role to each user that manages stacks. * Create the ``heat_stack_user`` role: .. code-block:: console $ openstack role create heat_stack_user +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 88849d41a55d4d1d91e4f11bffd8fc5c | | name | heat_stack_user | +-----------+----------------------------------+ .. note:: The Orchestration service automatically assigns the ``heat_stack_user`` role to users that it creates during stack deployment. By default, this role restricts API operations. To avoid conflicts, do not add this role to users with the ``heat_stack_owner`` role. Install and configure components -------------------------------- .. note:: Default configuration files vary by distribution. You might need to add these sections and options rather than modifying existing sections and options. Also, an ellipsis (``...``) in the configuration snippets indicates potential default configuration options that you should retain. #. Install the packages: .. code-block:: console # zypper install openstack-heat-api openstack-heat-api-cfn \ openstack-heat-engine 2. Edit the ``/etc/heat/heat.conf`` file and complete the following actions: * In the ``[database]`` section, configure database access: .. code-block:: ini [database] ... connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat Replace ``HEAT_DBPASS`` with the password you chose for the Orchestration database. * In the ``[DEFAULT]`` section, configure ``RabbitMQ`` message queue access: .. code-block:: ini [DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller Replace ``RABBIT_PASS`` with the password you chose for the ``openstack`` account in ``RabbitMQ``. * In the ``[keystone_authtoken]``, ``[trustee]`` and ``[clients_keystone]`` sections, configure Identity service access: .. code-block:: ini [keystone_authtoken] ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = heat password = HEAT_PASS [trustee] ... auth_type = password auth_url = http://controller:5000 username = heat password = HEAT_PASS user_domain_name = Default [clients_keystone] ... auth_uri = http://controller:5000 Replace ``HEAT_PASS`` with the password you chose for the ``heat`` user in the Identity service. * In the ``[DEFAULT]`` section, configure the metadata and wait condition URLs: .. code-block:: ini [DEFAULT] ... heat_metadata_server_url = http://controller:8000 heat_waitcondition_server_url = http://controller:8000/v1/waitcondition * In the ``[DEFAULT]`` section, configure the stack domain and administrative credentials: .. code-block:: ini [DEFAULT] ... stack_domain_admin = heat_domain_admin stack_domain_admin_password = HEAT_DOMAIN_PASS stack_user_domain_name = heat Replace ``HEAT_DOMAIN_PASS`` with the password you chose for the ``heat_domain_admin`` user in the Identity service. Finalize installation --------------------- * Start the Orchestration services and configure them to start when the system boots: .. code-block:: console # systemctl enable openstack-heat-api.service \ openstack-heat-api-cfn.service openstack-heat-engine.service # systemctl start openstack-heat-api.service \ openstack-heat-api-cfn.service openstack-heat-engine.service ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/install-rdo.rst0000664000175000017500000004065500000000000023317 0ustar00zuulzuul00000000000000.. _install-rdo: Install and configure for Red Hat Enterprise Linux and CentOS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This section describes how to install and configure the Orchestration service for Red Hat Enterprise Linux 7 and CentOS 7. Prerequisites ------------- Before you install and configure Orchestration, you must create a database, service credentials, and API endpoints. Orchestration also requires additional information in the Identity service. #. To create the database, complete these steps: * Use the database access client to connect to the database server as the ``root`` user: .. code-block:: console $ mysql -u root -p * Create the ``heat`` database: .. code-block:: console CREATE DATABASE heat; * Grant proper access to the ``heat`` database: .. code-block:: console GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \ IDENTIFIED BY 'HEAT_DBPASS'; GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ IDENTIFIED BY 'HEAT_DBPASS'; Replace ``HEAT_DBPASS`` with a suitable password. * Exit the database access client. #. Source the ``admin`` credentials to gain access to admin-only CLI commands: .. code-block:: console $ . admin-openrc #. To create the service credentials, complete these steps: * Create the ``heat`` user: .. code-block:: console $ openstack user create --domain default --password-prompt heat User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | e0353a670a9e496da891347c589539e9 | | enabled | True | | id | ca2e175b851943349be29a328cc5e360 | | name | heat | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat`` user: .. code-block:: console $ openstack role add --project service --user heat admin .. note:: If installing OpenStack manually following the :keystone-doc:`Keystone install guide `, the name of the services project is ``service`` as given above. However, traditional methods of installing RDO (such as PackStack and TripleO) use ``services`` as the name of the service project. If you installed RDO using a Puppet-based method, substitute ``services`` as the project name. .. note:: This command provides no output. * Create the ``heat`` and ``heat-cfn`` service entities: .. code-block:: console $ openstack service create --name heat \ --description "Orchestration" orchestration +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | 727841c6f5df4773baa4e8a5ae7d72eb | | name | heat | | type | orchestration | +-------------+----------------------------------+ $ openstack service create --name heat-cfn \ --description "Orchestration" cloudformation +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | c42cede91a4e47c3b10c8aedc8d890c6 | | name | heat-cfn | | type | cloudformation | +-------------+----------------------------------+ #. Create the Orchestration service API endpoints: .. code-block:: console $ openstack endpoint create --region RegionOne \ orchestration public http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 3f4dab34624e4be7b000265f25049609 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration internal http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 9489f78e958e45cc85570fec7e836d98 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration admin http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 76091559514b40c6b7b38dde790efe99 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ .. code-block:: console $ openstack endpoint create --region RegionOne \ cloudformation public http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | b3ea082e019c4024842bf0a80555052c | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation internal http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 169df4368cdc435b8b115a9cb084044e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation admin http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 3d3edcd61eb343c1bbd629aa041ff88b | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ #. Orchestration requires additional information in the Identity service to manage stacks. To add this information, complete these steps: * Create the ``heat`` domain that contains projects and users for stacks: .. code-block:: console $ openstack domain create --description "Stack projects and users" heat +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Stack projects and users | | enabled | True | | id | 0f4d1bd326f2454dacc72157ba328a47 | | name | heat | +-------------+----------------------------------+ * Create the ``heat_domain_admin`` user to manage projects and users in the ``heat`` domain: .. code-block:: console $ openstack user create --domain heat --password-prompt heat_domain_admin User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | 0f4d1bd326f2454dacc72157ba328a47 | | enabled | True | | id | b7bd1abfbcf64478b47a0f13cd4d970a | | name | heat_domain_admin | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat_domain_admin`` user in the ``heat`` domain to enable administrative stack management privileges by the ``heat_domain_admin`` user: .. code-block:: console $ openstack role add --domain heat --user-domain heat --user heat_domain_admin admin .. note:: This command provides no output. * Create the ``heat_stack_owner`` role: .. code-block:: console $ openstack role create heat_stack_owner +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 15e34f0c4fed4e68b3246275883c8630 | | name | heat_stack_owner | +-----------+----------------------------------+ * Add the ``heat_stack_owner`` role to the ``demo`` project and user to enable stack management by the ``demo`` user: .. code-block:: console $ openstack role add --project demo --user demo heat_stack_owner .. note:: This command provides no output. .. note:: You must add the ``heat_stack_owner`` role to each user that manages stacks. * Create the ``heat_stack_user`` role: .. code-block:: console $ openstack role create heat_stack_user +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 88849d41a55d4d1d91e4f11bffd8fc5c | | name | heat_stack_user | +-----------+----------------------------------+ .. note:: The Orchestration service automatically assigns the ``heat_stack_user`` role to users that it creates during stack deployment. By default, this role restricts API operations. To avoid conflicts, do not add this role to users with the ``heat_stack_owner`` role. Install and configure components -------------------------------- .. note:: Default configuration files vary by distribution. You might need to add these sections and options rather than modifying existing sections and options. Also, an ellipsis (``...``) in the configuration snippets indicates potential default configuration options that you should retain. #. Install the packages: .. code-block:: console # dnf install openstack-heat-api openstack-heat-api-cfn \ openstack-heat-engine 2. Edit the ``/etc/heat/heat.conf`` file and complete the following actions: * In the ``[database]`` section, configure database access: .. code-block:: ini [database] ... connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat Replace ``HEAT_DBPASS`` with the password you chose for the Orchestration database. * In the ``[DEFAULT]`` section, configure ``RabbitMQ`` message queue access: .. code-block:: ini [DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller Replace ``RABBIT_PASS`` with the password you chose for the ``openstack`` account in ``RabbitMQ``. * In the ``[keystone_authtoken]``, ``[trustee]``, and ``[clients_keystone]`` sections, configure Identity service access: .. code-block:: ini [keystone_authtoken] ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = heat password = HEAT_PASS [trustee] ... auth_type = password auth_url = http://controller:5000 username = heat password = HEAT_PASS user_domain_name = Default [clients_keystone] ... auth_uri = http://controller:5000 Replace ``HEAT_PASS`` with the password you chose for the ``heat`` user in the Identity service. * In the ``[DEFAULT]`` section, configure the metadata and wait condition URLs: .. code-block:: ini [DEFAULT] ... heat_metadata_server_url = http://controller:8000 heat_waitcondition_server_url = http://controller:8000/v1/waitcondition * In the ``[DEFAULT]`` section, configure the stack domain and administrative credentials: .. code-block:: ini [DEFAULT] ... stack_domain_admin = heat_domain_admin stack_domain_admin_password = HEAT_DOMAIN_PASS stack_user_domain_name = heat Replace ``HEAT_DOMAIN_PASS`` with the password you chose for the ``heat_domain_admin`` user in the Identity service. 3. Populate the Orchestration database: .. code-block:: console # su -s /bin/sh -c "heat-manage db_sync" heat .. note:: Ignore any deprecation messages in this output. Finalize installation --------------------- * Start the Orchestration services and configure them to start when the system boots: .. code-block:: console # systemctl enable openstack-heat-api.service \ openstack-heat-api-cfn.service openstack-heat-engine.service # systemctl start openstack-heat-api.service \ openstack-heat-api-cfn.service openstack-heat-engine.service ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/install-ubuntu.rst0000664000175000017500000003723700000000000024057 0ustar00zuulzuul00000000000000.. _install-ubuntu: Install and configure for Ubuntu ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This section describes how to install and configure the Orchestration service for Ubuntu 14.04 (LTS). Prerequisites ------------- Before you install and configure Orchestration, you must create a database, service credentials, and API endpoints. Orchestration also requires additional information in the Identity service. #. To create the database, complete these steps: * Use the database access client to connect to the database server as the ``root`` user: .. code-block:: console $ mysql -u root -p * Create the ``heat`` database: .. code-block:: console CREATE DATABASE heat; * Grant proper access to the ``heat`` database: .. code-block:: console GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \ IDENTIFIED BY 'HEAT_DBPASS'; GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ IDENTIFIED BY 'HEAT_DBPASS'; Replace ``HEAT_DBPASS`` with a suitable password. * Exit the database access client. #. Source the ``admin`` credentials to gain access to admin-only CLI commands: .. code-block:: console $ . admin-openrc #. To create the service credentials, complete these steps: * Create the ``heat`` user: .. code-block:: console $ openstack user create --domain default --password-prompt heat User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | e0353a670a9e496da891347c589539e9 | | enabled | True | | id | ca2e175b851943349be29a328cc5e360 | | name | heat | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat`` user: .. code-block:: console $ openstack role add --project service --user heat admin .. note:: This command provides no output. * Create the ``heat`` and ``heat-cfn`` service entities: .. code-block:: console $ openstack service create --name heat \ --description "Orchestration" orchestration +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | 727841c6f5df4773baa4e8a5ae7d72eb | | name | heat | | type | orchestration | +-------------+----------------------------------+ $ openstack service create --name heat-cfn \ --description "Orchestration" cloudformation +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Orchestration | | enabled | True | | id | c42cede91a4e47c3b10c8aedc8d890c6 | | name | heat-cfn | | type | cloudformation | +-------------+----------------------------------+ #. Create the Orchestration service API endpoints: .. code-block:: console $ openstack endpoint create --region RegionOne \ orchestration public http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 3f4dab34624e4be7b000265f25049609 | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration internal http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 9489f78e958e45cc85570fec7e836d98 | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ $ openstack endpoint create --region RegionOne \ orchestration admin http://controller:8004/v1/%\(tenant_id\)s +--------------+-----------------------------------------+ | Field | Value | +--------------+-----------------------------------------+ | enabled | True | | id | 76091559514b40c6b7b38dde790efe99 | | interface | admin | | region | RegionOne | | region_id | RegionOne | | service_id | 727841c6f5df4773baa4e8a5ae7d72eb | | service_name | heat | | service_type | orchestration | | url | http://controller:8004/v1/%(tenant_id)s | +--------------+-----------------------------------------+ .. code-block:: console $ openstack endpoint create --region RegionOne \ cloudformation public http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | b3ea082e019c4024842bf0a80555052c | | interface | public | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation internal http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 169df4368cdc435b8b115a9cb084044e | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ $ openstack endpoint create --region RegionOne \ cloudformation admin http://controller:8000/v1 +--------------+----------------------------------+ | Field | Value | +--------------+----------------------------------+ | enabled | True | | id | 3d3edcd61eb343c1bbd629aa041ff88b | | interface | internal | | region | RegionOne | | region_id | RegionOne | | service_id | c42cede91a4e47c3b10c8aedc8d890c6 | | service_name | heat-cfn | | service_type | cloudformation | | url | http://controller:8000/v1 | +--------------+----------------------------------+ #. Orchestration requires additional information in the Identity service to manage stacks. To add this information, complete these steps: * Create the ``heat`` domain that contains projects and users for stacks: .. code-block:: console $ openstack domain create --description "Stack projects and users" heat +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Stack projects and users | | enabled | True | | id | 0f4d1bd326f2454dacc72157ba328a47 | | name | heat | +-------------+----------------------------------+ * Create the ``heat_domain_admin`` user to manage projects and users in the ``heat`` domain: .. code-block:: console $ openstack user create --domain heat --password-prompt heat_domain_admin User Password: Repeat User Password: +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | 0f4d1bd326f2454dacc72157ba328a47 | | enabled | True | | id | b7bd1abfbcf64478b47a0f13cd4d970a | | name | heat_domain_admin | +-----------+----------------------------------+ * Add the ``admin`` role to the ``heat_domain_admin`` user in the ``heat`` domain to enable administrative stack management privileges by the ``heat_domain_admin`` user: .. code-block:: console $ openstack role add --domain heat --user-domain heat --user heat_domain_admin admin .. note:: This command provides no output. * Create the ``heat_stack_owner`` role: .. code-block:: console $ openstack role create heat_stack_owner +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 15e34f0c4fed4e68b3246275883c8630 | | name | heat_stack_owner | +-----------+----------------------------------+ * Add the ``heat_stack_owner`` role to the ``demo`` project and user to enable stack management by the ``demo`` user: .. code-block:: console $ openstack role add --project demo --user demo heat_stack_owner .. note:: This command provides no output. .. note:: You must add the ``heat_stack_owner`` role to each user that manages stacks. * Create the ``heat_stack_user`` role: .. code-block:: console $ openstack role create heat_stack_user +-----------+----------------------------------+ | Field | Value | +-----------+----------------------------------+ | domain_id | None | | id | 88849d41a55d4d1d91e4f11bffd8fc5c | | name | heat_stack_user | +-----------+----------------------------------+ .. note:: The Orchestration service automatically assigns the ``heat_stack_user`` role to users that it creates during stack deployment. By default, this role restricts API operations. To avoid conflicts, do not add this role to users with the ``heat_stack_owner`` role. Install and configure components -------------------------------- .. note:: Default configuration files vary by distribution. You might need to add these sections and options rather than modifying existing sections and options. Also, an ellipsis (``...``) in the configuration snippets indicates potential default configuration options that you should retain. #. Install the packages: .. code-block:: console # apt-get install heat-api heat-api-cfn heat-engine 2. Edit the ``/etc/heat/heat.conf`` file and complete the following actions: * In the ``[database]`` section, configure database access: .. code-block:: ini [database] ... connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat Replace ``HEAT_DBPASS`` with the password you chose for the Orchestration database. * In the ``[DEFAULT]`` section, configure ``RabbitMQ`` message queue access: .. code-block:: ini [DEFAULT] ... transport_url = rabbit://openstack:RABBIT_PASS@controller Replace ``RABBIT_PASS`` with the password you chose for the ``openstack`` account in ``RabbitMQ``. * In the ``[keystone_authtoken]``, ``[trustee]`` and ``[clients_keystone]`` sections, configure Identity service access: .. code-block:: ini [keystone_authtoken] ... www_authenticate_uri = http://controller:5000 auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = service username = heat password = HEAT_PASS [trustee] ... auth_type = password auth_url = http://controller:5000 username = heat password = HEAT_PASS user_domain_name = Default [clients_keystone] ... auth_uri = http://controller:5000 Replace ``HEAT_PASS`` with the password you chose for the ``heat`` user in the Identity service. * In the ``[DEFAULT]`` section, configure the metadata and wait condition URLs: .. code-block:: ini [DEFAULT] ... heat_metadata_server_url = http://controller:8000 heat_waitcondition_server_url = http://controller:8000/v1/waitcondition * In the ``[DEFAULT]`` section, configure the stack domain and administrative credentials: .. code-block:: ini [DEFAULT] ... stack_domain_admin = heat_domain_admin stack_domain_admin_password = HEAT_DOMAIN_PASS stack_user_domain_name = heat Replace ``HEAT_DOMAIN_PASS`` with the password you chose for the ``heat_domain_admin`` user in the Identity service. 3. Populate the Orchestration database: .. code-block:: console # su -s /bin/sh -c "heat-manage db_sync" heat .. note:: Ignore any deprecation messages in this output. Finalize installation --------------------- 1. Restart the Orchestration services: .. code-block:: console # service heat-api restart # service heat-api-cfn restart # service heat-engine restart ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/install.rst0000664000175000017500000000100400000000000022516 0ustar00zuulzuul00000000000000.. _install: Install and configure ~~~~~~~~~~~~~~~~~~~~~ This section describes how to install and configure the Orchestration service, code-named heat, on the controller node. This section assumes that you already have a working OpenStack environment with at least the following components installed: Compute, Image Service, Identity. Note that installation and configuration vary by distribution. .. toctree:: :maxdepth: 1 install-obs.rst install-rdo.rst install-ubuntu.rst install-debian.rst ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/launch-instance.rst0000664000175000017500000001206200000000000024132 0ustar00zuulzuul00000000000000.. _launch-instance: Launch an instance ~~~~~~~~~~~~~~~~~~ In environments that include the Orchestration service, you can create a stack that launches an instance. Create a template ----------------- The Orchestration service uses templates to describe stacks. To learn about the template language, see the :ref:`template-guide`. * Create the ``demo-template.yml`` file with the following content: .. code-block:: yaml heat_template_version: 2015-10-15 description: Launch a basic instance with CirrOS image using the ``m1.tiny`` flavor, ``mykey`` key, and one network. parameters: NetID: type: string description: Network ID to use for the instance. resources: server: type: OS::Nova::Server properties: image: cirros flavor: m1.tiny key_name: mykey networks: - network: { get_param: NetID } outputs: instance_name: description: Name of the instance. value: { get_attr: [ server, name ] } instance_ip: description: IP address of the instance. value: { get_attr: [ server, first_address ] } Create a stack -------------- Create a stack using the ``demo-template.yml`` template. #. Source the ``demo`` credentials to perform the following steps as a non-administrative project: .. code-block:: console $ . demo-openrc #. Determine available networks. .. code-block:: console $ openstack network list +--------------------------------------+-------------+--------------------------------------+ | ID | Name | Subnets | +--------------------------------------+-------------+--------------------------------------+ | 4716ddfe-6e60-40e7-b2a8-42e57bf3c31c | selfservice | 2112d5eb-f9d6-45fd-906e-7cabd38b7c7c | | b5b6993c-ddf9-40e7-91d0-86806a42edb8 | provider | 310911f6-acf0-4a47-824e-3032916582ff | +--------------------------------------+-------------+--------------------------------------+ .. note:: This output may differ from your environment. #. Set the ``NET_ID`` environment variable to reflect the ID of a network. For example, using the provider network: .. code-block:: console $ export NET_ID=$(openstack network list | awk '/ provider / { print $2 }') #. Create a stack of one CirrOS instance on the provider network: .. code-block:: console $ openstack stack create -t demo-template.yml --parameter "NetID=$NET_ID" stack +--------------------------------------+------------+--------------------+---------------------+--------------+ | ID | Stack Name | Stack Status | Creation Time | Updated Time | +--------------------------------------+------------+--------------------+---------------------+--------------+ | dbf46d1b-0b97-4d45-a0b3-9662a1eb6cf3 | stack | CREATE_IN_PROGRESS | 2015-10-13T15:27:20 | None | +--------------------------------------+------------+--------------------+---------------------+--------------+ #. After a short time, verify successful creation of the stack: .. code-block:: console $ openstack stack list +--------------------------------------+------------+-----------------+---------------------+--------------+ | ID | Stack Name | Stack Status | Creation Time | Updated Time | +--------------------------------------+------------+-----------------+---------------------+--------------+ | dbf46d1b-0b97-4d45-a0b3-9662a1eb6cf3 | stack | CREATE_COMPLETE | 2015-10-13T15:27:20 | None | +--------------------------------------+------------+-----------------+---------------------+--------------+ #. Show the name and IP address of the instance and compare with the output of the OpenStack client: .. code-block:: console $ openstack stack output show --all stack [ { "output_value": "stack-server-3nzfyfofu6d4", "description": "Name of the instance.", "output_key": "instance_name" }, { "output_value": "10.4.31.106", "description": "IP address of the instance.", "output_key": "instance_ip" } ] .. code-block:: console $ openstack server list +--------------------------------------+---------------------------+--------+---------------------------------+ | ID | Name | Status | Networks | +--------------------------------------+---------------------------+--------+---------------------------------+ | 0fc2af0c-ae79-4d22-8f36-9e860c257da5 | stack-server-3nzfyfofu6d4 | ACTIVE | public=10.4.31.106 | +--------------------------------------+---------------------------+--------+---------------------------------+ #. Delete the stack. .. code-block:: console $ openstack stack delete --yes stack ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/next-steps.rst0000664000175000017500000000047100000000000023171 0ustar00zuulzuul00000000000000.. _next-steps: Next steps ~~~~~~~~~~ Your OpenStack environment now includes the heat service. To add more services, see the `additional documentation on installing OpenStack `_. To learn more about the heat service, read the :doc:`Heat documentation <../index>`. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/install/verify.rst0000664000175000017500000000321500000000000022362 0ustar00zuulzuul00000000000000.. _verify: Verify operation ~~~~~~~~~~~~~~~~ Verify operation of the Orchestration service. .. note:: Perform these commands on the controller node. #. Source the ``admin`` tenant credentials: .. code-block:: console $ . admin-openrc #. List service components to verify successful launch and registration of each process: .. code-block:: console $ openstack orchestration service list +------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+ | hostname | binary | engine_id | host | topic | updated_at | status | +------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+ | controller | heat-engine | 3e85d1ab-a543-41aa-aa97-378c381fb958 | controller | engine | 2015-10-13T14:16:06.000000 | up | | controller | heat-engine | 45dbdcf6-5660-4d5f-973a-c4fc819da678 | controller | engine | 2015-10-13T14:16:06.000000 | up | | controller | heat-engine | 51162b63-ecb8-4c6c-98c6-993af899c4f7 | controller | engine | 2015-10-13T14:16:06.000000 | up | | controller | heat-engine | 8d7edc6d-77a6-460d-bd2a-984d76954646 | controller | engine | 2015-10-13T14:16:06.000000 | up | +------------+-------------+--------------------------------------+------------+--------+----------------------------+--------+ .. note:: This output should indicate four ``heat-engine`` components (default to 4 or number of CPUs on the host, whichever is greater) on the controller node. ././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1743591352.259036 openstack_heat-24.0.0/doc/source/man/0000775000175000017500000000000000000000000017430 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-api-cfn.rst0000664000175000017500000000213200000000000022414 0ustar00zuulzuul00000000000000============ heat-api-cfn ============ .. program:: heat-api-cfn SYNOPSIS ======== ``heat-api-cfn [options]`` DESCRIPTION =========== heat-api-cfn is a CloudFormation compatible API service to the heat project. INVENTORY ========= heat-api-cfn is a service that exposes an external REST based api to the heat-engine service. The communication between the heat-api-cfn and heat-engine uses message queue based RPC. OPTIONS ======= .. cmdoption:: --config-file Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. .. cmdoption:: --config-dir Path to a config directory to pull .conf files from. This file set is sorted, so as to provide a predictable parse order if individual options are over-ridden. The set is parsed after the file(s), if any, specified via --config-file, hence over-ridden options in the directory take precedence. .. cmdoption:: --version Show program's version number and exit. The output could be empty if the distribution didn't specify any version information. FILES ======== * /etc/heat/heat.conf ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-api.rst0000664000175000017500000000205500000000000021654 0ustar00zuulzuul00000000000000======== heat-api ======== .. program:: heat-api SYNOPSIS ======== ``heat-api [options]`` DESCRIPTION =========== heat-api provides an external REST API to the heat project. INVENTORY ========= heat-api is a service that exposes an external REST based api to the heat-engine service. The communication between the heat-api and heat-engine uses message queue based RPC. OPTIONS ======= .. cmdoption:: --config-file Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. .. cmdoption:: --config-dir Path to a config directory to pull .conf files from. This file set is sorted, so as to provide a predictable parse order if individual options are over-ridden. The set is parsed after the file(s), if any, specified via --config-file, hence over-ridden options in the directory take precedence. .. cmdoption:: --version Show program's version number and exit. The output could be empty if the distribution didn't specify any version information. FILES ======== * /etc/heat/heat.conf ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-db-setup.rst0000664000175000017500000000316000000000000022624 0ustar00zuulzuul00000000000000============= heat-db-setup ============= .. program:: heat-db-setup SYNOPSIS ======== ``heat-db-setup [COMMANDS] [OPTIONS]`` DESCRIPTION =========== heat-db-setup is a tool which configures the local MySQL database for heat. Typically distro-specific tools would provide this functionality so please read the distro-specific documentation for configuring heat. COMMANDS ======== ``rpm`` Indicate the distribution is a RPM packaging based distribution. ``deb`` Indicate the distribution is a DEB packaging based distribution. OPTIONS ======= .. cmdoption:: -h, --help Print usage information. .. cmdoption:: -p, --password Specify the password for the 'heat' MySQL user that the script will use to connect to the 'heat' MySQL database. By default, the password 'heat' will be used. .. cmdoption:: -r, --rootpw Specify the root MySQL password. If the script installs the MySQL server, it will set the root password to this value instead of prompting for a password. If the MySQL server is already installed, this password will be used to connect to the database instead of having to prompt for it. .. cmdoption:: -y, --yes In cases where the script would normally ask for confirmation before doing something, such as installing mysql-server, just assume yes. This is useful if you want to run the script non-interactively. EXAMPLES ======== heat-db-setup rpm -p heat_password -r mysql_pwd -y heat-db-setup deb -p heat_password -r mysql_pwd -y heat-db-setup rpm BUGS ==== Heat bugs are managed through StoryBoard `OpenStack Heat Stories `__ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-engine.rst0000664000175000017500000000204300000000000022345 0ustar00zuulzuul00000000000000=========== heat-engine =========== .. program:: heat-engine SYNOPSIS ======== ``heat-engine [options]`` DESCRIPTION =========== heat-engine is the heat project server with an internal RPC api called by the heat-api server. INVENTORY ========= The heat-engine does all the orchestration work and is the layer in which the resource integration is implemented. OPTIONS ======= .. cmdoption:: --config-file Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. .. cmdoption:: --config-dir Path to a config directory to pull .conf files from. This file set is sorted, so as to provide a predictable parse order if individual options are over-ridden. The set is parsed after the file(s), if any, specified via --config-file, hence over-ridden options in the directory take precedence. .. cmdoption:: --version Show program's version number and exit. The output could be empty if the distribution didn't specify any version information. FILES ======== * /etc/heat/heat.conf ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-keystone-setup-domain.rst0000664000175000017500000000665700000000000025363 0ustar00zuulzuul00000000000000========================== heat-keystone-setup-domain ========================== .. program:: heat-keystone-setup-domain SYNOPSIS ======== ``heat-keystone-setup-domain [OPTIONS]`` DESCRIPTION =========== The `heat-keystone-setup-domain` tool configures keystone by creating a 'stack user domain' and the user credential used to manage this domain. A 'stack user domain' can be treated as a namespace for projects, groups and users created by heat. The domain will have an admin user that manages other users, groups and projects in the domain. This script requires admin keystone credentials to be available in the shell environment by setting `OS_USERNAME` and `OS_PASSWORD`. After running this script, a user needs to take actions to check or modify the heat configuration file (e.g. /etc/heat/heat.conf). The tool is NOT performing these updates on behalf of the user. Distributions may provide other tools to setup 'stack user domain' for use with heat, so check the distro documentation first. Other tools are available to set up the 'stack user domain', for example `python-openstackclient`, which is preferred to this tool where it is available. OPTIONS ======= .. cmdoption:: -h, --help Print usage information. .. cmdoption:: --config-dir Path to a config directory from which to read the ``heat.conf`` file(s). This file set is sorted, so as to provide a predictable parse order if individual options are over-ridden. The set is parsed after the file(s) specified via previous --config-file, arguments hence over-ridden options in the directory take precedence. .. cmdoption:: --config-file Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. The default files used is `/etc/heat/heat.conf`. .. cmdoption:: --stack-domain-admin Name of a user for Keystone to create, which has roles sufficient to manage users (i.e. stack domain users) and projects (i.e. stack domain projects) in the 'stack user domain'. Another way to specify the admin user name is by setting an environment variable `STACK_DOMAIN_ADMIN` before running this tool. If both command line arguments and environment variable are specified, the command line arguments take precedence. .. cmdoption:: --stack-domain-admin-password Password for the 'stack-domain-admin' user. The password can be instead specified using an environment variable `STACK_DOMAIN_ADMIN_PASSWORD` before invoking this tool. If both command line arguments and environment variable are specified, the command line arguments take precedence. .. cmdoption:: --stack-user-domain-name Name of domain to create for stack users. The domain name can be instead specified using an environment variable `STACK_USER_DOMAIN_NAME` before invoking this tool. If both command line arguments and environment variable are specified, the command line argument take precedence. .. cmdoption:: --version Show program's version number and exit. The output could be empty if the distribution didn't specify any version information. EXAMPLES ======== heat-keystone-setup-domain heat-keystone-setup-domain --stack-user-domain-name heat_user_domain \ --stack-domain-admin heat_domain_admin \ --stack-domain-admin-password verysecrete BUGS ==== Heat bugs are managed through StoryBoard `OpenStack Heat Stories `__ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-manage.rst0000664000175000017500000000372100000000000022334 0ustar00zuulzuul00000000000000=========== heat-manage =========== .. program:: heat-manage SYNOPSIS ======== ``heat-manage [options]`` DESCRIPTION =========== heat-manage helps manage heat specific database operations. OPTIONS ======= The standard pattern for executing a heat-manage command is: ``heat-manage []`` Run with -h to see a list of available commands: ``heat-manage -h`` Commands are ``db_version``, ``db_sync``, ``purge_deleted``, ``migrate_convergence_1``, ``migrate_properties_data``, and ``service``. Detailed descriptions are below. ``heat-manage db_version`` Print out the db schema version. ``heat-manage db_sync`` Sync the database up to the most recent version. ``heat-manage purge_deleted [-g {days,hours,minutes,seconds}] [-p project_id] [age]`` Purge db entries marked as deleted and older than [age]. When project_id argument is provided, only entries belonging to this project will be purged. ``heat-manage migrate_properties_data`` Migrates properties data from the legacy locations in the db (resource.properties_data and event.resource_properties) to the modern location, the resource_properties_data table. ``heat-manage migrate_convergence_1 [stack_id]`` Migrates [stack_id] from non-convergence to convergence. This requires running convergence enabled heat engine(s) and can't be done when they are offline. ``heat-manage service list`` Shows details for all currently running heat-engines. ``heat-manage service clean`` Clean dead engine records. ``heat-manage --version`` Shows program's version number and exit. The output could be empty if the distribution didn't specify any version information. FILES ===== The /etc/heat/heat.conf file contains global options which can be used to configure some aspects of heat-manage, for example the DB connection and logging. BUGS ==== Heat bugs are managed through StoryBoard `OpenStack Heat Stories `__ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/heat-status.rst0000664000175000017500000000331400000000000022425 0ustar00zuulzuul00000000000000=========== heat-status =========== Synopsis ======== :: heat-status [] Description =========== :program:`heat-status` is a tool that provides routines for checking the status of a Heat deployment. Options ======= The standard pattern for executing a :program:`heat-status` command is:: heat-status [] Run without arguments to see a list of available command categories:: heat-status Categories are: * ``upgrade`` Detailed descriptions are below. You can also run with a category argument such as ``upgrade`` to see a list of all commands in that category:: heat-status upgrade These sections describe the available categories and arguments for :program:`heat-status`. Upgrade ~~~~~~~ .. _heat-status-checks: ``heat-status upgrade check`` Performs a release-specific readiness check before restarting services with new code. This command expects to have complete configuration and access to databases and services. **Return Codes** .. list-table:: :widths: 20 80 :header-rows: 1 * - Return code - Description * - 0 - All upgrade readiness checks passed successfully and there is nothing to do. * - 1 - At least one check encountered an issue and requires further investigation. This is considered a warning but the upgrade may be OK. * - 2 - There was an upgrade status check failure that needs to be investigated. This should be considered something that stops an upgrade. * - 255 - An unexpected error occurred. **History of Checks** **12.0.0 (Stein)** * Placeholder to be filled in with checks as they are added in Stein. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/man/index.rst0000664000175000017500000000057600000000000021301 0ustar00zuulzuul00000000000000==================================== Man pages for services and utilities ==================================== ------------- Heat services ------------- .. toctree:: :maxdepth: 2 heat-engine heat-api heat-api-cfn -------------- Heat utilities -------------- .. toctree:: :maxdepth: 2 heat-manage heat-db-setup heat-keystone-setup-domain heat-status ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2630363 openstack_heat-24.0.0/doc/source/operating_guides/0000775000175000017500000000000000000000000022205 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/operating_guides/httpd.rst0000664000175000017500000000722400000000000024067 0ustar00zuulzuul00000000000000======================================== Running Heat API services in HTTP Server ======================================== Since the Liberty release Heat has packaged a set of wsgi script entrypoints that enables users to run api services with a real web server like Apache HTTP Server (httpd). There are several patterns for deployment. This doc shows some common ways of deploying api services with httpd. mod-wsgi -------- This deployment method is possible since Liberty release. The httpd/files directory contains sample files that can be changed and copied to the appropriate location in your httpd server. On Debian/Ubuntu systems it is:: /etc/apache2/sites-available/heat-api.conf /etc/apache2/sites-available/heat-api-cfn.conf On Red Hat based systems it is:: /etc/httpd/conf.d/uwsgi-heat-api.conf /etc/httpd/conf.d/uwsgi-heat-api-cfn.conf uwsgi ----- In this deployment method we use uwsgi as a web server bound to a random local port. Then we configure apache using mod_proxy to forward all incoming requests on the specified endpoint to that local webserver. This has the advantage of letting apache manage all inbound http connections, and uwsgi manage running the python code. It also means when we make changes to Heat api code or configuration, we don't need to restart all of apache (which may be running other services too) and just need to restart the local uwsgi daemons. The httpd/files directory contains sample files for configuring httpd to run Heat api services under uwsgi in this configuration. To use the sample configs simply copy `uwsgi-heat-api.conf` and `uwsgi-heat-api-cfn.conf` to the appropriate location for your web server. On Debian/Ubuntu systems it is:: /etc/apache2/sites-available/uwsgi-heat-api.conf /etc/apache2/sites-available/uwsgi-heat-api-cfn.conf On Red Hat based systems it is:: /etc/httpd/conf.d/uwsgi-heat-api.conf /etc/httpd/conf.d/uwsgi-heat-api-cfn.conf Enable mod_proxy by running ``sudo a2enmod proxy`` Then on Ubuntu/Debian systems enable the site by creating a symlink from the file in ``sites-available`` to ``sites-enabled``. (This is not required on Red Hat based systems):: ln -s /etc/apache2/sites-available/uwsgi-heat-api.conf /etc/apache2/sites-enabled ln -s /etc/apache2/sites-available/uwsgi-heat-api-cfn.conf /etc/apache2/sites-enabled Start or restart httpd to pick up the new configuration. Now we need to configure and start the uwsgi service. Copy the following files to `/etc/heat`:: heat-api-uwsgi.ini heat-api-cfn-uwsgi.ini Update the files to match your system configuration (for example, you'll want to set the number of processes and threads). Install uwsgi and start the heat-api server using uwsgi:: sudo pip install uwsgi uwsgi --ini /etc/heat/heat-api-uwsgi.ini uwsgi --ini /etc/heat/heat-api-cfn-uwsgi.ini .. NOTE:: In the sample configs some random ports are used, but this doesn't matter and is just a randomly selected number. This is not a contract on the port used for the local uwsgi daemon. mod_proxy_uwsgi ''''''''''''''' Instead of running uwsgi as a webserver listening on a local port and then having Apache HTTP proxy all the incoming requests with mod_proxy, the normally recommended way of deploying uwsgi with Apache httpd is to use mod_proxy_uwsgi and set up a local socket file for uwsgi to listen on. Apache will send the requests using the uwsgi protocol over this local socket file. The dsvm jobs in heat upstream gate uses this deployment method. For more details on using mod_proxy_uwsgi see the `official docs `_. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/operating_guides/scale_deployment.rst0000664000175000017500000002644000000000000026274 0ustar00zuulzuul00000000000000.. 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. ==================== Scaling a Deployment ==================== When deploying in an environment where a large number of incoming requests need to be handled, the API and engine services can be overloaded. In those scenarios, in order to increase the system performance, it can be helpful to run multiple load-balanced APIs and engines. This guide details how to scale out the REST API, the CFN API, and the engine, also known as the *heat-api*, *heat-api-cfn*, and *heat-engine* services, respectively. .. _scale_deployment_assumptions: Assumptions =========== This guide, using a devstack installation of OpenStack, assumes that: 1. You have configured devstack from :devstack-doc:`Single Machine Installation Guide `; 2. You have set up heat on devstack, as defined at :doc:`heat and DevStack <../getting_started/on_devstack>`; 3. You have installed HAProxy_ on the devstack server. Architecture ============ This section shows the basic heat architecture, the load balancing mechanism used and the target scaled out architecture. Basic Architecture ------------------ The heat architecture is as defined at :doc:`heat architecture <../developing_guides/architecture>` and shown in the diagram below, where we have a CLI that sends HTTP requests to the REST and CFN APIs, which in turn make calls using AMQP to the heat-engine:: |- [REST API] -| [CLI] -- -- -- -- [ENGINE] |- [CFN API] -| Load Balancing -------------- As there is a need to use a load balancer mechanism between the multiple APIs and the CLI, a proxy has to be deployed. Because the heat CLI and APIs communicate by exchanging HTTP requests and responses, a HAProxy_ HTTP load balancer server will be deployed between them. This way, the proxy will take the CLIs requests to the APIs and act on their behalf. Once the proxy receives a response, it will be redirected to the caller CLI. A round-robin distribution of messages from the AMQP queue will act as the load balancer for multiple engines. Check that your AMQP service is configured to distribute messages round-robin (RabbitMQ does this by default). Target Architecture ------------------- A scaled out heat architecture is represented in the diagram below: :: |- [REST-API] -| |- ... -| |- [REST-API] -| |- [ENGINE] -| [CLI] -- -- [PROXY] -- -- -- |- ... -| |- [API-CFN] -| |- [ENGINE] -| |- ... -| |- [API-CFN] -| Thus, a request sent from the CLI looks like: 1. CLI contacts the proxy; 2. The HAProxy server, acting as a load balancer, redirects the call to an API instance; 3. The API server sends messages to the AMQP queue, and the engines pick up messages in round-robin fashion. Deploying Multiple APIs ======================= In order to run a heat component separately, you have to execute one of the python scripts located at the *bin* directory of your heat repository. These scripts take as argument a configuration file. When using devstack, the configuration file is located at */etc/heat/heat.conf*. For instance, to start new REST and CFN API services, you must run: :: python bin/heat-api --config-file=/etc/heat/heat.conf python bin/heat-api-cfn --config-file=/etc/heat/heat.conf Each API service must have a unique address to listen. This address have to be defined in the configuration file. For REST and CFN APIs, modify the *[heat_api]* and *[heat_api_cfn]* blocks, respectively. :: [heat_api] bind_port = {API_PORT} bind_host = {API_HOST} ... [heat_api_cfn] bind_port = {API_CFN_PORT} bind_host = {API_CFN_HOST} If you wish to run multiple API processes on the same machine, you must create multiple copies of the heat.conf file, each containing a unique port number. In addition, if you want to run some API services in different machines than the devstack server, you have to update the loopback addresses found at the *sql_connection* and *rabbit_host* properties to the devstack server's IP, which must be reachable from the remote machine. Deploying Multiple Engines ========================== All engines must be configured to use the same AMQP service. Ensure that all of the *rabbit_*\* and *kombu_*\* configuration options in the *[DEFAULT]* section of */etc/heat/heat.conf* match across each machine that will be running an engine. By using the same AMQP configuration, each engine will subscribe to the same AMQP *engine* queue and pick up work in round-robin fashion with the other engines. One or more engines can be deployed per host. Depending on the host's CPU architecture, it may be beneficial to deploy several engines on a single machine. To start multiple engines on the same machine, simply start multiple *heat-engine* processes: :: python bin/heat-engine --config-file=/etc/heat/heat.conf & python bin/heat-engine --config-file=/etc/heat/heat.conf & Deploying the Proxy =================== In order to simplify the deployment of the HAProxy server, we will replace the REST and CFN APIs deployed when installing devstack by the HAProxy server. This way, there is no need to update, on the CLI, the addresses where it should look for the APIs. In this case, when it makes a call to any API, it will find the proxy, acting on their behalf. Note that the addresses that the HAProxy will be listening to are the pairs *API_HOST:API-PORT* and *API_CFN_HOST:API_CFN_PORT*, found at the *[heat_api]* and *[heat_api_cfn]* blocks on the devstack server's configuration file. In addition, the original *heat-api* and *heat-api-cfn* processes running in these ports have to be killed, because these addresses must be free to be used by the proxy. To deploy the HAProxy server on the devstack server, run *haproxy -f apis-proxy.conf*, where this configuration file looks like: :: global daemon maxconn 4000 defaults log global maxconn 8000 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen rest_api_proxy # The values required below are the original ones that were in # /etc/heat/heat.conf on the devstack server. bind {API_HOST}:{API_PORT} balance source option tcpka option httpchk # The values required below are the different addresses supplied when # running the REST API instances. server SERVER_1 {HOST_1}:{PORT_1} ... server SERVER_N {HOST_N}:{PORT_N} listen cfn_api_proxy # The values required below are the original ones that were in # /etc/heat/heat.conf on the devstack server. bind {API_CFN_HOST}:{API_CFN_PORT} balance source option tcpka option httpchk # The values required below are the different addresses supplied when # running the CFN API instances. server SERVER_1 {HOST_1}:{PORT_1} ... server SERVER_N {HOST_N}:{PORT_N} Sample ====== This section aims to clarify some aspects of the scaling out solution, as well as to show more details of the configuration by describing a concrete sample. Architecture ------------ This section shows a basic OpenStack architecture and the target one that will be used for testing of the scaled-out heat services. Basic Architecture ^^^^^^^^^^^^^^^^^^ For this sample, consider that: 1. We have an architecture composed by 3 machines configured in a LAN, with the addresses A: 10.0.0.1; B: 10.0.0.2; and C: 10.0.0.3; 2. The OpenStack devstack installation, including the heat module, has been done in the machine A, as shown in the :ref:`scale_deployment_assumptions` section. Target Architecture ^^^^^^^^^^^^^^^^^^^ At this moment, everything is running in a single devstack server. The next subsections show how to deploy a scaling out heat architecture by: 1. Running one REST and one CFN API on the machines B and C; 2. Setting up the HAProxy server on the machine A. Running the API and Engine Services ----------------------------------- For each machine, B and C, you must do the following steps: 1. Clone the heat repository https://opendev.org/openstack/heat, run: :: git clone https://opendev.org/openstack/heat 2. Create a local copy of the configuration file */etc/heat/heat.conf* from the machine A; 3. Make required changes on the configuration file; 4. Enter the heat local repository and run: :: python bin/heat-api --config-file=/etc/heat/heat.conf python bin/heat-api-cfn --config-file=/etc/heat/heat.conf 5. Start as many *heat-engine* processes as you want running on that machine: :: python bin/heat-engine --config-file=/etc/heat/heat.conf & python bin/heat-engine --config-file=/etc/heat/heat.conf & ... Changes On Configuration ^^^^^^^^^^^^^^^^^^^^^^^^ The original file from A looks like: :: [DEFAULT] ... sql_connection = mysql+pymysql://root:admin@127.0.0.1/heat?charset=utf8 rabbit_host = localhost ... [heat_api] bind_port = 8004 bind_host = 10.0.0.1 ... [heat_api_cfn] bind_port = 8000 bind_host = 10.0.0.1 After the changes for B, it looks like: :: [DEFAULT] ... sql_connection = mysql+pymysql://root:admin@10.0.0.1/heat?charset=utf8 rabbit_host = 10.0.0.1 ... [heat_api] bind_port = 8004 bind_host = 10.0.0.2 ... [heat_api_cfn] bind_port = 8000 bind_host = 10.0.0.2 Setting Up HAProxy ------------------ On the machine A, kill the *heat-api* and *heat-api-cfn* processes by running *pkill heat-api* and *pkill heat-api-cfn*. After, run *haproxy -f apis-proxy.conf* with the following configuration: :: global daemon maxconn 4000 defaults log global maxconn 8000 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen rest_api_proxy bind 10.0.0.1:8004 balance source option tcpka option httpchk server rest-server-1 10.0.0.2:8004 server rest-server-2 10.0.0.3:8004 listen cfn_api_proxy bind 10.0.0.1:8000 balance source option tcpka option httpchk server cfn-server-1 10.0.0.2:8000 server cfn-server-2 10.0.0.3:8000 .. _HAProxy: https://www.haproxy.org/ ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/operating_guides/upgrades_guide.rst0000664000175000017500000001256600000000000025740 0ustar00zuulzuul00000000000000.. 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. ================== Upgrades Guideline ================== This document outlines several steps and notes for operators to reference when upgrading their heat from previous versions of OpenStack. .. note:: This document is only tested in the case of upgrading between sequential releases. Plan to upgrade =============== * Read and ensure you understand the `release notes `_ for the next release. * Make a backup of your database. * Upgrades are only supported one series at a time, or within a series. Cold Upgrades ============= Heat already supports "`cold-upgrades`_", where the heat services have to be down during the upgrade. For time-consuming upgrades, it may be unacceptable for the services to be unavailable for a long period of time. This type of upgrade is quite simple, follow the below steps: 1. Stop all heat-api and heat-engine services. 2. Uninstall old code. 3. Install new code. 4. Update configurations. 5. Do Database sync (most time-consuming step) 6. Start all heat-api and heat-engine services. Rolling Upgrades ================ .. note:: Rolling Upgrade is supported since Pike, which means operators can rolling upgrade Heat services from Ocata to Pike release with minimal downtime. A rolling upgrade would provide a better experience for the users and operators of the cloud. A rolling upgrade would allow individual heat-api and heat-engine services to be upgraded one at a time, with the rest of the services still available. This upgrade would have minimal downtime. Please check `spec about rolling upgrades`_. Prerequisites ------------- * Multiple Heat nodes. * A load balancer or some other type of redirection device is being used in front of nodes that run heat-api services in such a way that a node can be dropped out of rotation. That node continues running the Heat services (heat-api or heat-engine) but is no longer having requests routed to it. Procedure --------- These following steps are the process to upgrade Heat with minimal downtime: 1. Install the code for the next version of Heat either in a virtual environment or a separate control plane node, including all the python dependencies. 2. Using the newly installed heat code, run the following command to sync the database up to the most recent version. These schema change operations should have minimal or no effect on performance, and should not cause any operations to fail. .. code-block:: bash heat-manage db_sync 3. At this point, new columns and tables may exist in the database. These DB schema changes are done in a way that both the N and N+1 release can perform operations against the same schema. 4. Create a new rabbitmq vhost for the new release and change the transport_url configuration in heat.conf file to be: ``transport_url = rabbit://:@:5672/`` for all upgrade services. 5. Stop heat-engine gracefully, Heat has supported graceful shutdown features (see the `spec about rolling upgrades`_). Then start new heat-engine with new code (and corresponding configuration). .. note:: Remember to do Step 4, this would ensure that the existing engines would not communicate with the new engine. 6. A heat-api service is then upgraded and started with the new rabbitmq vhost. .. note:: The second way to do this step is switch heat-api service to use new vhost first (but remember not to shut down heat-api) and upgrade it. 7. The above process can be followed till all heat-api and heat-engine services are upgraded. .. note:: Make sure that all heat-api services has been upgraded before you start to upgrade the last heat-engine service. .. warning:: With the convergence architecture, whenever a resource completes the engine will send RPC messages to another (or the same) engine to start work on the next resource(s) to be processed. If the last engine is going to be shut down gracefully, it will finish what it is working on, which may post more messages to queues. It means the graceful shutdown does not wait for queues to drain. The shutdown leaves some messages unprocessed and any IN_PROGRESS stacks would get stuck without any forward progress. The operator must be careful when shutting down the last engine, make sure queues have no unprocessed messages before doing it. The operator can check the queues directly with `RabbitMQ`_'s management plugin. 8. Once all services are upgraded, double check the DB and services References ========== .. _cold-upgrades: https://governance.openstack.org/tc/reference/tags/assert_supports-upgrade.html .. _spec about rolling upgrades: https://review.opendev.org/#/c/407989/ .. _RabbitMQ: http://www.rabbitmq.com/management.html ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2630363 openstack_heat-24.0.0/doc/source/sourcecode/0000775000175000017500000000000000000000000021010 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/sourcecode/.gitignore0000664000175000017500000000000600000000000022774 0ustar00zuulzuul00000000000000*.rst ././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1743591352.2670362 openstack_heat-24.0.0/doc/source/template_guide/0000775000175000017500000000000000000000000021645 5ustar00zuulzuul00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/advanced_topics.rst0000664000175000017500000000044500000000000025530 0ustar00zuulzuul00000000000000:orphan: .. _advanced_topics: =============== Advanced topics =============== Networking ~~~~~~~~~~ Load balancer ------------- TODO Firewall -------- TODO VPN --- TODO Auto scaling ~~~~~~~~~~~~ Alarming -------- TODO Up scaling and down scaling --------------------------- TODO ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/basic_resources.rst0000664000175000017500000003023200000000000025552 0ustar00zuulzuul00000000000000.. highlight: yaml :linenothreshold: 5 .. _basic_resources: ========= Instances ========= .. For consistency let's define a few values to use in the samples: * image name: ubuntu-trusty-x86_64 * shared/provider network name: "public" * tenant network and subnet names: "private" and "private-subnet" Manage instances ~~~~~~~~~~~~~~~~ Create an instance ------------------ Use the :ref:`OS::Nova::Server` resource to create a Compute instance. The ``flavor`` property is the only mandatory one, but you need to define a boot source using one of the ``image`` or ``block_device_mapping`` properties. You also need to define the ``networks`` property to indicate to which networks your instance must connect if multiple networks are available in your tenant. The following example creates a simple instance, booted from an image, and connecting to the ``private`` network: .. code-block:: yaml resources: instance: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 networks: - network: private Connect an instance to a network -------------------------------- Use the ``networks`` property of an :ref:`OS::Nova::Server` resource to define which networks an instance should connect to. Define each network as a YAML map, containing one of the following keys: ``port`` The ID of an existing Networking port. You usually create this port in the same template using an :ref:`OS::Neutron::Port` resource. You will be able to associate a floating IP to this port, and the port to your Compute instance. ``network`` The name or ID of an existing network. You don't need to create an :ref:`OS::Neutron::Port` resource if you use this property. But you will not be able to use neutron floating IP association for this instance because there will be no specified port for server. The following example demonstrates the use of the ``port`` and ``network`` properties: .. code-block:: yaml resources: instance_port: type: OS::Neutron::Port properties: network: private fixed_ips: - subnet_id: "private-subnet" instance1: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 networks: - port: { get_resource: instance_port } instance2: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 networks: - network: private Create and associate security groups to an instance --------------------------------------------------- Use the :ref:`OS::Neutron::SecurityGroup` resource to create security groups. Define the ``security_groups`` property of the :ref:`OS::Neutron::Port` resource to associate security groups to a port, then associate the port to an instance. The following example creates a security group allowing inbound connections on ports 80 and 443 (web server) and associates this security group to an instance port: .. code-block:: yaml resources: web_secgroup: type: OS::Neutron::SecurityGroup properties: rules: - protocol: tcp remote_ip_prefix: 0.0.0.0/0 port_range_min: 80 port_range_max: 80 - protocol: tcp remote_ip_prefix: 0.0.0.0/0 port_range_min: 443 port_range_max: 443 instance_port: type: OS::Neutron::Port properties: network: private security_groups: - default - { get_resource: web_secgroup } fixed_ips: - subnet_id: private-subnet instance: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 networks: - port: { get_resource: instance_port } Create and associate a floating IP to an instance ------------------------------------------------- Use the :ref:`OS::Neutron::FloatingIP` resource to create a floating IP, and the :ref:`OS::Neutron::FloatingIPAssociation` resource to associate the floating IP to a port: .. code-block:: yaml parameters: net: description: name of network used to launch instance. type: string default: private resources: inst1: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 networks: - network: {get_param: net} floating_ip: type: OS::Neutron::FloatingIP properties: floating_network: public association: type: OS::Neutron::FloatingIPAssociation properties: floatingip_id: { get_resource: floating_ip } port_id: {get_attr: [inst1, addresses, {get_param: net}, 0, port]} You can also create an OS::Neutron::Port and associate that with the server and the floating IP. However the approach mentioned above will work better with stack updates. .. code-block:: yaml resources: instance_port: type: OS::Neutron::Port properties: network: private fixed_ips: - subnet_id: "private-subnet" floating_ip: type: OS::Neutron::FloatingIP properties: floating_network: public association: type: OS::Neutron::FloatingIPAssociation properties: floatingip_id: { get_resource: floating_ip } port_id: { get_resource: instance_port } Enable remote access to an instance ----------------------------------- The ``key_name`` attribute of the :ref:`OS::Nova::Server` resource defines the key pair to use to enable SSH remote access: .. code-block:: yaml resources: my_instance: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 key_name: my_key .. note:: For more information about key pairs, see `Configure access and security for instances `_. Create a key pair ----------------- You can create new key pairs with the :ref:`OS::Nova::KeyPair` resource. Key pairs can be imported or created during the stack creation. If the ``public_key`` property is not specified, the Orchestration module creates a new key pair. If the ``save_private_key`` property is set to ``true``, the ``private_key`` attribute of the resource holds the private key. The following example creates a new key pair and uses it as authentication key for an instance: .. code-block:: yaml resources: my_key: type: OS::Nova::KeyPair properties: save_private_key: true name: my_key my_instance: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 key_name: { get_resource: my_key } outputs: private_key: description: Private key value: { get_attr: [ my_key, private_key ] } Manage networks ~~~~~~~~~~~~~~~ Create a network and a subnet ----------------------------- .. note:: The Networking service (neutron) must be enabled on your OpenStack deployment to create and manage networks and subnets. Networks and subnets cannot be created if your deployment uses legacy networking (nova-network). Use the :ref:`OS::Neutron::Net` resource to create a network, and the :ref:`OS::Neutron::Subnet` resource to provide a subnet for this network: .. code-block:: yaml resources: new_net: type: OS::Neutron::Net new_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: new_net } cidr: "10.8.1.0/24" dns_nameservers: [ "8.8.8.8", "8.8.4.4" ] ip_version: 4 Create and manage a router -------------------------- Use the :ref:`OS::Neutron::Router` resource to create a router. You can define its gateway with the ``external_gateway_info`` property: .. code-block:: yaml resources: router1: type: OS::Neutron::Router properties: external_gateway_info: { network: public } You can connect subnets to routers with the :ref:`OS::Neutron::RouterInterface` resource: .. code-block:: yaml resources: subnet1_interface: type: OS::Neutron::RouterInterface properties: router_id: { get_resource: router1 } subnet: private-subnet Complete network example ------------------------ The following example creates a network stack: * A network and an associated subnet. * A router with an external gateway. * An interface to the new subnet for the new router. In this example, the ``public`` network is an existing shared network: .. code-block:: yaml resources: internal_net: type: OS::Neutron::Net internal_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: internal_net } cidr: "10.8.1.0/24" dns_nameservers: [ "8.8.8.8", "8.8.4.4" ] ip_version: 4 internal_router: type: OS::Neutron::Router properties: external_gateway_info: { network: public } internal_interface: type: OS::Neutron::RouterInterface properties: router_id: { get_resource: internal_router } subnet: { get_resource: internal_subnet } Manage volumes ~~~~~~~~~~~~~~ Create a volume --------------- Use the :ref:`OS::Cinder::Volume` resource to create a new Block Storage volume. For example: .. code-block:: yaml resources: my_new_volume: type: OS::Cinder::Volume properties: size: 10 The volumes that you create are empty by default. Use the ``image`` property to create a bootable volume from an existing image: .. code-block:: yaml resources: my_new_bootable_volume: type: OS::Cinder::Volume properties: size: 10 image: ubuntu-trusty-x86_64 You can also create new volumes from another volume, a volume snapshot, or a volume backup. Use the ``source_volid``, ``snapshot_id`` or ``backup_id`` properties to create a new volume from an existing source. For example, to create a new volume from a backup: .. code-block:: yaml resources: another_volume: type: OS::Cinder::Volume properties: backup_id: 2fff50ab-1a9c-4d45-ae60-1d054d6bc868 In this example the ``size`` property is not defined because the Block Storage service uses the size of the backup to define the size of the new volume. Attach a volume to an instance ------------------------------ Use the :ref:`OS::Cinder::VolumeAttachment` resource to attach a volume to an instance. The following example creates a volume and an instance, and attaches the volume to the instance: .. code-block:: yaml resources: new_volume: type: OS::Cinder::Volume properties: size: 1 new_instance: type: OS::Nova::Server properties: flavor: m1.small image: ubuntu-trusty-x86_64 volume_attachment: type: OS::Cinder::VolumeAttachment properties: volume_id: { get_resource: new_volume } instance_uuid: { get_resource: new_instance } Boot an instance from a volume ------------------------------ Use the ``block_device_mapping`` property of the :ref:`OS::Nova::Server` resource to define a volume used to boot the instance. This property is a list of volumes to attach to the instance before its boot. The following example creates a bootable volume from an image, and uses it to boot an instance: .. code-block:: yaml resources: bootable_volume: type: OS::Cinder::Volume properties: size: 10 image: ubuntu-trusty-x86_64 instance: type: OS::Nova::Server properties: flavor: m1.small networks: - network: private block_device_mapping: - device_name: vda volume_id: { get_resource: bootable_volume } delete_on_termination: false .. TODO A few elements that probably belong here: - OS::Swift::Container - OS::Trove::Instance ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/cfn.rst0000664000175000017500000000130400000000000023143 0ustar00zuulzuul00000000000000.. 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. :tocdepth: 2 CloudFormation Compatible Resource Types ---------------------------------------- .. integratedrespages:: AWS:: ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/composition.rst0000664000175000017500000001164600000000000024752 0ustar00zuulzuul00000000000000.. highlight: yaml :linenothreshold: 5 .. 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. .. _composition: ==================== Template composition ==================== When writing complex templates you are encouraged to break up your template into separate smaller templates. These can then be brought together using template resources. This is a mechanism to define a resource using a template, thus composing one logical stack with multiple templates. Template resources provide a feature similar to the :ref:`AWS::CloudFormation::Stack` resource, but also provide a way to: * Define new resource types and build your own resource library. * Override the default behavior of existing resource types. To achieve this: * The Orchestration client gets the associated template files and passes them along in the ``files`` section of the ``POST stacks/`` API request. * The environment in the Orchestration engine manages the mapping of resource type to template creation. * The Orchestration engine translates template parameters into resource properties. The following examples illustrate how you can use a custom template to define new types of resources. These examples use a custom template stored in a :file:`my_nova.yaml` file .. code-block:: yaml heat_template_version: 2015-04-30 parameters: key_name: type: string description: Name of a KeyPair resources: server: type: OS::Nova::Server properties: key_name: {get_param: key_name} flavor: m1.small image: ubuntu-trusty-x86_64 Use the template filename as type ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The following template defines the :file:`my_nova.yaml` file as value for the ``type`` property of a resource .. code-block:: yaml heat_template_version: 2015-04-30 resources: my_server: type: my_nova.yaml properties: key_name: my_key The ``key_name`` argument of the ``my_nova.yaml`` template gets its value from the ``key_name`` property of the new template. .. note:: The above reference to :file:`my_nova.yaml` assumes it is in the same directory. You can use any of the following forms: * Relative path (:file:`my_nova.yaml`) * Absolute path (:file:`file:///home/user/templates/my_nova.yaml`) * Http URL (``http://example.com/templates/my_nova.yaml``) * Https URL (``https://example.com/templates/my_nova.yaml``) To create the stack run:: $ openstack stack create -t main.yaml stack1 Define a new resource type ~~~~~~~~~~~~~~~~~~~~~~~~~~ You can associate a name to the :file:`my_nova.yaml` template in an environment file. If the name is already known by the Orchestration module then your new resource will override the default one. In the following example a new ``OS::Nova::Server`` resource overrides the default resource of the same name. An :file:`env.yaml` environment file holds the definition of the new resource .. code-block:: yaml resource_registry: "OS::Nova::Server": my_nova.yaml .. note:: See :ref:`environments` for more detail about environment files. You can now use the new ``OS::Nova::Server`` in your new template .. code-block:: yaml heat_template_version: 2015-04-30 resources: my_server: type: OS::Nova::Server properties: key_name: my_key To create the stack run:: $ openstack stack create -t main.yaml -e env.yaml example-two Get access to nested attributes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There are implicit attributes of a template resource. Accessing nested attributes requires ``heat_template_version`` 2014-10-16 or higher. These are accessible as follows .. code-block:: yaml heat_template_version: 2015-04-30 resources: my_server: type: my_nova.yaml outputs: test_out: value: {get_attr: [my_server, resource.server, first_address]} Making your template resource more "transparent" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. note:: Available since 2015.1 (Kilo). If you wish to be able to return the ID of one of the inner resources instead of the nested stack's identifier, you can add the special reserved output ``OS::stack_id`` to your template resource .. code-block:: yaml heat_template_version: 2015-04-30 resources: server: type: OS::Nova::Server outputs: OS::stack_id: value: {get_resource: server} Now when you use ``get_resource`` from the outer template heat will use the nova server id and not the template resource identifier. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/contrib.rst0000664000175000017500000000220600000000000024037 0ustar00zuulzuul00000000000000.. 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. :tocdepth: 2 Contributed Heat Resource Types =============================== .. rubric:: These resources are not enabled by default. .. contribrespages:: OS:: DockerInc Resource ------------------ .. rubric:: This resource is not enabled by default. This plugin enables the use of Docker containers in a Heat template and requires the `docker-py `_ package. You can find more information in the `DOCKER_README `_. .. contribrespages:: DockerInc:: ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/environment.rst0000664000175000017500000002523700000000000024754 0ustar00zuulzuul00000000000000.. highlight: yaml :linenothreshold: 5 .. 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. .. _environments: ============ Environments ============ The environment affects the runtime behavior of a template. It provides a way to override the resource implementations and a mechanism to place parameters that the service needs. To fully understand the runtime behavior you have to consider what plug-ins are installed on the cloud you're using. Environment file format ~~~~~~~~~~~~~~~~~~~~~~~ The environment is a yaml text file that contains two main sections: ``parameters`` A list of key/value pairs. ``resource_registry`` Definition of custom resources. It also can contain some other sections: ``parameter_defaults`` Default parameters passed to all template resources. ``encrypted_parameters`` List of encrypted parameters. ``event_sinks`` List of endpoints that would receive stack events. ``parameter_merge_strategies`` Merge strategies for merging parameters and parameter defaults from the environment file. Use the `-e` option of the :command:`openstack stack create` command to create a stack using the environment defined in such a file. You can also provide environment parameters as a list of key/value pairs using the `--parameter` option of the :command:`openstack stack create` command. In the following example the environment is read from the :file:`my_env.yaml` file and an extra parameter is provided using the `--parameter` option:: $ openstack stack create my_stack -e my_env.yaml --parameter "param1=val1;param2=val2" -t my_tmpl.yaml Environment Merging ~~~~~~~~~~~~~~~~~~~ Parameters and their defaults (``parameter_defaults``) are merged based on merge strategies in an environment file. There are three merge strategy types: ``overwrite`` Overwrites a parameter, existing parameter values are replaced. ``merge`` Merges the existing parameter value and the new value. String values are concatenated, comma delimited lists are extended and json values are updated. ``deep_merge`` Json values are deep merged. Not useful for other types like comma delimited lists and strings. If specified for them, it falls back to ``merge``. You can provide a default merge strategy and/or parameter specific merge strategies per environment file. Parameter specific merge strategy is only used for that parameter. An example of ``parameter_merge_strategies`` section in an environment file:: parameter_merge_strategies: default: merge param1: overwrite param2: deep_merge If no merge strategy is provided in an environment file, ``overwrite`` becomes the default merge strategy for all ``parameters`` and ``parameter_defaults`` in that environment file. Global and effective environments ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The environment used for a stack is the combination of the environment you use with the template for the stack, and a global environment that is determined by your cloud operator. An entry in the user environment takes precedence over the global environment. OpenStack includes a default global environment, but your cloud operator can add additional environment entries. The cloud operator can add to the global environment by putting environment files in a configurable directory wherever the Orchestration engine runs. The configuration variable is named ``environment_dir`` and is found in the ``[DEFAULT]`` section of :file:`/etc/heat/heat.conf`. The default for that directory is :file:`/etc/heat/environment.d`. Its contents are combined in whatever order the shell delivers them when the service starts up, which is the time when these files are read. If the :file:`my_env.yaml` file from the example above had been put in the ``environment_dir`` then the user's command line could be this:: openstack stack create my_stack --parameter "some_parm=bla" -t my_tmpl.yaml Global templates ---------------- A global template directory allows files to be pre-loaded in the global environment. A global template is determined by your cloud operator. An entry in the user template takes precedence over the global environment. OpenStack includes a default global template, but your cloud operator can add additional template entries. The cloud operator can add new global templates by putting template files in a configurable directory wherever the Orchestration engine runs. The configuration variable is named ``template_dir`` and is found in the ``[DEFAULT]`` section of :file:`/etc/heat/heat.conf`. The default for that directory is :file:`/etc/heat/templates`. Its contents are combined in whatever order the shell delivers them when the service starts up, which is the time when these files are read. If the :file:`my_tmpl.yaml` file from the example below has been put in the ``template_dir``, other templates which we used to create stacks could contain following way to include `my_tmpl.yaml` in it:: resourceA: type: {get_file: "my_tmpl.yaml"} Usage examples ~~~~~~~~~~~~~~ Define values for template arguments ------------------------------------ You can define values for the template arguments in the ``parameters`` section of an environment file:: parameters: KeyName: heat_key InstanceType: m1.micro ImageId: F18-x86_64-cfntools Define defaults to parameters -------------------------------- You can define default values for all template arguments in the ``parameter_defaults`` section of an environment file. These defaults are passed into all template resources:: parameter_defaults: KeyName: heat_key Mapping resources ----------------- You can map one resource to another in the ``resource_registry`` section of an environment file. The resource you provide in this manner must have an identifier, and must reference either another resource's ID or the URL of an existing template file. The following example maps a new ``OS::Networking::FloatingIP`` resource to an existing ``OS::Neutron::FloatingIP`` resource:: resource_registry: "OS::Networking::FloatingIP": "OS::Neutron::FloatingIP" You can use wildcards to map multiple resources, for example to map all ``OS::Neutron`` resources to ``OS::Network``:: resource_registry: "OS::Network*": "OS::Neutron*" Override a resource with a custom resource ------------------------------------------ To create or override a resource with a custom resource, create a template file to define this resource, and provide the URL to the template file in the environment file:: resource_registry: "AWS::EC2::Instance": file:///path/to/my_instance.yaml The supported URL schemes are ``file``, ``http`` and ``https``. .. note:: The template file extension must be ``.yaml`` or ``.template``, or it will not be treated as a custom template resource. You can limit the usage of a custom resource to a specific resource of the template:: resource_registry: resources: my_db_server: "OS::DBInstance": file:///home/mine/all_my_cool_templates/db.yaml Pause stack creation, update or deletion on a given resource ------------------------------------------------------------ If you want to debug your stack as it's being created, updated or deleted, or if you want to run it in phases, you can set ``pre-create``, ``pre-update``, ``pre-delete``, ``post-create``, ``post-update`` and ``post-delete`` hooks in the ``resources`` section of ``resource_registry``. To set a hook, add either ``hooks: $hook_name`` (for example ``hooks: pre-update``) to the resource's dictionary. You can also use a list (``hooks: [pre-create, pre-update]``) to stop on several actions. You can combine hooks with other ``resources`` properties such as provider templates or type mapping:: resource_registry: resources: my_server: "OS::DBInstance": file:///home/mine/all_my_cool_templates/db.yaml hooks: pre-create nested_stack: nested_resource: hooks: pre-update another_resource: hooks: [pre-create, pre-update] When heat encounters a resource that has a hook, it pauses the resource action until the hook clears. Any resources that depend on the paused action wait as well. Non-dependent resources are created in parallel unless they have their own hooks. It is possible to perform a wild card match using an asterisk (`*`) in the resource name. For example, the following entry pauses while creating ``app_server`` and ``database_server``, but not ``server`` or ``app_network``:: resource_registry: resources: "*_server": hooks: pre-create Clear hooks by signaling the resource with ``{unset_hook: $hook_name}`` (for example ``{unset_hook: pre-update}``). Retrieving events ----------------- By default events are stored in the database and can be retrieved via the API. Using the environment, you can register an endpoint which will receive events produced by your stack, so that you don't have to poll Heat. You can specify endpoints using the ``event_sinks`` property:: event_sinks: - type: zaqar-queue target: myqueue ttl: 1200 Restrict update or replace of a given resource ----------------------------------------------- If you want to restrict update or replace of a resource when your stack is being updated, you can set ``restricted_actions`` in the ``resources`` section of ``resource_registry``. To restrict update or replace, add ``restricted_actions: update`` or ``restricted_actions: replace`` to the resource dictionary. You can also use ``[update, replace]`` to restrict both actions. You can combine restricted actions with other ``resources`` properties such as provider templates or type mapping or hooks:: resource_registry: resources: my_server: "OS::DBInstance": file:///home/mine/all_my_cool_templates/db.yaml restricted_actions: replace hooks: pre-create nested_stack: nested_resource: restricted_actions: update another_resource: restricted_actions: [update, replace] It is possible to perform a wild card match using an asterisk (`*`) in the resource name. For example, the following entry restricts replace for ``app_server`` and ``database_server``, but not ``server`` or ``app_network``:: resource_registry: resources: "*_server": restricted_actions: replace ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/existing_templates.rst0000664000175000017500000000216100000000000026307 0ustar00zuulzuul00000000000000:orphan: .. _existing_templates: ================================ Where to find existing templates ================================ There are several repositories where you can find existing HOT templates. The `OpenStack Heat Templates repository`_ contains example templates demonstrating core Heat functionality, related image-building templates, and template-related scripts and conversion tools. .. _OpenStack Heat Templates Repository: https://opendev.org/openstack/heat-templates/ The `OpenStack TripleO Heat Templates repository`_ contains a variety of heat templates that are included in the tripleo-heat-templates codebase. .. _OpenStack TripleO Heat Templates repository: https://opendev.org/openstack/tripleo-heat-templates/ Rackspace has provided a set of Heat templates at the `RCB Ops repository`_ that can be used by cloud operators to launch applications, templates for building a multi-node OpenStack cluster, as well as templates for CI development. Heat templates for deployment of Magento, Hadoop, MongoDB, ELK, Drupal and more can be found here. .. _RCB Ops repository: https://github.com/rcbops?q=RPC-Heat ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/feature_guide.rst0000664000175000017500000000032500000000000025207 0ustar00zuulzuul00000000000000.. highlight: yaml :linenothreshold: 5 .. _feature_guide: ====================== Guideline for features ====================== Here are guideline for features: .. toctree:: :maxdepth: 2 multi-clouds ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/functions.rst0000664000175000017500000002303000000000000024405 0ustar00zuulzuul00000000000000.. 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. =================================== CloudFormation Compatible Functions =================================== There are a number of functions that you can use to help you write CloudFormation compatible templates. While most CloudFormation functions are supported in HOT version '2013-05-23', *Fn::Select* is the only CloudFormation function supported in HOT templates since version '2014-10-16' which is introduced in Juno. All of these functions (except *Ref*) start with *Fn::*. --- Ref --- Returns the value of the named parameter or resource. Parameters ~~~~~~~~~~ name : String The name of the resource or parameter. Usage ~~~~~ .. code-block:: yaml {Ref: my_server} Returns the nova instance ID. For example, ``d8093de0-850f-4513-b202-7979de6c0d55``. ---------- Fn::Base64 ---------- This is a placeholder for a function to convert an input string to Base64. This function in Heat actually performs no conversion. It is included for the benefit of CFN templates that convert UserData to Base64. Heat only accepts UserData in plain text. Parameters ~~~~~~~~~~ value : String The string to convert. Usage ~~~~~ .. code-block:: yaml {"Fn::Base64": "convert this string please."} Returns the original input string. ------------- Fn::FindInMap ------------- Returns the value corresponding to keys into a two-level map declared in the Mappings section. Parameters ~~~~~~~~~~ map_name : String The logical name of a mapping declared in the Mappings section that contains the keys and values. top_level_key : String The top-level key name. It's value is a list of key-value pairs. second_level_key : String The second-level key name, which is set to one of the keys from the list assigned to top_level_key. Usage ~~~~~ .. code-block:: yaml Mapping: MyContacts: jone: {phone: 337, email: a@b.com} jim: {phone: 908, email: g@b.com} {"Fn::FindInMap": ["MyContacts", "jim", "phone" ] } Returns ``908``. ---------- Fn::GetAtt ---------- Returns an attribute of a resource within the template. Parameters ~~~~~~~~~~ resource : String The name of the resource. attribute : String The name of the attribute. Usage ~~~~~ .. code-block:: yaml {Fn::GetAtt: [my_server, PublicIp]} Returns an IP address such as ``10.0.0.2``. ---------- Fn::GetAZs ---------- Returns the Availability Zones within the given region. *Note: AZ's and regions are not fully implemented in Heat.* Parameters ~~~~~~~~~~ region : String The name of the region. Usage ~~~~~ .. code-block:: yaml {Fn::GetAZs: ""} Returns the list provided by ``nova availability-zone-list``. -------- Fn::Join -------- Like python join, it joins a list of strings with the given delimiter. Parameters ~~~~~~~~~~ delimiter : String The string to join the list with. list : list The list to join. Usage ~~~~~ .. code-block:: yaml {Fn::Join: [",", ["beer", "wine", "more beer"]]} Returns ``beer, wine, more beer``. ---------- Fn::Select ---------- Select an item from a list. *Heat extension: Select an item from a map* Parameters ~~~~~~~~~~ selector : string or integer The number of item in the list or the name of the item in the map. collection : map or list The collection to select the item from. Usage ~~~~~ For a list lookup: .. code-block:: yaml { "Fn::Select" : [ "2", [ "apples", "grapes", "mangoes" ] ] } Returns ``mangoes``. For a map lookup: .. code-block:: yaml { "Fn::Select" : [ "red", {"red": "a", "flu": "b"} ] } Returns ``a``. --------- Fn::Split --------- This is the reverse of Join. Convert a string into a list based on the delimiter. Parameters ~~~~~~~~~~ delimiter : string Matching string to split on. string : String The string to split. Usage ~~~~~ .. code-block:: yaml { "Fn::Split" : [ ",", "str1,str2,str3,str4"]} Returns ``{["str1", "str2", "str3", "str4"]}``. ----------- Fn::Replace ----------- Find and replace one string with another. Parameters ~~~~~~~~~~ substitutions : map A map of substitutions. string: String The string to do the substitutions in. Usage ~~~~~ .. code-block:: yaml {"Fn::Replace": [ {'$var1': 'foo', '%var2%': 'bar'}, '$var1 is %var2%' ]} Returns ``"foo is bar"``. ------------------ Fn::ResourceFacade ------------------ When writing a Template Resource: - user writes a template that will fill in for a resource (the resource is the facade). - when they are writing their template they need to access the metadata from the facade. Parameters ~~~~~~~~~~ attribute_name : String One of ``Metadata``, ``DeletionPolicy`` or ``UpdatePolicy``. Usage ~~~~~ .. code-block:: yaml {'Fn::ResourceFacade': 'Metadata'} {'Fn::ResourceFacade': 'DeletionPolicy'} {'Fn::ResourceFacade': 'UpdatePolicy'} Example ~~~~~~~ Here is a top level template ``top.yaml`` .. code-block:: yaml resources: my_server: type: OS::Nova::Server metadata: key: value some: more stuff Here is a resource template ``my_actual_server.yaml`` .. code-block:: yaml resources: _actual_server_: type: OS::Nova::Server metadata: {'Fn::ResourceFacade': Metadata} The environment file ``env.yaml`` .. code-block:: yaml resource_registry: resources: my_server: "OS::Nova::Server": my_actual_server.yaml To use it :: $ openstack stack create -t top.yaml -e env.yaml mystack What happened is the metadata in ``top.yaml`` (key: value, some: more stuff) gets passed into the resource template via the `Fn::ResourceFacade`_ function. ------------------- Fn::MemberListToMap ------------------- Convert an AWS style member list into a map. Parameters ~~~~~~~~~~ key name: string The name of the key (normally "Name" or "Key"). value name: string The name of the value (normally "Value"). list: A list of strings The string to convert. Usage ~~~~~ .. code-block:: yaml {'Fn::MemberListToMap': ['Name', 'Value', ['.member.0.Name=key', '.member.0.Value=door', '.member.1.Name=colour', '.member.1.Value=green']]} Returns ``{'key': 'door', 'colour': 'green'}``. ---------- Fn::Equals ---------- Compares whether two values are equal. And returns true if the two values are equal or false if they aren't. Parameters ~~~~~~~~~~ value1: A value of any type that you want to compare. value2: A value of any type that you want to compare. Usage ~~~~~ .. code-block:: yaml {'Fn::Equals': [{'Ref': 'env_type'}, 'prod']} Returns true if the param 'env_type' equals to 'prod', otherwise returns false. ------ Fn::If ------ Returns one value if the specified condition evaluates to true and another value if the specified condition evaluates to false. Parameters ~~~~~~~~~~ condition_name: A reference to a condition in the ``Conditions`` section. value_if_true: A value to be returned if the specified condition evaluates to true. value_if_false: A value to be returned if the specified condition evaluates to false. Usage ~~~~~ .. code-block:: yaml {'Fn::If': ['create_prod', 'value_true', 'value_false']} Returns 'value_true' if the condition 'create_prod' evaluates to true, otherwise returns 'value_false'. ------- Fn::Not ------- Acts as a NOT operator. The syntax of the ``Fn::Not`` function is .. code-block:: yaml {'Fn::Not': [condition]} Returns true for a condition that evaluates to false or returns false for a condition that evaluates to true. Parameters ~~~~~~~~~~ condition: A condition such as ``Fn::Equals`` that evaluates to true or false can be defined in this function, also we can set a boolean value as a condition. Usage ~~~~~ .. code-block:: yaml {'Fn::Not': [{'Fn::Equals': [{'Ref': env_type'}, 'prod']}]} Returns false if the param 'env_type' equals to 'prod', otherwise returns true. ------- Fn::And ------- Acts as an AND operator to evaluate all the specified conditions. Returns true if all the specified conditions evaluate to true, or returns false if any one of the conditions evaluates to false. Parameters ~~~~~~~~~~ condition: A condition such as Fn::Equals that evaluates to true or false. Usage ~~~~~ .. code-block:: yaml {'Fn::And': [{'Fn::Equals': [{'Ref': env_type}, 'prod']}, {'Fn::Not': [{'Fn::Equals': [{'Ref': zone}, 'beijing']}]}] Returns true if the param 'env_type' equals to 'prod' and the param 'zone' is not equal to 'beijing', otherwise returns false. ------ Fn::Or ------ Acts as an OR operator to evaluate all the specified conditions. Returns true if any one of the specified conditions evaluate to true, or returns false if all of the conditions evaluates to false. Parameters ~~~~~~~~~~ condition: A condition such as Fn::Equals that evaluates to true or false. Usage ~~~~~ .. code-block:: yaml {'Fn::Or': [{'Fn::Equals': [{'Ref': zone}, 'shanghai']}, {'Fn::Equals': [{'Ref': zone}, 'beijing']}]} Returns true if the param 'zone' equals to 'shanghai' or 'beijing', otherwise returns false. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/hello_world.rst0000664000175000017500000001736600000000000024726 0ustar00zuulzuul00000000000000.. highlight: yaml :linenothreshold: 5 .. 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. .. _hello_world: ================================== Writing a hello world HOT template ================================== HOT is a new template format meant to replace the CloudFormation-compatible format (CFN) as the native format supported by the Orchestration module over time. This guide is targeted towards template authors and explains how to write HOT templates based on examples. A detailed specification of HOT can be found at :ref:`hot_spec`. This section gives an introduction on how to write HOT templates, starting from very basic steps and then going into more and more detail by means of examples. A most basic template ~~~~~~~~~~~~~~~~~~~~~ The most basic template you can think of contains only a single resource definition using only predefined properties. For example, the template below could be used to deploy a single compute instance: .. code-block:: yaml heat_template_version: 2015-04-30 description: Simple template to deploy a single compute instance resources: my_instance: type: OS::Nova::Server properties: key_name: my_key image: ubuntu-trusty-x86_64 flavor: m1.small Each HOT template must include the ``heat_template_version`` key with the HOT version value, for example, ``2013-05-23``. Consult the :ref:`Heat template version list ` for allowed values and their features. The ``description`` key is optional, however it is good practice to include some useful text that describes what users can do with the template. In case you want to provide a longer description that does not fit on a single line, you can provide multi-line text in YAML, for example: .. code-block:: yaml description: > This is how you can provide a longer description of your template that goes over several lines. The ``resources`` section is required and must contain at least one resource definition. In the above example, a compute instance is defined with fixed values for the ``key_name``, ``image`` and ``flavor`` properties. .. note:: All the defined elements (key pair, image, flavor) have to exist in the OpenStack environment where the template is used. Input parameters ~~~~~~~~~~~~~~~~ Input parameters defined in the ``parameters`` section of a template allow users to customize a template during deployment. For example, this allows for providing custom key pair names or image IDs to be used for a deployment. From a template author's perspective, this helps to make a template more easily reusable by avoiding hardcoded assumptions. The following example extends the previous template to provide parameters for the key pair, image and flavor properties of the resource: .. code-block:: yaml heat_template_version: 2015-04-30 description: Simple template to deploy a single compute instance parameters: key_name: type: string label: Key Name description: Name of key-pair to be used for compute instance image_id: type: string label: Image ID description: Image to be used for compute instance flavor: type: string label: Instance Type description: Type of instance (flavor) to be used resources: my_instance: type: OS::Nova::Server properties: key_name: { get_param: key_name } image: { get_param: image_id } flavor: { get_param: flavor } Values for the three parameters must be defined by the template user during the deployment of a stack. The ``get_param`` intrinsic function retrieves a user-specified value for a given parameter and uses this value for the associated resource property. For more information about intrinsic functions, see :ref:`hot_spec_intrinsic_functions`. Providing default values ------------------------ You can provide default values for parameters. If a user doesn't define a value for a parameter, the default value is used during the stack deployment. The following example defines a default value ``m1.small`` for the ``flavor`` property: .. code-block:: yaml parameters: flavor: type: string label: Instance Type description: Flavor to be used default: m1.small .. note:: If a template doesn't define a default value for a parameter, then the user must define the value, otherwise the stack creation will fail. Hiding parameters values ------------------------ The values that a user provides when deploying a stack are available in the stack details and can be accessed by any user in the same tenant. To hide the value of a parameter, use the ``hidden`` boolean attribute of the parameter: .. code-block:: yaml parameters: database_password: type: string label: Database Password description: Password to be used for database hidden: true Restricting user input ---------------------- You can restrict the values of an input parameter to make sure that the user defines valid data for this parameter. The ``constraints`` property of an input parameter defines a list of constraints to apply for the parameter. The following example restricts the ``flavor`` parameter to a list of three possible values: .. code-block:: yaml parameters: flavor: type: string label: Instance Type description: Type of instance (flavor) to be used constraints: - allowed_values: [ m1.medium, m1.large, m1.xlarge ] description: Value must be one of m1.medium, m1.large or m1.xlarge. The following example defines multiple constraints for a password definition: .. code-block:: yaml parameters: database_password: type: string label: Database Password description: Password to be used for database hidden: true constraints: - length: { min: 6, max: 8 } description: Password length must be between 6 and 8 characters. - allowed_pattern: "[a-zA-Z0-9]+" description: Password must consist of characters and numbers only. - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*" description: Password must start with an uppercase character. The list of supported constraints is available in the :ref:`hot_spec_parameters_constraints` section. .. note:: You can define multiple constraints of the same type. Especially in the case of allowed patterns this not only allows for keeping regular expressions simple and maintainable, but also for keeping error messages to be presented to users precise. Template outputs ~~~~~~~~~~~~~~~~ In addition to template customization through input parameters, you can provide information about the resources created during the stack deployment to the users in the ``outputs`` section of a template. In the following example the output section provides the IP address of the ``my_instance`` resource: .. code-block:: yaml outputs: instance_ip: description: The IP address of the deployed instance value: { get_attr: [my_instance, first_address] } .. note:: Output values are typically resolved using intrinsic function such as the ``get_attr``. See :ref:`hot_spec_intrinsic_functions` for more information about intrinsic functions.. See :ref:`hot_spec_outputs` for more information about the ``outputs`` section. ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/hot_guide.rst0000664000175000017500000002072600000000000024355 0ustar00zuulzuul00000000000000.. 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. .. _hot_guide: ======================================= Heat Orchestration Template (HOT) Guide ======================================= HOT is a template format supported by the heat, along with the other template format, i.e. the Heat CloudFormation-compatible format (CFN). This guide is targeted towards template authors and explains how to write HOT templates based on examples. A detailed specification of HOT can be found at :ref:`hot_spec`. ------ Status ------ HOT is in the process of surpassing the functionality of the CFN. This guide will be updated periodically whenever new features get implemented for HOT. ---------------------------------- Writing a hello world HOT template ---------------------------------- This section gives an introduction on how to write HOT templates, starting from very basic steps and then going into more and more detail by means of examples. A most basic template --------------------- The most basic template you can think of may contain only a single resource definition using only predefined properties (along with the mandatory Heat template version tag). For example, the template below could be used to simply deploy a single compute instance. .. code-block:: yaml heat_template_version: 2015-04-30 description: Simple template to deploy a single compute instance resources: my_instance: type: OS::Nova::Server properties: key_name: my_key image: F18-x86_64-cfntools flavor: m1.small Each HOT template has to include the *heat_template_version* key with a valid version of HOT, e.g. 2015-10-15 (see :ref:`hot_spec_template_version` for a list of all versions). While the *description* is optional, it is good practice to include some useful text that describes what users can do with the template. In case you want to provide a longer description that does not fit on a single line, you can provide multi-line text in YAML, for example: .. code-block:: yaml description: > This is how you can provide a longer description of your template that goes over several lines. The *resources* section is required and must contain at least one resource definition. In the example above, a compute instance is defined with fixed values for the 'key_name', 'image' and 'flavor' parameters. Note that all those elements, i.e. a key-pair with the given name, the image and the flavor have to exist in the OpenStack environment where the template is used. Typically a template is made more easily reusable, though, by defining a set of *input parameters* instead of hard-coding such values. Template input parameters ------------------------- Input parameters defined in the *parameters* section of a HOT template (see also :ref:`hot_spec_parameters`) allow users to customize a template during deployment. For example, this allows for providing custom key-pair names or image IDs to be used for a deployment. From a template author's perspective, this helps to make a template more easily reusable by avoiding hardcoded assumptions. Sticking to the example used above, it makes sense to allow users to provide their custom key-pairs, provide their own image, and to select a flavor for the compute instance. This can be achieved by extending the initial template as follows: .. code-block:: yaml heat_template_version: 2015-04-30 description: Simple template to deploy a single compute instance parameters: key_name: type: string label: Key Name description: Name of key-pair to be used for compute instance image_id: type: string label: Image ID description: Image to be used for compute instance instance_type: type: string label: Instance Type description: Type of instance (flavor) to be used resources: my_instance: type: OS::Nova::Server properties: key_name: { get_param: key_name } image: { get_param: image_id } flavor: { get_param: instance_type } In the example above, three input parameters have been defined that have to be provided by the user upon deployment. The fixed values for the respective resource properties have been replaced by references to the corresponding input parameters by means of the *get_param* function (see also :ref:`hot_spec_intrinsic_functions`). You can also define default values for input parameters which will be used in case the user does not provide the respective parameter during deployment. For example, the following definition for the *instance_type* parameter would select the 'm1.small' flavor unless specified otherwise by the user. .. code-block:: yaml parameters: instance_type: type: string label: Instance Type description: Type of instance (flavor) to be used default: m1.small Another option that can be specified for a parameter is to hide its value when users request information about a stack deployed from a template. This is achieved by the *hidden* attribute and useful, for example when requesting passwords as user input: .. code-block:: yaml parameters: database_password: type: string label: Database Password description: Password to be used for database hidden: true Restricting user input ~~~~~~~~~~~~~~~~~~~~~~ In some cases you might want to restrict the values of input parameters that users can supply. For example, you might know that the software running in a compute instance needs a certain amount of resources so you might want to restrict the *instance_type* parameter introduced above. Parameters in HOT templates can be restricted by adding a *constraints* section (see also :ref:`hot_spec_parameters_constraints`). For example, the following would allow only three values to be provided as input for the *instance_type* parameter: .. code-block:: yaml parameters: instance_type: type: string label: Instance Type description: Type of instance (flavor) to be used constraints: - allowed_values: [ m1.medium, m1.large, m1.xlarge ] description: Value must be one of m1.medium, m1.large or m1.xlarge. The *constraints* section allows for defining a list of constraints that must all be fulfilled by user input. For example, the following list of constraints could be used to clearly specify format requirements on a password to be provided by users: .. code-block:: yaml parameters: database_password: type: string label: Database Password description: Password to be used for database hidden: true constraints: - length: { min: 6, max: 8 } description: Password length must be between 6 and 8 characters. - allowed_pattern: "[a-zA-Z0-9]+" description: Password must consist of characters and numbers only. - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*" description: Password must start with an uppercase character. Note that you can define multiple constraints of the same type. Especially in the case of allowed patterns this not only allows for keeping regular expressions simple and maintainable, but also for keeping error messages to be presented to users precise. Providing template outputs -------------------------- In addition to template customization through input parameters, you will typically want to provide outputs to users, which can be done in the *outputs* section of a template (see also :ref:`hot_spec_outputs`). For example, the IP address by which the instance defined in the example above can be accessed should be provided to users. Otherwise, users would have to look it up themselves. The definition for providing the IP address of the compute instance as an output is shown in the following snippet: .. code-block:: yaml outputs: instance_ip: description: The IP address of the deployed instance value: { get_attr: [my_instance, first_address] } Output values are typically resolved using intrinsic function such as the *get_attr* function in the example above (see also :ref:`hot_spec_intrinsic_functions`). ././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1743591306.0 openstack_heat-24.0.0/doc/source/template_guide/hot_spec.rst0000664000175000017500000016625600000000000024223 0ustar00zuulzuul00000000000000.. highlight: yaml :linenothreshold: 5 .. 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. .. _hot_spec: =============================================== Heat Orchestration Template (HOT) specification =============================================== HOT is a new template format meant to replace the Heat CloudFormation-compatible format (CFN) as the native format supported by the Heat over time. This specification explains in detail all elements of the HOT template format. An example driven guide to writing HOT templates can be found at :ref:`hot_guide`. Status ~~~~~~ HOT is considered reliable, supported, and standardized as of our Icehouse (April 2014) release. The Heat core team may make improvements to the standard, which very likely would be backward compatible. The template format is also versioned. Since Juno release, Heat supports multiple different versions of the HOT specification. Template structure ~~~~~~~~~~~~~~~~~~ HOT templates are defined in YAML and follow the structure outlined below. .. code-block:: yaml heat_template_version: 2016-10-14 description: # a description of the template parameter_groups: # a declaration of input parameter groups and order parameters: # declaration of input parameters resources: # declaration of template resources outputs: # declaration of output parameters conditions: # declaration of conditions heat_template_version This key with value ``2013-05-23`` (or a later date) indicates that the YAML document is a HOT template of the specified version. description This optional key allows for giving a description of the template, or the workload that can be deployed using the template. parameter_groups This section allows for specifying how the input parameters should be grouped and the order to provide the parameters in. This section is optional and can be omitted when necessary. parameters This section allows for specifying input parameters that have to be provided when instantiating the template. The section is optional and can be omitted when no input is required. resources This section contains the declaration of the single resources of the template. This section with at least one resource should be defined in any HOT template, or the template would not really do anything when being instantiated. outputs This section allows for specifying output parameters available to users once the template has been instantiated. This section is optional and can be omitted when no output values are required. conditions This optional section includes statements which can be used to restrict when a resource is created or when a property is defined. They can be associated with resources and resource properties in the ``resources`` section, also can be associated with outputs in the ``outputs`` sections of a template. Note: Support for this section is added in the Newton version. .. _hot_spec_template_version: Heat template version ~~~~~~~~~~~~~~~~~~~~~ The value of ``heat_template_version`` tells Heat not only the format of the template but also features that will be validated and supported. Beginning with the Newton release, the version can be either the date of the Heat release or the code name of the Heat release. Heat currently supports the following values for the ``heat_template_version`` key: 2013-05-23 ---------- The key with value ``2013-05-23`` indicates that the YAML document is a HOT template and it may contain features implemented until the Icehouse release. This version supports the following functions (some are back ported to this version):: get_attr get_file get_param get_resource list_join resource_facade str_replace Fn::Base64 Fn::GetAZs Fn::Join Fn::MemberListToMap Fn::Replace Fn::ResourceFacade Fn::Select Fn::Split Ref 2014-10-16 ---------- The key with value ``2014-10-16`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Juno release. This version removes most CFN functions that were supported in the Icehouse release, i.e. the ``2013-05-23`` version. So the supported functions now are:: get_attr get_file get_param get_resource list_join resource_facade str_replace Fn::Select 2015-04-30 ---------- The key with value ``2015-04-30`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Kilo release. This version adds the ``repeat`` function. So the complete list of supported functions is:: get_attr get_file get_param get_resource list_join repeat digest resource_facade str_replace Fn::Select 2015-10-15 ---------- The key with value ``2015-10-15`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Liberty release. This version removes the *Fn::Select* function, path based ``get_attr``/``get_param`` references should be used instead. Moreover ``get_attr`` since this version returns dict of all attributes for the given resource excluding *show* attribute, if there's no specified, e.g. :code:`{ get_attr: []}`. This version also adds the str_split function and support for passing multiple lists to the existing list_join function. The complete list of supported functions is:: get_attr get_file get_param get_resource list_join repeat digest resource_facade str_replace str_split 2016-04-08 ---------- The key with value ``2016-04-08`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Mitaka release. This version also adds the ``map_merge`` function which can be used to merge the contents of maps. The complete list of supported functions is:: digest get_attr get_file get_param get_resource list_join map_merge repeat resource_facade str_replace str_split 2016-10-14 | newton ------------------- The key with value ``2016-10-14`` or ``newton`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Newton release. This version adds the ``yaql`` function which can be used for evaluation of complex expressions, the ``map_replace`` function that can do key/value replacements on a mapping, and the ``if`` function which can be used to return corresponding value based on condition evaluation. The complete list of supported functions is:: digest get_attr get_file get_param get_resource list_join map_merge map_replace repeat resource_facade str_replace str_split yaql if This version adds ``equals`` condition function which can be used to compare whether two values are equal, the ``not`` condition function which acts as a NOT operator, the ``and`` condition function which acts as an AND operator to evaluate all the specified conditions, the ``or`` condition function which acts as an OR operator to evaluate all the specified conditions. The complete list of supported condition functions is:: equals get_param not and or 2017-02-24 | ocata ------------------- The key with value ``2017-02-24`` or ``ocata`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Ocata release. This version adds the ``str_replace_strict`` function which raises errors for missing params and the ``filter`` function which filters out values from lists. The complete list of supported functions is:: digest filter get_attr get_file get_param get_resource list_join map_merge map_replace repeat resource_facade str_replace str_replace_strict str_split yaql if The complete list of supported condition functions is:: equals get_param not and or 2017-09-01 | pike ----------------- The key with value ``2017-09-01`` or ``pike`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Pike release. This version adds the ``make_url`` function for assembling URLs, the ``list_concat`` function for combining multiple lists, the ``list_concat_unique`` function for combining multiple lists without repeating items, the ``string_replace_vstrict`` function which raises errors for missing and empty params, and the ``contains`` function which checks whether specific value is in a sequence. The complete list of supported functions is:: digest filter get_attr get_file get_param get_resource list_join make_url list_concat list_concat_unique contains map_merge map_replace repeat resource_facade str_replace str_replace_strict str_replace_vstrict str_split yaql if We support 'yaql' and 'contains' as condition functions in this version. The complete list of supported condition functions is:: equals get_param not and or yaql contains 2018-03-02 | queens ------------------- The key with value ``2018-03-02`` or ``queens`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Queens release. The complete list of supported functions is:: digest filter get_attr get_file get_param get_resource list_join make_url list_concat list_concat_unique contains map_merge map_replace repeat resource_facade str_replace str_replace_strict str_replace_vstrict str_split yaql if The complete list of supported condition functions is:: equals get_param not and or yaql contains 2018-08-31 | rocky ------------------- The key with value ``2018-08-31`` or ``rocky`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Rocky release. The complete list of supported functions is:: digest filter get_attr get_file get_param get_resource list_join make_url list_concat list_concat_unique contains map_merge map_replace repeat resource_facade str_replace str_replace_strict str_replace_vstrict str_split yaql if The complete list of supported condition functions is:: equals get_param not and or yaql contains 2021-04-16 | wallaby -------------------- The key with value ``2021-04-16`` or ``wallaby`` indicates that the YAML document is a HOT template and it may contain features added and/or removed up until the Wallaby release. This version adds a 2-argument variant of the ``if`` function. When the condition is false and no third argument is supplied, the entire enclosing item (which may be e.g. a list item, a key-value pair in a dict, or a property value) will be elided. This allows for e.g. conditional definition of properties while keeping the default value when the condition is false. The complete list of supported functions is:: digest filter get_attr get_file get_param get_resource list_join make_url list_concat list_concat_unique contains map_merge map_replace repeat resource_facade str_replace str_replace_strict str_replace_vstrict str_split yaql if The complete list of supported condition functions is:: equals get_param not and or yaql contains .. _hot_spec_parameter_groups: Parameter groups section ~~~~~~~~~~~~~~~~~~~~~~~~ The ``parameter_groups`` section allows for specifying how the input parameters should be grouped and the order to provide the parameters in. These groups are typically used to describe expected behavior for downstream user interfaces. These groups are specified in a list with each group containing a list of associated parameters. The lists are used to denote the expected order of the parameters. Each parameter should be associated to a specific group only once using the parameter name to bind it to a defined parameter in the ``parameters`` section. .. code-block:: yaml parameter_groups: - label: description: parameters: - - label A human-readable label that defines the associated group of parameters. description This attribute allows for giving a human-readable description of the parameter group. parameters A list of parameters associated with this parameter group. param name The name of the parameter that is defined in the associated ``parameters`` section. .. _hot_spec_parameters: Parameters section ~~~~~~~~~~~~~~~~~~ The ``parameters`` section allows for specifying input parameters that have to be provided when instantiating the template. Such parameters are typically used to customize each deployment (e.g. by setting custom user names or passwords) or for binding to environment-specifics like certain images. Each parameter is specified in a separated nested block with the name of the parameters defined in the first line and additional attributes such as type or default value defined as nested elements. .. code-block:: yaml parameters: : type: label: description: default: hidden: constraints: immutable: tags: param name The name of the parameter. type The type of the parameter. Supported types are ``string``, ``number``, ``comma_delimited_list``, ``json`` and ``boolean``. This attribute is required. label A human readable name for the parameter. This attribute is optional. description A human readable description for the parameter. This attribute is optional. default A default value for the parameter. This value is used if the user doesn't specify his own value during deployment. This attribute is optional. hidden Defines whether the parameters should be hidden when a user requests information about a stack created from the template. This attribute can be used to hide passwords specified as parameters. This attribute is optional and defaults to ``false``. constraints A list of constraints to apply. The constraints are validated by the Orchestration engine when a user deploys a stack. The stack creation fails if the parameter value doesn't comply to the constraints. This attribute is optional. immutable Defines whether the parameter is updatable. Stack update fails, if this is set to ``true`` and the parameter value is changed. This attribute is optional and defaults to ``false``. tags A list of strings to specify the category of a parameter. This value is used to categorize a parameter so that users can group the parameters. This attribute is optional. The table below describes all currently supported types with examples: +----------------------+-------------------------------+------------------+ | Type | Description | Examples | +======================+===============================+==================+ | string | A literal string. | "String param" | +----------------------+-------------------------------+------------------+ | number | An integer or float. | "2"; "0.2" | +----------------------+-------------------------------+------------------+ | comma_delimited_list | An array of literal strings | ["one", "two"]; | | | that are separated by commas. | "one, two"; | | | The total number of strings | Note: "one, two" | | | should be one more than the | returns | | | total number of commas. | ["one", " two"] | +----------------------+-------------------------------+------------------+ | json | A JSON-formatted map or list. | {"key": "value"} | +----------------------+-------------------------------+------------------+ | boolean | Boolean type value, which can | "on"; "n" | | | be equal "t", "true", "on", | | | | "y", "yes", or "1" for true | | | | value and "f", "false", | | | | "off", "n", "no", or "0" for | | | | false value. | | +----------------------+-------------------------------+------------------+ The following example shows a minimalistic definition of two parameters .. code-block:: yaml parameters: user_name: type: string label: User Name description: User name to be configured for the application port_number: type: number label: Port Number description: Port number to be configured for the web server .. note:: The description and the label are optional, but defining these attributes is good practice to provide useful information about the role of the parameter to the user. .. _hot_spec_parameters_constraints: Parameter Constraints --------------------- The ``constraints`` block of a parameter definition defines additional validation constraints that apply to the value of the parameter. The parameter values provided by a user are validated against the constraints at instantiation time. The constraints are defined as a list with the following syntax .. code-block:: yaml constraints: - : description: constraint type Type of constraint to apply. The set of currently supported constraints is given below. constraint definition The actual constraint, depending on the constraint type. The concrete syntax for each constraint type is given below. description A description of the constraint. The text is presented to the user when the value he defines violates the constraint. If omitted, a default validation message is presented to the user. This attribute is optional. The following example shows the definition of a string parameter with two constraints. Note that while the descriptions for each constraint are optional, it is good practice to provide concrete descriptions to present useful messages to the user at deployment time. .. code-block:: yaml parameters: user_name: type: string label: User Name description: User name to be configured for the application constraints: - length: { min: 6, max: 8 } description: User name must be between 6 and 8 characters - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*" description: User name must start with an uppercase character .. note:: While the descriptions for each constraint are optional, it is good practice to provide concrete descriptions so useful messages can be presented to the user at deployment time. The following sections list the supported types of parameter constraints, along with the concrete syntax for each type. length ++++++ The ``length`` constraint applies to parameters of type ``string``, ``comma_delimited_list`` and ``json``. It defines a lower and upper limit for the length of the string value or list/map collection. The syntax of the ``length`` constraint is .. code-block:: yaml length: { min: , max: } It is possible to define a length constraint with only a lower limit or an upper limit. However, at least one of ``min`` or ``max`` must be specified. range +++++ The ``range`` constraint applies to parameters of type ``number``. It defines a lower and upper limit for the numeric value of the parameter. The syntax of the ``range`` constraint is .. code-block:: yaml range: { min: , max: } It is possible to define a range constraint with only a lower limit or an upper limit. However, at least one of ``min`` or ``max`` must be specified. The minimum and maximum boundaries are included in the range. For example, the following range constraint would allow for all numeric values between 0 and 10 .. code-block:: yaml range: { min: 0, max: 10 } modulo ++++++ The ``modulo`` constraint applies to parameters of type ``number``. The value is valid if it is a multiple of ``step``, starting with ``offset``. The syntax of the ``modulo`` constraint is .. code-block:: yaml modulo: { step: , offset: } Both ``step`` and ``offset`` must be specified. For example, the following modulo constraint would only allow for odd numbers .. code-block:: yaml modulo: { step: 2, offset: 1 } allowed_values ++++++++++++++ The ``allowed_values`` constraint applies to parameters of type ``string`` or ``number``. It specifies a set of possible values for a parameter. At deployment time, the user-provided value for the respective parameter must match one of the elements of the list. The syntax of the ``allowed_values`` constraint is .. code-block:: yaml allowed_values: [ , , ... ] Alternatively, the following YAML list notation can be used .. code-block:: yaml allowed_values: - - - ... For example .. code-block:: yaml parameters: instance_type: type: string label: Instance Type description: Instance type for compute instances constraints: - allowed_values: - m1.small - m1.medium - m1.large allowed_pattern +++++++++++++++ The ``allowed_pattern`` constraint applies to parameters of type ``string``. It specifies a regular expression against which a user-provided parameter value must evaluate at deployment. The syntax of the ``allowed_pattern`` constraint is .. code-block:: yaml allowed_pattern: For example .. code-block:: yaml parameters: user_name: type: string label: User Name description: User name to be configured for the application constraints: - allowed_pattern: "[A-Z]+[a-zA-Z0-9]*" description: User name must start with an uppercase character custom_constraint +++++++++++++++++ The ``custom_constraint`` constraint adds an extra step of validation, generally to check that the specified resource exists in the backend. Custom constraints get implemented by plug-ins and can provide any kind of advanced constraint validation logic. The syntax of the ``custom_constraint`` constraint is .. code-block:: yaml custom_constraint: The ``name`` attribute specifies the concrete type of custom constraint. It corresponds to the name under which the respective validation plugin has been registered in the Orchestration engine. For example .. code-block:: yaml parameters: key_name type: string description: SSH key pair constraints: - custom_constraint: nova.keypair The following section lists the custom constraints and the plug-ins that support them. .. table_from_text:: ../../setup.cfg :header: Name,Plug-in :regex: (.*)=(.*) :start-after: heat.constraints = :end-before: heat.stack_lifecycle_plugins = :sort: .. _hot_spec_pseudo_parameters: Pseudo parameters ----------------- In addition to parameters defined by a template author, Heat also creates three parameters for every stack that allow referential access to the stack's name, stack's identifier and project's identifier. These parameters are named ``OS::stack_name`` for the stack name, ``OS::stack_id`` for the stack identifier and ``OS::project_id`` for the project identifier. These values are accessible via the `get_param`_ intrinsic function, just like user-defined parameters. .. note:: ``OS::project_id`` is available since 2015.1 (Kilo). .. _hot_spec_resources: Resources section ~~~~~~~~~~~~~~~~~ The ``resources`` section defines actual resources that make up a stack deployed from the HOT template (for instance compute instances, networks, storage volumes). Each resource is defined as a separate block in the ``resources`` section with the following syntax .. code-block:: yaml resources: : type: properties: : metadata: depends_on: update_policy: deletion_policy: external_id: condition: resource ID A resource ID which must be unique within the ``resources`` section of the template. type The resource type, such as ``OS::Nova::Server`` or ``OS::Neutron::Port``. This attribute is required. properties A list of resource-specific properties. The property value can be provided in place, or via a function (see :ref:`hot_spec_intrinsic_functions`). This section is optional. metadata Resource-specific metadata. This section is optional. depends_on Dependencies of the resource on one or more resources of the template. See :ref:`hot_spec_resources_dependencies` for details. This attribute is optional. update_policy Update policy for the resource, in the form of a nested dictionary. Whether update policies are supported and what the exact semantics are depends on the type of the current resource. This attribute is optional. deletion_policy Deletion policy for the resource. The allowed deletion policies are ``Delete``, ``Retain``, and ``Snapshot``. Beginning with ``heat_template_version`` ``2016-10-14``, the lowercase equivalents ``delete``, ``retain``, and ``snapshot`` are also allowed. This attribute is optional; the default policy is to delete the physical resource when deleting a resource from the stack. external_id Allows for specifying the resource_id for an existing external (to the stack) resource. External resources can not depend on other resources, but we allow other resources depend on external resource. This attribute is optional. Note: when this is specified, properties will not be used for building the resource and the resource is not managed by Heat. This is not possible to update that attribute. Also resource won't be deleted by heat when stack is deleted. condition Condition for the resource. Which decides whether to create the resource or not. This attribute is optional. Note: Support ``condition`` for resource is added in the Newton version. Depending on the type of resource, the resource block might include more resource specific data. All resource types that can be used in CFN templates can also be used in HOT templates, adapted to the YAML structure as outlined above. The following example demonstrates the definition of a simple compute resource with some fixed property values .. code-block:: yaml resources: my_instance: type: OS::Nova::Server properties: flavor: m1.small image: F18-x86_64-cfntools .. _hot_spec_resources_dependencies: Resource dependencies --------------------- The ``depends_on`` attribute of a resource defines a dependency between this resource and one or more other resources. If a resource depends on just one other resource, the ID of the other resource is specified as string of the ``depends_on`` attribute, as shown in the following example .. code-block:: yaml resources: server1: type: OS::Nova::Server depends_on: server2 server2: type: OS::Nova::Server If a resource depends on more than one other resources, the value of the ``depends_on`` attribute is specified as a list of resource IDs, as shown in the following example .. code-block:: yaml resources: server1: type: OS::Nova::Server depends_on: [ server2, server3 ] server2: type: OS::Nova::Server server3: type: OS::Nova::Server .. _hot_spec_outputs: Outputs section ~~~~~~~~~~~~~~~ The ``outputs`` section defines output parameters that should be available to the user after a stack has been created. This would be, for example, parameters such as IP addresses of deployed instances, or URLs of web applications deployed as part of a stack. Each output parameter is defined as a separate block within the outputs section according to the following syntax .. code-block:: yaml outputs: : description: value: condition: parameter name The output parameter name, which must be unique within the ``outputs`` section of a template. description A short description of the output parameter. This attribute is optional. parameter value The value of the output parameter. This value is usually resolved by means of a function. See :ref:`hot_spec_intrinsic_functions` for details about the functions. This attribute is required. condition To conditionally define an output value. None value will be shown if the condition is False. This attribute is optional. Note: Support ``condition`` for output is added in the Newton version. The example below shows how the IP address of a compute resource can be defined as an output parameter .. code-block:: yaml outputs: instance_ip: description: IP address of the deployed compute instance value: { get_attr: [my_instance, first_address] } Conditions section ~~~~~~~~~~~~~~~~~~ The ``conditions`` section defines one or more conditions which are evaluated based on input parameter values provided when a user creates or updates a stack. The condition can be associated with resources, resource properties and outputs. For example, based on the result of a condition, user can conditionally create resources, user can conditionally set different values of properties, and user can conditionally give outputs of a stack. The ``conditions`` section is defined with the following syntax .. code-block:: yaml conditions: : {expression1} : {expression2} ... condition name The condition name, which must be unique within the ``conditions`` section of a template. expression The expression which is expected to return True or False. Usually, the condition functions can be used as expression to define conditions:: equals get_param not and or yaql Note: In condition functions, you can reference a value from an input parameter, but you cannot reference resource or its attribute. We support referencing other conditions (by condition name) in condition functions. We support 'yaql' as condition function in the Pike version. An example of conditions section definition .. code-block:: yaml conditions: cd1: True cd2: get_param: param1 cd3: equals: - get_param: param2 - yes cd4: not: equals: - get_param: param3 - yes cd5: and: - equals: - get_param: env_type - prod - not: equals: - get_param: zone - beijing cd6: or: - equals: - get_param: zone - shanghai - equals: - get_param: zone - beijing cd7: not: cd4 cd8: and: - cd1 - cd2 cd9: yaql: expression: $.data.services.contains('heat') data: services: get_param: ServiceNames cd10: contains: - 'neutron' - get_param: ServiceNames The example below shows how to associate condition with resources .. code-block:: yaml parameters: env_type: default: test type: string conditions: create_prod_res: {equals : [{get_param: env_type}, "prod"]} resources: volume: type: OS::Cinder::Volume condition: create_prod_res properties: size: 1 The 'create_prod_res' condition evaluates to true if the 'env_type' parameter is equal to 'prod'. In the above sample template, the 'volume' resource is associated with the 'create_prod_res' condition. Therefore, the 'volume' resource is created only if the 'env_type' is equal to 'prod'. The example below shows how to conditionally define an output .. code-block:: yaml outputs: vol_size: value: {get_attr: [my_volume, size]} condition: create_prod_res In the above sample template, the 'vol_size' output is associated with the 'create_prod_res' condition. Therefore, the 'vol_size' output is given corresponding value only if the 'env_type' is equal to 'prod', otherwise the value of the output is None. .. _hot_spec_intrinsic_functions: Intrinsic functions ~~~~~~~~~~~~~~~~~~~ HOT provides a set of intrinsic functions that can be used inside templates to perform specific tasks, such as getting the value of a resource attribute at runtime. The following section describes the role and syntax of the intrinsic functions. Note: these functions can only be used within the "properties" section of each resource or in the outputs section. get_attr -------- The ``get_attr`` function references an attribute of a resource. The attribute value is resolved at runtime using the resource instance created from the respective resource definition. Path based attribute referencing using keys or indexes requires ``heat_template_version`` ``2014-10-16`` or higher. The syntax of the ``get_attr`` function is .. code-block:: yaml get_attr: - - - (optional) - (optional) - ... resource name The resource name for which the attribute needs to be resolved. The resource name must exist in the ``resources`` section of the template. attribute name The attribute name to be resolved. If the attribute returns a complex data structure such as a list or a map, then subsequent keys or indexes can be specified. These additional parameters are used to navigate the data structure to return the desired value. The following example demonstrates how to use the :code:`get_attr` function: .. code-block:: yaml resources: my_instance: type: OS::Nova::Server # ... outputs: instance_ip: description: IP address of the deployed compute instance value: { get_attr: [my_instance, first_address] } instance_private_ip: description: Private IP address of the deployed compute instance value: { get_attr: [my_instance, networks, private, 0] } In this example, if the ``networks`` attribute contained the following data:: {"public": ["2001:0db8:0000:0000:0000:ff00:0042:8329", "1.2.3.4"], "private": ["10.0.0.1"]} then the value of ``get_attr`` function would resolve to ``10.0.0.1`` (first item of the ``private`` entry in the ``networks`` map). From ``heat_template_version``: '2015-10-15' is optional and if is not specified, ``get_attr`` returns dict of all attributes for the given resource excluding *show* attribute. In this case syntax would be next: .. code-block:: yaml get_attr: - get_file -------- The ``get_file`` function returns the content of a file into the template. It is generally used as a file inclusion mechanism for files containing scripts or configuration files. The syntax of ``get_file`` function is .. code-block:: yaml get_file: The ``content key`` is used to look up the ``files`` dictionary that is provided in the REST API call. The Orchestration client command (``heat``) is ``get_file`` aware and populates the ``files`` dictionary with the actual content of fetched paths and URLs. The Orchestration client command supports relative paths and transforms these to the absolute URLs required by the Orchestration API. .. note:: The ``get_file`` argument must be a static path or URL and not rely on intrinsic functions like ``get_param``. the Orchestration client does not process intrinsic functions (they are only processed by the Orchestration engine). The example below demonstrates the ``get_file`` function usage with both relative and absolute URLs .. code-block:: yaml resources: my_instance: type: OS::Nova::Server properties: # general properties ... user_data: get_file: my_instance_user_data.sh my_other_instance: type: OS::Nova::Server properties: # general properties ... user_data: get_file: http://example.com/my_other_instance_user_data.sh The ``files`` dictionary generated by the Orchestration client during instantiation of the stack would contain the following keys: * :file:`file:///path/to/my_instance_user_data.sh` * :file:`http://example.com/my_other_instance_user_data.sh` get_param --------- The ``get_param`` function references an input parameter of a template. It resolves to the value provided for this input parameter at runtime. The syntax of the ``get_param`` function is .. code-block:: yaml get_param: - - (optional) - (optional) - ... parameter name The parameter name to be resolved. If the parameters returns a complex data structure such as a list or a map, then subsequent keys or indexes can be specified. These additional parameters are used to navigate the data structure to return the desired value. The following example demonstrates the use of the ``get_param`` function .. code-block:: yaml parameters: instance_type: type: string label: Instance Type description: Instance type to be used. server_data: type: json resources: my_instance: type: OS::Nova::Server properties: flavor: { get_param: instance_type} metadata: { get_param: [ server_data, metadata ] } key_name: { get_param: [ server_data, keys, 0 ] } In this example, if the ``instance_type`` and ``server_data`` parameters contained the following data:: {"instance_type": "m1.tiny", {"server_data": {"metadata": {"foo": "bar"}, "keys": ["a_key","other_key"]}}} then the value of the property ``flavor`` would resolve to ``m1.tiny``, ``metadata`` would resolve to ``{"foo": "bar"}`` and ``key_name`` would resolve to ``a_key``. get_resource ------------ The ``get_resource`` function references another resource within the same template. At runtime, it is resolved to reference the ID of the referenced resource, which is resource type specific. For example, a reference to a floating IP resource returns the respective IP address at runtime. The syntax of the ``get_resource`` function is .. code-block:: yaml get_resource: The resource ID of the referenced resource is given as single parameter to the ``get_resource`` function. For example .. code-block:: yaml resources: instance_port: type: OS::Neutron::Port properties: ... instance: type: OS::Nova::Server properties: ... networks: port: { get_resource: instance_port } list_join --------- The ``list_join`` function joins a list of strings with the given delimiter. The syntax of the ``list_join`` function is .. code-block:: yaml list_join: - - For example .. code-block:: yaml list_join: [', ', ['one', 'two', 'and three']] This resolve to the string ``one, two, and three``. From HOT version ``2015-10-15`` you may optionally pass additional lists, which will be appended to the previous lists to join. For example:: list_join: [', ', ['one', 'two'], ['three', 'four']] This resolve to the string ``one, two, three, four``. From HOT version ``2015-10-15`` you may optionally also pass non-string list items (e.g json/map/list parameters or attributes) and they will be serialized as json before joining. digest ------ The ``digest`` function allows for performing digest operations on a given value. This function has been introduced in the Kilo release and is usable with HOT versions later than ``2015-04-30``. The syntax of the ``digest`` function is .. code-block:: yaml digest: - - algorithm The digest algorithm. Valid algorithms are the ones provided natively by hashlib (md5, sha1, sha224, sha256, sha384, and sha512) or any one provided by OpenSSL. value The value to digest. This function will resolve to the corresponding hash of the value. For example .. code-block:: yaml # from a user supplied parameter pwd_hash: { digest: ['sha512', { get_param: raw_password }] } The value of the digest function would resolve to the corresponding hash of the value of ``raw_password``. repeat ------ The ``repeat`` function allows for dynamically transforming lists by iterating over the contents of one or more source lists and replacing the list elements into a template. The result of this function is a new list, where the elements are set to the template, rendered for each list item. The syntax of the ``repeat`` function is .. code-block:: yaml repeat: template: