Retire the Qinling project
As announced in openstack-discuss ML[1], Qinling project is retiring in Wallaby cycle. This commit retires this repository as per process deinfed in project-guide[2]. Anyone would like to maintain it again, please revert back this commit and propose the re-adding of Qinling to governance. The community wishes to express our thanks and appreciation to all of those who have contributed to the Qinling project over the years. Depends-On: https://review.opendev.org/c/openstack/project-config/+/764520 Needed-By: https://review.opendev.org/c/openstack/governance/+/764523 [1] http://lists.openstack.org/pipermail/openstack-discuss/2020-November/018638.html [2] https://docs.openstack.org/project-team-guide/repository.html#retiring-a-repository Change-Id: Ic9e422dfbba6d23cf83576ece34bb5071cc89377
This commit is contained in:
parent
ab0a85b605
commit
77474eb9bb
@ -1,9 +0,0 @@
|
||||
[run]
|
||||
branch = True
|
||||
source = qinling
|
||||
omit =
|
||||
qinling/tests/*
|
||||
qinling/db/sqlalchemy/migration/alembic_migrations/versions/*
|
||||
|
||||
[report]
|
||||
ignore_errors = True
|
62
.gitignore
vendored
62
.gitignore
vendored
@ -1,62 +0,0 @@
|
||||
*.py[cod]
|
||||
*.sqlite
|
||||
|
||||
# C extensions
|
||||
*.so
|
||||
|
||||
# Packages
|
||||
*.egg
|
||||
*.eggs
|
||||
*.egg-info
|
||||
dist
|
||||
build
|
||||
.venv
|
||||
eggs
|
||||
parts
|
||||
bin
|
||||
var
|
||||
sdist
|
||||
develop-eggs
|
||||
.installed.cfg
|
||||
lib
|
||||
lib64
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
.coverage
|
||||
.stestr/*
|
||||
.tox
|
||||
nosetests.xml
|
||||
cover/*
|
||||
.testrepository/
|
||||
subunit.log
|
||||
.qinling.conf
|
||||
AUTHORS
|
||||
ChangeLog
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
|
||||
# Mr Developer
|
||||
.mr.developer.cfg
|
||||
.project
|
||||
.pydevproject
|
||||
.idea
|
||||
.DS_Store
|
||||
etc/*.conf
|
||||
etc/qinling.conf.sample
|
||||
*.patch
|
||||
|
||||
#Linux swap file
|
||||
*.swp
|
||||
|
||||
# Files created by releasenotes build
|
||||
releasenotes/build
|
||||
|
||||
# Files created by doc build
|
||||
doc/source/api
|
||||
|
||||
# Files created by API build
|
||||
api-ref/build/
|
3
.mailmap
3
.mailmap
@ -1,3 +0,0 @@
|
||||
# Format is:
|
||||
# <preferred e-mail> <other e-mail 1>
|
||||
# <preferred e-mail> <other e-mail 2>
|
@ -1,3 +0,0 @@
|
||||
[DEFAULT]
|
||||
test_path=${TEST_PATH:-./qinling/tests}
|
||||
top_dir=./
|
89
.zuul.yaml
89
.zuul.yaml
@ -1,89 +0,0 @@
|
||||
- job:
|
||||
name: qinling-tempest
|
||||
parent: devstack-tempest
|
||||
timeout: 7800
|
||||
required-projects:
|
||||
- openstack/devstack-gate
|
||||
- openstack/python-qinlingclient
|
||||
- openstack/qinling
|
||||
- openstack/tempest
|
||||
irrelevant-files:
|
||||
- ^.*\.rst$
|
||||
- ^doc/.*
|
||||
- ^qinling/tests/unit/.*$
|
||||
- ^releasenotes/.*$
|
||||
- ^api-ref/.*$
|
||||
pre-run: playbooks/pre.yaml
|
||||
post-run: playbooks/post.yaml
|
||||
vars:
|
||||
devstack_services:
|
||||
# Disable unneeded services.
|
||||
# These services are enabled in the devstack base job and are not
|
||||
# needed for qinling.
|
||||
etcd3: false
|
||||
peakmem_tracker: false
|
||||
tls-proxy: false
|
||||
g-api: false
|
||||
g-reg: false
|
||||
n-api: false
|
||||
n-api-meta: false
|
||||
n-cauth: false
|
||||
n-cond: false
|
||||
n-cpu: false
|
||||
n-novnc: false
|
||||
n-obj: false
|
||||
n-sch: false
|
||||
placement-api: false
|
||||
q-agt: false
|
||||
q-dhcp: false
|
||||
q-l3: false
|
||||
q-meta: false
|
||||
q-metering: false
|
||||
q-svc: false
|
||||
s-account: false
|
||||
s-container: false
|
||||
s-object: false
|
||||
s-proxy: false
|
||||
c-api: false
|
||||
c-bak: false
|
||||
c-sch: false
|
||||
c-vol: false
|
||||
cinder: false
|
||||
devstack_plugins:
|
||||
qinling: https://opendev.org/openstack/qinling
|
||||
devstack_localrc:
|
||||
TEMPEST_PLUGINS: /opt/stack/qinling
|
||||
USE_PYTHON3: True
|
||||
tox_envlist: all
|
||||
tox_extra_args: --sitepackages
|
||||
tempest_test_regex: ^(qinling_tempest_plugin.)
|
||||
# Qinling's default replicas number is 3, some test cases need
|
||||
# 2 workers, set concurrency to 2 to avoid
|
||||
# "Not enough workers available" error.
|
||||
tempest_concurrency: 2
|
||||
|
||||
- job:
|
||||
name: qinling-tempest-centos7
|
||||
parent: qinling-tempest
|
||||
nodeset: devstack-single-node-centos-7
|
||||
|
||||
- project:
|
||||
templates:
|
||||
- openstack-cover-jobs
|
||||
- openstack-lower-constraints-jobs
|
||||
- openstack-python3-wallaby-jobs
|
||||
- check-requirements
|
||||
- publish-openstack-docs-pti
|
||||
- release-notes-jobs-python3
|
||||
check:
|
||||
jobs:
|
||||
- qinling-tempest:
|
||||
voting: false
|
||||
gate:
|
||||
queue: qinling
|
||||
jobs:
|
||||
- qinling-tempest:
|
||||
voting: false
|
||||
experimental:
|
||||
jobs:
|
||||
- qinling-tempest-centos7
|
@ -1,41 +0,0 @@
|
||||
If you would like to contribute to the development of OpenStack, you must
|
||||
follow the steps in this page:
|
||||
|
||||
https://docs.openstack.org/infra/manual/developers.html
|
||||
|
||||
If you already have a good understanding of how the system works and your
|
||||
OpenStack accounts are set up, you can skip to the development workflow
|
||||
section of this documentation to learn how changes to OpenStack should be
|
||||
submitted for review via the Gerrit tool:
|
||||
|
||||
https://docs.openstack.org/infra/manual/developers.html#development-workflow
|
||||
|
||||
Pull requests submitted through GitHub will be ignored.
|
||||
|
||||
How to file a bug
|
||||
~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Go to
|
||||
`Qinling project storyboard <https://storyboard.openstack.org/#!/project/927>`_,
|
||||
click ``Add story``.
|
||||
* Input the bug title and description, be aware the Markdown formatting is
|
||||
supported, it's useful if you want to paste code or log. After completion,
|
||||
click ``Save Changes``.
|
||||
* In the created story page, add a tag named 'bug' in the ``Tags`` section.
|
||||
* Now, you can see the new bug in
|
||||
`Qinling project dashboard <https://storyboard.openstack.org/#!/board/79>`_.
|
||||
|
||||
How to propose a feature
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
* Go to
|
||||
`Qinling project storyboard <https://storyboard.openstack.org/#!/project/927>`_,
|
||||
click ``Add story``.
|
||||
* Input the feature title and description, be aware the Markdown formatting is
|
||||
supported, it's useful if you want to paste code or log. After completion,
|
||||
click ``Save Changes``.
|
||||
* In the created story page, add a tag named 'feature' in the ``Tags`` section.
|
||||
* You can optionally break the story into different tasks so that the whole
|
||||
story can be tracked properly in different patches.
|
||||
* Now, you can see the new feature in
|
||||
`Qinling project dashboard <https://storyboard.openstack.org/#!/board/79>`_.
|
@ -1,4 +0,0 @@
|
||||
qinling Style Commandments
|
||||
===============================================
|
||||
|
||||
Read the OpenStack Style Commandments https://docs.openstack.org/hacking/latest/
|
176
LICENSE
176
LICENSE
@ -1,176 +0,0 @@
|
||||
|
||||
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.
|
||||
|
30
README.rst
30
README.rst
@ -1,24 +1,10 @@
|
||||
=======
|
||||
Qinling
|
||||
=======
|
||||
This project is no longer maintained.
|
||||
|
||||
.. note::
|
||||
The contents of this repository are still available in the Git
|
||||
source code management system. To see the contents of this
|
||||
repository before it reached its end of life, please check out the
|
||||
previous commit with "git checkout HEAD^1".
|
||||
|
||||
Qinling (is pronounced "tchinling") refers to Qinling Mountains in southern
|
||||
Shaanxi Province in China. The mountains provide a natural boundary between
|
||||
North and South China and support a huge variety of plant and wildlife, some
|
||||
of which is found nowhere else on Earth.
|
||||
|
||||
Qinling is Function as a Service for OpenStack. This project aims to provide a
|
||||
platform to support serverless functions (like AWS Lambda). Qinling supports
|
||||
different container orchestration platforms (Kubernetes/Swarm, etc.) and
|
||||
different function package storage backends (local/Swift/S3) by nature using
|
||||
plugin mechanism.
|
||||
|
||||
* Free software: under the `Apache license <https://www.apache.org/licenses/LICENSE-2.0>`_
|
||||
* Documentation: https://docs.openstack.org/qinling/latest/
|
||||
* Source: https://opendev.org/openstack/qinling
|
||||
* Features: https://storyboard.openstack.org/#!/project/927
|
||||
* Bug Track: https://storyboard.openstack.org/#!/project/927
|
||||
* Release notes: https://docs.openstack.org/releasenotes/qinling/
|
||||
* IRC channel on Freenode: #openstack-qinling
|
||||
For any further questions, please email
|
||||
openstack-discuss@lists.openstack.org or join #openstack-dev on
|
||||
Freenode.
|
||||
|
@ -1,265 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
========
|
||||
Aliases
|
||||
========
|
||||
|
||||
Lists, creates, updates, shows details and deletes aliases.
|
||||
|
||||
Function aliases are like pointers to the specific function versions.
|
||||
By using aliases, you can access the specific version of a function an
|
||||
alias is pointing to without having to know the specific version the alias
|
||||
is pointing to.
|
||||
|
||||
|
||||
Create an alias
|
||||
===============
|
||||
|
||||
.. rest_method:: POST /v1/aliases
|
||||
|
||||
Create ana alias.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: function_id
|
||||
- version: alias_version
|
||||
- description: alias_description
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/aliases/create-alias-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: alias_name
|
||||
- description: alias_description
|
||||
- function_id: function_id
|
||||
- version_number: alias_version
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/aliases/create-alias-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List aliases
|
||||
============
|
||||
|
||||
.. rest_method:: GET /v1/aliases
|
||||
|
||||
List aliases.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: alias_name
|
||||
- description: alias_description
|
||||
- function_id: function_id
|
||||
- version_number: alias_version
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/aliases/list-aliases-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show an alias
|
||||
=============
|
||||
|
||||
.. rest_method:: GET /v1/aliases/{name}
|
||||
|
||||
Show an alias.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- name: path_alias_name
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: alias_name
|
||||
- description: alias_description
|
||||
- function_id: function_id
|
||||
- version_number: alias_version
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/aliases/show-alias-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Update an alias
|
||||
===============
|
||||
|
||||
.. rest_method:: PUT /v1/aliases/{name}
|
||||
|
||||
Update an alias.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- name: path_alias_name
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: alias_name
|
||||
- description: alias_description
|
||||
- function_id: function_id
|
||||
- version_number: alias_version
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/aliases/update-alias-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/aliases/update-alias-response.json
|
||||
:language: text
|
||||
|
||||
|
||||
Delete an alias
|
||||
===============
|
||||
|
||||
.. rest_method:: DELETE /v1/aliases/{name}
|
||||
|
||||
Delete an alias.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- name: path_alias_name
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/aliases/delete-alias-response.text
|
||||
:language: text
|
@ -1,31 +0,0 @@
|
||||
============
|
||||
API Versions
|
||||
============
|
||||
|
||||
Show all enabled API versions
|
||||
|
||||
List all API versions
|
||||
=====================
|
||||
|
||||
.. rest_method:: GET /
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
No parameters needed
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/api-versions/get-versions-response.json
|
||||
:language: javascript
|
@ -1,206 +0,0 @@
|
||||
# -*- 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.
|
||||
#
|
||||
# Qinling documentation build configuration file
|
||||
#
|
||||
# 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
|
||||
|
||||
extensions = [
|
||||
'os_api_ref',
|
||||
'openstackdocstheme',
|
||||
]
|
||||
|
||||
html_theme = 'openstackdocs'
|
||||
html_theme_options = {
|
||||
"sidebar_mode": "toc",
|
||||
}
|
||||
|
||||
# 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 = u'2010-present, OpenStack Foundation'
|
||||
|
||||
# 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'
|
||||
|
||||
# openstackdocstheme options
|
||||
openstackdocs_repo_name = 'openstack/qinling'
|
||||
openstackdocs_use_storyboard = True
|
||||
|
||||
# -- Options for man page output ----------------------------------------------
|
||||
|
||||
# Grouping the document tree for man pages.
|
||||
# List of tuples 'sourcefile', 'target', u'title', u'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
|
||||
# "<project> v<release> 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 <link> 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 = 'qinlingdoc'
|
||||
|
||||
|
||||
# -- 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', 'Qinling.tex',
|
||||
u'OpenStack Function Engine API Documentation',
|
||||
u'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
|
@ -1,308 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
===========
|
||||
Executions
|
||||
===========
|
||||
|
||||
Lists, creates, shows details for, and deletes function executions.
|
||||
|
||||
An execution runs the function and stores the return of the function.
|
||||
The execution gets the returns and the prints.
|
||||
|
||||
|
||||
Create an execution
|
||||
====================
|
||||
|
||||
.. rest_method:: POST /v1/executions
|
||||
|
||||
Create an execution.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: execution_function_id
|
||||
- function_alias: execution_function_alias
|
||||
- input: execution_input
|
||||
- description: execution_description
|
||||
- function_version: execution_function_version
|
||||
- sync: execution_sync
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/executions/create-execution-request.json
|
||||
:language: javascript
|
||||
|
||||
.. literalinclude:: samples/executions/create-execution-alias-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- function_id: execution_function_id
|
||||
- input: execution_input
|
||||
- description: execution_description
|
||||
- function_version: execution_function_version
|
||||
- sync: execution_sync
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/executions/create-execution-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List executions
|
||||
===============
|
||||
|
||||
.. rest_method:: GET /v1/executions
|
||||
|
||||
List executions.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- function_id: execution_function_id
|
||||
- input: execution_input
|
||||
- description: execution_description
|
||||
- function_version: execution_function_version
|
||||
- sync: execution_sync
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/executions/list-executions-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List executions by filters
|
||||
==========================
|
||||
|
||||
.. rest_method:: GET /v1/executions?{filter}={function_id}
|
||||
|
||||
List executions by filters..
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- filter: path_execution_filter
|
||||
- function_id: path_function_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- function_id: execution_function_id
|
||||
- input: execution_input
|
||||
- description: execution_description
|
||||
- function_version: execution_function_version
|
||||
- sync: execution_sync
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/executions/list-executions-filters-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show an execution
|
||||
=================
|
||||
|
||||
.. rest_method:: GET /v1/executions/{execution_id}
|
||||
|
||||
Show an execution.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- execution_id: path_execution_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- function_id: execution_function_id
|
||||
- input: execution_input
|
||||
- description: execution_description
|
||||
- function_version: execution_function_version
|
||||
- sync: execution_sync
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/executions/show-execution-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show an execution log
|
||||
=====================
|
||||
|
||||
.. rest_method:: GET /v1/executions/{execution_id}/log
|
||||
|
||||
Show an execution log.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- execution_id: path_execution_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/executions/show-execution-log-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Delete an execution
|
||||
===================
|
||||
|
||||
.. rest_method:: DELETE /v1/executions/{execution_id}
|
||||
|
||||
Delete an execution.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- execution_id: path_execution_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/executions/delete-execution-response.text
|
||||
:language: text
|
@ -1,524 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
==========
|
||||
Functions
|
||||
==========
|
||||
|
||||
Lists, creates, shows details for, downloads, detaches, updates,
|
||||
scales and deletes functions.
|
||||
|
||||
Function contains the source code that will be executed into the runtime.
|
||||
The source code langage within the function should match the runtime.
|
||||
|
||||
|
||||
Create a function
|
||||
=================
|
||||
|
||||
.. rest_method:: POST /v1/functions
|
||||
|
||||
Create a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- name: function_name
|
||||
- description: function_description
|
||||
- runtime_id: function_runtime_id
|
||||
- code: function_code
|
||||
- entry: function_entry
|
||||
- cpu: function_cpu
|
||||
- memory: function_memory
|
||||
- timeout: function_timeout
|
||||
- package: function_package
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
Package
|
||||
#######
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-package-request.json
|
||||
:language: javascript
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-package-curl-request.text
|
||||
:language: text
|
||||
|
||||
Swift
|
||||
#####
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-swift-request.json
|
||||
:language: javascript
|
||||
|
||||
Image
|
||||
#####
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-image-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: function_name
|
||||
- description: function_description
|
||||
- runtime_id: function_runtime_id
|
||||
- code: function_code
|
||||
- entry: function_entry
|
||||
- cpu: function_cpu
|
||||
- memory: function_memory
|
||||
- timeout: function_timeout
|
||||
- package: function_package
|
||||
- latest_version: function_latest_version
|
||||
- count: function_count
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
Package
|
||||
#######
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-package-response.json
|
||||
:language: javascript
|
||||
|
||||
Swift
|
||||
#####
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-swift-response.json
|
||||
:language: javascript
|
||||
|
||||
Image
|
||||
#####
|
||||
|
||||
.. literalinclude:: samples/functions/create-function-image-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List functions
|
||||
==============
|
||||
|
||||
.. rest_method:: GET /v1/functions
|
||||
|
||||
List functions.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: function_name
|
||||
- description: function_description
|
||||
- runtime_id: function_runtime_id
|
||||
- code: function_code
|
||||
- count: function_count
|
||||
- cpu: function_cpu
|
||||
- memory: function_memory
|
||||
- entry: function_entry
|
||||
- timeout: function_timeout
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/list-functions-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show a function
|
||||
===============
|
||||
|
||||
.. rest_method:: GET /v1/functions/{function_id}
|
||||
|
||||
Show a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: function_name
|
||||
- description: function_description
|
||||
- runtime_id: function_runtime_id
|
||||
- code: function_code
|
||||
- count: function_count
|
||||
- cpu: function_cpu
|
||||
- memory: function_memory
|
||||
- entry: function_entry
|
||||
- timeout: function_timeout
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/show-function-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Update a function
|
||||
=================
|
||||
|
||||
.. rest_method:: PUT /v1/functions/{function_id}
|
||||
|
||||
Update a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- name: function_name_update
|
||||
- description: function_description
|
||||
- runtime_id: function_runtime_id_update
|
||||
- code: function_code_update
|
||||
- entry: function_entry_update
|
||||
- cpu: function_cpu
|
||||
- memory: function_memory
|
||||
- timeout: function_timeout
|
||||
- package: function_package
|
||||
- count: function_count
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
Package
|
||||
#######
|
||||
|
||||
.. literalinclude:: samples/functions/update-function-package-request.json
|
||||
:language: javascript
|
||||
|
||||
.. literalinclude:: samples/functions/update-function-package-curl-request.text
|
||||
:language: text
|
||||
|
||||
Swift
|
||||
#####
|
||||
|
||||
.. literalinclude:: samples/functions/update-function-swift-request.json
|
||||
:language: javascript
|
||||
|
||||
Image
|
||||
#####
|
||||
|
||||
It is not possible to update an ``image`` function.
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: function_name
|
||||
- description: function_description
|
||||
- runtime_id: function_runtime_id
|
||||
- code: function_code
|
||||
- count: function_count
|
||||
- cpu: function_cpu
|
||||
- memory: function_memory
|
||||
- entry: function_entry
|
||||
- timeout: function_timeout
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
Package
|
||||
#######
|
||||
|
||||
.. literalinclude:: samples/functions/update-function-package-response.json
|
||||
:language: javascript
|
||||
|
||||
Swift
|
||||
#####
|
||||
|
||||
.. literalinclude:: samples/functions/update-function-swift-response.json
|
||||
:language: javascript
|
||||
|
||||
Image
|
||||
#####
|
||||
|
||||
None
|
||||
|
||||
|
||||
Download a function
|
||||
===================
|
||||
|
||||
.. rest_method:: GET /v1/functions/{function_id}?download=true
|
||||
|
||||
Download a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/download-function-response.text
|
||||
:language: text
|
||||
|
||||
|
||||
Detach a function from a worker
|
||||
===============================
|
||||
|
||||
.. rest_method:: POST /v1/functions/{function_id}/detach
|
||||
|
||||
Detach a function from a worker.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/detach-function-response.text
|
||||
:language: text
|
||||
|
||||
|
||||
Scale up a function
|
||||
===================
|
||||
|
||||
.. rest_method:: POST /v1/functions/{function_id}/scale_up
|
||||
|
||||
Scale up a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- count: function_scale_count_up
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/scaleup-function-response.text
|
||||
:language: text
|
||||
|
||||
|
||||
Scale down a function
|
||||
=====================
|
||||
|
||||
.. rest_method:: POST /v1/functions/{function_id}/scale_down
|
||||
|
||||
Scale down a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- count: function_scale_count_down
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/scaledown-function-response.text
|
||||
:language: text
|
||||
|
||||
|
||||
Delete a function
|
||||
=================
|
||||
|
||||
.. rest_method:: DELETE /v1/functions/{function_id}
|
||||
|
||||
Delete a function.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/functions/delete-function-response.text
|
||||
:language: text
|
@ -1,17 +0,0 @@
|
||||
:tocdepth: 2
|
||||
|
||||
====================
|
||||
Function Engine API
|
||||
====================
|
||||
|
||||
.. rest_expand_all::
|
||||
|
||||
.. include:: urls.inc
|
||||
.. include:: api-versions.inc
|
||||
.. include:: runtimes.inc
|
||||
.. include:: functions.inc
|
||||
.. include:: executions.inc
|
||||
.. include:: versions.inc
|
||||
.. include:: aliases.inc
|
||||
.. include:: webhooks.inc
|
||||
.. include:: jobs.inc
|
@ -1,279 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=====
|
||||
Jobs
|
||||
=====
|
||||
|
||||
Lists, creates, updates, shows details and deletes jobs.
|
||||
|
||||
Jobs allows to run periodically functions based on time period.
|
||||
Time period is based on cron syntax.
|
||||
|
||||
|
||||
Create a job
|
||||
============
|
||||
|
||||
.. rest_method:: POST /v1/jobs
|
||||
|
||||
Create a job.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- name: job_name
|
||||
- function_id: job_function_id
|
||||
- function_alias: job_function_alias
|
||||
- function_version: job_function_version
|
||||
- function_input: job_input
|
||||
- pattern: job_pattern
|
||||
- count: job_count
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/jobs/create-job-request.json
|
||||
:language: javascript
|
||||
|
||||
.. literalinclude:: samples/jobs/create-job-alias-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: job_name
|
||||
- function_id: job_function_id
|
||||
- function_version: job_function_version
|
||||
- function_input: job_input
|
||||
- pattern: job_pattern
|
||||
- count: job_count
|
||||
- first_execution_time: job_first_execution
|
||||
- next_execution_time: job_next_execution
|
||||
- status: status
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/jobs/create-job-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List jobs
|
||||
=========
|
||||
|
||||
.. rest_method:: GET /v1/jobs
|
||||
|
||||
List jobs.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: job_name
|
||||
- function_id: job_function_id
|
||||
- function_version: job_function_version
|
||||
- function_input: job_input
|
||||
- pattern: job_pattern
|
||||
- count: job_count
|
||||
- first_execution_time: job_first_execution
|
||||
- next_execution_time: job_next_execution
|
||||
- status: status
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/jobs/list-jobs-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show a job
|
||||
==========
|
||||
|
||||
.. rest_method:: GET /v1/jobs/{job_id}
|
||||
|
||||
Show a job.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- job_id: path_job_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: job_name
|
||||
- function_id: job_function_id
|
||||
- function_version: job_function_version
|
||||
- function_input: job_input
|
||||
- pattern: job_pattern
|
||||
- count: job_count
|
||||
- first_execution_time: job_first_execution
|
||||
- next_execution_time: job_next_execution
|
||||
- status: status
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/jobs/show-job-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Update a job
|
||||
============
|
||||
|
||||
.. rest_method:: PUT /v1/jobs/{job_id}
|
||||
|
||||
Update a job.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- job_id: path_job_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: job_name
|
||||
- function_input: job_input
|
||||
- pattern: job_pattern_update
|
||||
- next_execution_time: job_next_execution_update
|
||||
- status: job_status_update
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/jobs/update-job-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/jobs/update-job-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Delete a job
|
||||
============
|
||||
|
||||
.. rest_method:: DELETE /v1/jobs/{job_id}
|
||||
|
||||
Delete a job.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- job_id: path_job_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/jobs/delete-job-response.text
|
||||
:language: text
|
@ -1,517 +0,0 @@
|
||||
####################
|
||||
# Header Variables #
|
||||
####################
|
||||
|
||||
x-auth-token:
|
||||
description: |
|
||||
Token used to identify the user from Keystone
|
||||
in: header
|
||||
required: false
|
||||
type: string
|
||||
|
||||
####################
|
||||
# Path Variables #
|
||||
####################
|
||||
|
||||
path_alias_name:
|
||||
description: |
|
||||
Name of the alias
|
||||
in: path
|
||||
required: true
|
||||
type: string
|
||||
|
||||
path_execution_filter:
|
||||
description: |
|
||||
Execution filter, e.g. "``function_id``, ``function_version``, etc..."
|
||||
in: path
|
||||
required: true
|
||||
type: string
|
||||
|
||||
path_execution_id:
|
||||
description: |
|
||||
ID for the execution
|
||||
in: path
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
path_function_id:
|
||||
description: |
|
||||
ID for the function
|
||||
in: path
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
path_job_id:
|
||||
description: |
|
||||
ID for the job
|
||||
in: path
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
path_runtime_id:
|
||||
description: |
|
||||
ID for the runtime
|
||||
in: path
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
path_version_number:
|
||||
description: |
|
||||
Version number
|
||||
in: path
|
||||
required: true
|
||||
type: integer
|
||||
|
||||
path_webhook_id:
|
||||
description: |
|
||||
ID for the webhook
|
||||
in: path
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
####################
|
||||
# Body Variables #
|
||||
####################
|
||||
|
||||
alias_description:
|
||||
description: |
|
||||
Description for the alias
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
alias_name:
|
||||
description: |
|
||||
Name of the alias
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
alias_version:
|
||||
description: |
|
||||
Version of the function to point the alias
|
||||
in: body
|
||||
required: true
|
||||
type: integer
|
||||
|
||||
created_at:
|
||||
description: |
|
||||
Date / Time when resource was created
|
||||
in: body
|
||||
required: false
|
||||
type: datestamp
|
||||
|
||||
execution_description:
|
||||
description: |
|
||||
Description for the execution
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
execution_function_alias:
|
||||
description: |
|
||||
Alias name of the function (if an alias has been created)
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
execution_function_id:
|
||||
description: |
|
||||
ID for the function, if an alias is used then ``function_id`` is
|
||||
not required
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
execution_function_version:
|
||||
description: |
|
||||
Version of the function to execute, default is ``0``. If an alias is
|
||||
used then ``function_version`` is not required
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
execution_input:
|
||||
description: |
|
||||
Input data to pass to the function, e.g. ``{"name": "foo"}``
|
||||
in: body
|
||||
required: false
|
||||
type: JSON
|
||||
|
||||
execution_sync:
|
||||
description: |
|
||||
Execution is sync or async, default is ``true``
|
||||
in: body
|
||||
required: false
|
||||
type: bool
|
||||
|
||||
function_code:
|
||||
description: |
|
||||
Source code type, e.g. "``package``", "``swift``", "``image``"
|
||||
in: body
|
||||
required: true
|
||||
type: JSON
|
||||
|
||||
function_code_update:
|
||||
description: |
|
||||
Source code type, e.g. "``package``", "``swift``", "``image``"
|
||||
|
||||
Package function can't have this value updated.
|
||||
in: body
|
||||
required: false
|
||||
type: JSON
|
||||
|
||||
function_count:
|
||||
description: |
|
||||
Total of time the function has been executed
|
||||
in: body
|
||||
required: true
|
||||
type: integer
|
||||
|
||||
function_cpu:
|
||||
description: |
|
||||
Max CPU usage during the execution
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
function_description:
|
||||
description: |
|
||||
Description for the function
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
function_entry:
|
||||
description: |
|
||||
Function entry point, e.g. "``hello_world.main``"
|
||||
|
||||
Not required if the source is "``image``"
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
function_entry_update:
|
||||
description: |
|
||||
Function entry point, e.g. "``hello_world.main``"
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
function_id:
|
||||
description: |
|
||||
ID for the function
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
function_latest_version:
|
||||
description: |
|
||||
Latest version created based on this function
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
function_memory:
|
||||
description: |
|
||||
Max memory usage during the execution
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
function_name:
|
||||
description: |
|
||||
Function name
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
function_name_update:
|
||||
description: |
|
||||
Function name
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
function_package:
|
||||
description: |
|
||||
Package to upload, e.g. "``package=@./hello_world.zip``"
|
||||
|
||||
Required only if '``"code": {"source": "package"}``'
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
function_runtime_id:
|
||||
description: |
|
||||
Runtime ID used by the function
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
function_runtime_id_update:
|
||||
description: |
|
||||
Runtime ID used by the function
|
||||
in: body
|
||||
required: false
|
||||
type: uuid
|
||||
|
||||
function_scale_count_down:
|
||||
description: |
|
||||
Number of workers to scale down a function, default is ``1``
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
function_scale_count_up:
|
||||
description: |
|
||||
Number of workers to scale up a function, default is ``1``
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
function_timeout:
|
||||
description: |
|
||||
Timeout in second before the execution fails
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
id:
|
||||
description: |
|
||||
ID for the resource
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
job_count:
|
||||
description: |
|
||||
Number of time the function should be executed, default is ``unlimited``
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
job_first_execution:
|
||||
description: |
|
||||
First time the function will be executed
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
job_function_alias:
|
||||
description: |
|
||||
Alias name of the function (if an alias has been created)
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
job_function_id:
|
||||
description: |
|
||||
ID for the function, if an alias is used then ``function_id`` is
|
||||
not required
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
job_function_version:
|
||||
description: |
|
||||
Version of the function to execute, default is ``0``. If an alias is
|
||||
used then ``function_version`` is not required
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
job_input:
|
||||
description: |
|
||||
Input data to pass to the function, e.g. ``{"name": "foo"}``
|
||||
in: body
|
||||
required: false
|
||||
type: JSON
|
||||
|
||||
job_name:
|
||||
description: |
|
||||
Name of the job
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
job_next_execution:
|
||||
description: |
|
||||
Next time the function will be executed
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
job_next_execution_update:
|
||||
description: |
|
||||
Next time the function will be executed, e.g. "``2019-06-07 22:41:00``"
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
job_pattern:
|
||||
description: |
|
||||
Cron pattern, e.g. "``* * * * *``" is equal to every minutes
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
job_pattern_update:
|
||||
description: |
|
||||
Cron pattern, e.g. "``* * * * *``" is equal to every minutes
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
job_status_update:
|
||||
description: |
|
||||
Status of the job, e.g. "``paused``, ``running``, ``canceled``, ``done``"
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
project_id:
|
||||
description: |
|
||||
ID for the project that owns the resource
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
runtime_capacity:
|
||||
description: |
|
||||
Number of workers available and currently used
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
runtime_description:
|
||||
description: |
|
||||
Description for the runtime
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
runtime_id:
|
||||
description: |
|
||||
ID for the runtime
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
runtime_image:
|
||||
description: |
|
||||
Docker image used to build the runtime, e.g. "openstackqinling/python3-runtime"
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
runtime_image_update:
|
||||
description: |
|
||||
Docker image used to build the runtime, e.g. "openstackqinling/python3-runtime"
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
runtime_is_public:
|
||||
description: |
|
||||
Make the runtime public or not, if public then the runtime will be
|
||||
available for all the tenant.
|
||||
The runtime is public by default.
|
||||
in: body
|
||||
required: false
|
||||
type: bool
|
||||
|
||||
runtime_name:
|
||||
description: |
|
||||
Runtime name
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
||||
|
||||
runtime_name_update:
|
||||
description: |
|
||||
Runtime name
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
runtime_trusted:
|
||||
description: |
|
||||
Define the runtime as trusted or not, depending the value Kubernetes
|
||||
will apply some annotations like ``io.kubernetes.cri-o.TrustedSandbox``
|
||||
in the pod specification to choose the underlying container runtime.
|
||||
The runtime is trusted by default.
|
||||
in: body
|
||||
required: false
|
||||
type: bool
|
||||
|
||||
status:
|
||||
description: |
|
||||
Status of the resource
|
||||
in: body
|
||||
required: true
|
||||
type: enum
|
||||
|
||||
updated_at:
|
||||
description: |
|
||||
Date / Time when resource last updated
|
||||
in: body
|
||||
required: false
|
||||
type: datestamp
|
||||
|
||||
version_count:
|
||||
description: |
|
||||
Total of time the version has been executed
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
version_description:
|
||||
description: |
|
||||
Description for the version
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
version_number:
|
||||
description: |
|
||||
Version of the function
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
webhook_description:
|
||||
description: |
|
||||
Description for the webhook
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
webhook_function_alias:
|
||||
description: |
|
||||
Alias name of the function (if an alias has been created)
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
||||
webhook_function_id:
|
||||
description: |
|
||||
ID for the function, if an alias is used then ``function_id`` is
|
||||
not required
|
||||
in: body
|
||||
required: true
|
||||
type: uuid
|
||||
|
||||
webhook_function_version:
|
||||
description: |
|
||||
Version of the function
|
||||
in: body
|
||||
required: false
|
||||
type: integer
|
||||
|
||||
webhook_url:
|
||||
description: |
|
||||
Webhook URL
|
||||
in: body
|
||||
required: true
|
||||
type: string
|
@ -1,317 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=========
|
||||
Runtimes
|
||||
=========
|
||||
|
||||
Lists, creates, updates, shows details and deletes runtimes.
|
||||
|
||||
The runtime is programming language support. Each runtime is encapsulated
|
||||
in a container image which is used for creating the runtime container.
|
||||
Qinling communicates with the container by sending HTTP requests and runs
|
||||
user function inside.
|
||||
|
||||
|
||||
Create a runtime
|
||||
================
|
||||
|
||||
.. rest_method:: POST /v1/runtimes
|
||||
|
||||
Create a runtime.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- name: runtime_name
|
||||
- image: runtime_image
|
||||
- description: runtime_description
|
||||
- is_public: runtime_is_public
|
||||
- trusted: runtime_trusted
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/create-runtime-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: runtime_name
|
||||
- image: runtime_image
|
||||
- description: runtime_description
|
||||
- is_public: runtime_is_public
|
||||
- trusted: runtime_trusted
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/create-runtime-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List runtimes
|
||||
=============
|
||||
|
||||
.. rest_method:: GET /v1/runtimes
|
||||
|
||||
List runtimes.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: runtime_name
|
||||
- image: runtime_image
|
||||
- description: runtime_description
|
||||
- is_public: runtime_is_public
|
||||
- trusted: runtime_trusted
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/list-runtimes-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show a runtime
|
||||
==============
|
||||
|
||||
.. rest_method:: GET /v1/runtimes/{runtime_id}
|
||||
|
||||
Show a runtime.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- runtime_id: path_runtime_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: runtime_name
|
||||
- image: runtime_image
|
||||
- description: runtime_description
|
||||
- is_public: runtime_is_public
|
||||
- trusted: runtime_trusted
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/show-runtime-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show a runtime pool
|
||||
===================
|
||||
|
||||
.. rest_method:: GET /v1/runtimes/{runtime_id}/pool
|
||||
|
||||
Show a runtime pool.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- runtime_id: runtime_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- name: id
|
||||
- capacity: runtime_capacity
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/show-runtime-pool-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Update a runtime
|
||||
================
|
||||
|
||||
.. rest_method:: PUT /v1/runtimes/{runtime_id}
|
||||
|
||||
Update a runtime.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- runtime_id: path_runtime_id
|
||||
- name: runtime_name_update
|
||||
- image: runtime_image_update
|
||||
- description: runtime_description
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/update-runtime-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- name: runtime_name
|
||||
- image: runtime_image
|
||||
- description: runtime_description
|
||||
- is_public: runtime_is_public
|
||||
- trusted: runtime_trusted
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/update-runtime-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Delete a runtime
|
||||
================
|
||||
|
||||
.. rest_method:: DELETE /v1/runtimes/{runtime_id}
|
||||
|
||||
Delete a runtime.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- runtime_id: path_runtime_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/runtimes/delete-runtime-response.text
|
||||
:language: text
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"name": "hw-v2",
|
||||
"function_version": 2,
|
||||
"description": "Hello World, version 2"
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"name": "hw-v2",
|
||||
"created_at": "2019-06-07 02:07:06.572982",
|
||||
"updated_at": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"function_version": 2,
|
||||
"description": "Hello World, version 2"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to delete function_alias hw-v2 has been accepted.
|
@ -1,20 +0,0 @@
|
||||
[
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"name": "hw-v2",
|
||||
"created_at": "2019-06-07 02:07:06",
|
||||
"updated_at": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"function_version": 2,
|
||||
"description": "Hello World, version 2"
|
||||
},
|
||||
{
|
||||
"function_id": "ab003f7a-402a-4a2e-8f00-2f848bde800d",
|
||||
"name": "hq-v1",
|
||||
"created_at": "2019-06-07 02:15:16",
|
||||
"updated_at": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"function_version": 37,
|
||||
"description": "Hello Qinling, version 37"
|
||||
}
|
||||
]
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"name": "hw-v2",
|
||||
"created_at": "2019-06-07 02:07:06",
|
||||
"updated_at": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"function_version": 2,
|
||||
"description": "Hello World, version 2"
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"function_id": "ab003f7a-402a-4a2e-8f00-2f848bde800d",
|
||||
"name": "hq-v1",
|
||||
"function_version": 38,
|
||||
"description": "Hello Qinling, version 38"
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"function_id": "ab003f7a-402a-4a2e-8f00-2f848bde800d",
|
||||
"name": "hq-v1",
|
||||
"created_at": "2019-06-07 02:15:16",
|
||||
"updated_at": "2019-06-07 02:32:14.097418",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"function_version": 38,
|
||||
"description": "Hello Qinling, version 38"
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"status": "CURRENT",
|
||||
"id": "v1.0",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://api-uat.ormuco.com:7070/v1",
|
||||
"target": "v1",
|
||||
"rel": "self"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
{
|
||||
"description": "Execution of a function based on an alias",
|
||||
"sync": true,
|
||||
"input": "{\"name\": \"foo\"}",
|
||||
"function_alias": "hq-production-function"
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"description": "The world should know Foo!",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"input": "{\"name\": \"foo\"}",
|
||||
"function_id": "3e0e5bf8-ee7a-4fc8-9641-d1cbd9c60f46"
|
||||
}
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"status": "success",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": "The world should know Foo!",
|
||||
"updated_at": "2019-06-06 23:13:37",
|
||||
"created_at": "2019-06-06 23:13:37",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"result": "{\"duration\": 0.044, \"output\": \"Hello, bar\"}",
|
||||
"input": "{\"name\": \"foo\"}",
|
||||
"function_id": "3e0e5bf8-ee7a-4fc8-9641-d1cbd9c60f46",
|
||||
"id": "62033613-6f02-4a6d-b569-7ba7fd18f8f7"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to delete execution 9b6d0e80-7c4b-49d1-bf11-f16999433337 has been accepted.
|
@ -1,28 +0,0 @@
|
||||
[
|
||||
{
|
||||
"status": "success",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": null,
|
||||
"created_at": "2019-06-06 21:05:39",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"result": "{\"duration\": 0.074, \"output\": \"Hello, World\"}",
|
||||
"input": null,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"updated_at": "2019-06-06 21:05:41",
|
||||
"id": "7dbb2ebc-9096-4e8e-9ded-0af8cd6cef60"
|
||||
},
|
||||
{
|
||||
"status": "success",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": null,
|
||||
"created_at": "2019-06-06 23:50:41",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"result": "{\"duration\": 0.183, \"output\": \"Hello, bar\"}",
|
||||
"input": "{\"name\": \"bar\"}",
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"updated_at": "2019-06-06 23:50:42",
|
||||
"id": "9b6d0e80-7c4b-49d1-bf11-f16999433337"
|
||||
}
|
||||
]
|
@ -1,28 +0,0 @@
|
||||
[
|
||||
{
|
||||
"status": "success",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": null,
|
||||
"created_at": "2019-06-06 21:05:39",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"result": "{\"duration\": 0.074, \"output\": \"Hello, World\"}",
|
||||
"input": null,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"updated_at": "2019-06-06 21:05:41",
|
||||
"id": "7dbb2ebc-9096-4e8e-9ded-0af8cd6cef60"
|
||||
},
|
||||
{
|
||||
"status": "success",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": "The world should know Foo!",
|
||||
"created_at": "2019-06-06 23:15:30",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"result": "{\"duration\": 0.032, \"output\": \"Hello, bar\"}",
|
||||
"input": "{\"name\": \"bar\"}",
|
||||
"function_id": "3e0e5bf8-ee7a-4fc8-9641-d1cbd9c60f46",
|
||||
"updated_at": "2019-06-06 23:15:30",
|
||||
"id": "347bb366-95c9-49ab-8179-424c7b707124"
|
||||
}
|
||||
]
|
@ -1,3 +0,0 @@
|
||||
Start execution: 347bb366-95c9-49ab-8179-424c7b707124
|
||||
Hello, World!
|
||||
Finished execution: 347bb366-95c9-49ab-8179-424c7b707124
|
@ -1,13 +0,0 @@
|
||||
{
|
||||
"status": "success",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": "The world should know Foo!",
|
||||
"created_at": "2019-06-06 23:15:30",
|
||||
"sync": true,
|
||||
"function_version": 0,
|
||||
"result": "{\"duration\": 0.032, \"output\": \"Hello, bar\"}",
|
||||
"input": "{\"name\": \"bar\"}",
|
||||
"function_id": "3e0e5bf8-ee7a-4fc8-9641-d1cbd9c60f46",
|
||||
"updated_at": "2019-06-06 23:15:30",
|
||||
"id": "347bb366-95c9-49ab-8179-424c7b707124"
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"code": {
|
||||
"source": "image",
|
||||
"image": "docker-registry/hello-world"
|
||||
},
|
||||
"description": "Hello World from Docker image",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"code": {
|
||||
"source": "image",
|
||||
"image": "docker-registry/hello-world"
|
||||
},
|
||||
"description": "Hello World from Docker image",
|
||||
"created_at": "2019-06-10 01:51:29.515424",
|
||||
"updated_at": null,
|
||||
"latest_version": 0,
|
||||
"id": "28de9573-2397-4fa1-b627-60124395d1ff",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
curl -X POST http://127.0.0.1:7070/v1/functions \
|
||||
-H "X-Auth-Token: gAAAAAB..." \
|
||||
-F name=hello_world \
|
||||
-F runtime_id=cbd9e85f-a1b2-4120-a2c7-57c90809ce7d \
|
||||
-F code='{"source": "package"}' \
|
||||
-F entry=hello_world.main \
|
||||
-F cpu=200 \
|
||||
-F memory=33000000 \
|
||||
-F description="Hello World function based on a package" \
|
||||
-F timeout=15 \
|
||||
-F package=@/home/dev/hello_world.zip
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"code": {
|
||||
"source": "package"
|
||||
},
|
||||
"description": "Hello World function from local package archive",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"code": {
|
||||
"source": "package",
|
||||
"md5sum": "e439d00bab001d7ad7d1e0e451567699"
|
||||
},
|
||||
"description": "Hello World function from local package archive",
|
||||
"created_at": "2019-06-10 01:15:02.108208",
|
||||
"updated_at": null,
|
||||
"latest_version": 0,
|
||||
"id": "00f3b8ef-e794-4897-8a34-fa6a489d4ede",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"code": {
|
||||
"source": "swift",
|
||||
"swift": {
|
||||
"object": "hello_world.py",
|
||||
"container": "functions"
|
||||
}
|
||||
},
|
||||
"description": "Hello World function from Swift",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"code": {
|
||||
"source": "swift",
|
||||
"swift": {
|
||||
"object": "hello_world.py",
|
||||
"container": "functions"
|
||||
}
|
||||
},
|
||||
"description": "Hello World function from Swift",
|
||||
"created_at": "2019-06-10 01:43:53.909146",
|
||||
"updated_at": null,
|
||||
"latest_version": 0,
|
||||
"id": "1127cb1a-938e-4262-b22f-d88f182624f6",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to delete function ff64180b-d41b-420e-9846-ee706c1548b0 has been accepted.
|
@ -1 +0,0 @@
|
||||
Request to detach function f8e7357f-af4a-4448-87d8-6fed4c7db5b5 has been accepted.
|
@ -1 +0,0 @@
|
||||
Code package downloaded to /root/f8e7357f-af4a-4448-87d8-6fed4c7db5b5.zip
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"count": 7,
|
||||
"code": "{\"source\": \"package\", \"md5sum\": \"648926b8a9705d3bd77cefdeca46a254\"}",
|
||||
"description": "Function Hello World :)",
|
||||
"created_at": "2019-06-06 18:59:02",
|
||||
"timeout": 10,
|
||||
"updated_at": null,
|
||||
"cpu": 250,
|
||||
"memory_size": 134217728,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"entry": "hello_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "22f62e09-e361-4481-b2da-22e3a4ed9a43",
|
||||
"name": "hello_world"
|
||||
},
|
||||
{
|
||||
"count": 0,
|
||||
"code": "{\"source\": \"package\", \"md5sum\": \"e0309c12d355352cc92b5433bf293210\"}",
|
||||
"description": "Function Goodbye World :(",
|
||||
"created_at": "2019-06-06 19:04:30",
|
||||
"timeout": 5,
|
||||
"updated_at": "2019-06-06 19:04:30",
|
||||
"cpu": 100,
|
||||
"memory_size": 33554432,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"entry": "goodbye_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "2324a256-a249-4cec-968b-6ca7f99d805b",
|
||||
"name": "goodbye_world"
|
||||
}
|
||||
]
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"count": 6
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to scale down function 3e0e5bf8-ee7a-4fc8-9641-d1cbd9c60f46 has been accepted.
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"count": 6
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to scale up function 3e0e5bf8-ee7a-4fc8-9641-d1cbd9c60f46 has been accepted.
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"count": 7,
|
||||
"code": "{\"source\": \"package\", \"md5sum\": \"648926b8a9705d3bd77cefdeca46a254\"}",
|
||||
"description": "Function Hello World :)",
|
||||
"created_at": "2019-06-06 18:59:02",
|
||||
"timeout": 10,
|
||||
"updated_at": null,
|
||||
"cpu": 250,
|
||||
"memory_size": 134217728,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"entry": "hello_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "22f62e09-e361-4481-b2da-22e3a4ed9a43",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
curl -X PUT http://127.0.0.1:7070/v1/functions/{function_id} \
|
||||
-H "X-Auth-Token: gAAAAAB..." \
|
||||
-F name=hello_world \
|
||||
-F runtime_id=cbd9e85f-a1b2-4120-a2c7-57c90809ce7d \
|
||||
-F entry=hello_world.main \
|
||||
-F cpu=200 \
|
||||
-F memory=33000000 \
|
||||
-F description="Hello World function based on a package" \
|
||||
-F timeout=15 \
|
||||
-F package=@/home/dev/hello_world.zip
|
@ -1,9 +0,0 @@
|
||||
{
|
||||
"description": "Hello World function from local package archive",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"code": {
|
||||
"source": "package",
|
||||
"md5sum": "e439d00bab001d7ad7d1e0e451567699"
|
||||
},
|
||||
"description": "Hello World function from local package archive",
|
||||
"created_at": "2019-06-10 01:15:02.108208",
|
||||
"updated_at": "2019-06-10 01:15:02.115438",
|
||||
"latest_version": 0,
|
||||
"id": "00f3b8ef-e794-4897-8a34-fa6a489d4ede",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
{
|
||||
"code": {
|
||||
"source": "swift",
|
||||
"swift": {
|
||||
"object": "hello_world.py",
|
||||
"container": "functions"
|
||||
}
|
||||
},
|
||||
"description": "Hello World function from Swift",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"code": {
|
||||
"source": "swift",
|
||||
"swift": {
|
||||
"object": "hello_world.py",
|
||||
"container": "functions"
|
||||
}
|
||||
},
|
||||
"description": "Hello World function from Swift",
|
||||
"created_at": "2019-06-10 01:28:38",
|
||||
"updated_at": "2019-06-10 02:22:27.663257",
|
||||
"latest_version": 0,
|
||||
"id": "ecdf3b0c-ac37-4ba8-a02c-5d60cf86cc8b",
|
||||
"memory_size": 33554432,
|
||||
"timeout": 15,
|
||||
"entry": "hello_world.main",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"cpu": 200,
|
||||
"runtime_id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"name": "hello_world"
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"count": 5,
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"function_alias": "hq-production-function"
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"count": 5,
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"function_version": 2,
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5"
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"count": 5,
|
||||
"status": "running",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"created_at": "2019-06-07 19:11:08.375646",
|
||||
"updated_at": null,
|
||||
"function_version": 2,
|
||||
"first_execution_time": "2019-06-07 19:12:00",
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"id": "dc7ef571-1f8d-4dc8-a659-fc86f80dd44c",
|
||||
"next_execution_time": "2019-06-07 19:12:00"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to delete job 697546a1-090c-48de-8ecd-ef4cdb9da7a9 has been accepted.
|
@ -1,32 +0,0 @@
|
||||
[
|
||||
{
|
||||
"count": null,
|
||||
"status": "running",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"name": "every-minute",
|
||||
"pattern": "0 0 * * SUN",
|
||||
"created_at": "2019-06-07 19:18:50",
|
||||
"updated_at": "2019-06-07 19:29:59",
|
||||
"id": "697546a1-090c-48de-8ecd-ef4cdb9da7a9",
|
||||
"first_execution_time": "2019-06-07 19:19:00",
|
||||
"function_input": null,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"function_version": 2,
|
||||
"next_execution_time": "2019-06-07 19:31:00"
|
||||
},
|
||||
{
|
||||
"count": 0,
|
||||
"status": "done",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"created_at": "2019-06-07 19:21:33",
|
||||
"updated_at": "2019-06-07 19:25:59",
|
||||
"id": "4e435c84-ab06-4ff5-8f05-b7ffe25c1224",
|
||||
"first_execution_time": "2019-06-07 19:22:00",
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"function_version": 0,
|
||||
"next_execution_time": "2019-06-07 19:26:00"
|
||||
}
|
||||
]
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"status": "done",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"created_at": "2019-06-07 19:21:33",
|
||||
"updated_at": "2019-06-07 19:25:59",
|
||||
"id": "4e435c84-ab06-4ff5-8f05-b7ffe25c1224",
|
||||
"first_execution_time": "2019-06-07 19:22:00",
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"function_version": 0,
|
||||
"next_execution_time": "2019-06-07 19:26:00"
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"status": "paused",
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"next_execution_time": "2019-06-07 22:41:00"
|
||||
}
|
@ -1,15 +0,0 @@
|
||||
{
|
||||
"count": null,
|
||||
"status": "paused",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"name": "every-minute",
|
||||
"pattern": "* * * * *",
|
||||
"created_at": "2019-06-07 19:18:50",
|
||||
"updated_at": "2019-06-07 19:41:20.108254",
|
||||
"function_version": 2,
|
||||
"first_execution_time": "2019-06-07 19:19:00",
|
||||
"function_input": "{\"name\": \"Foo\"}",
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"id": "697546a1-090c-48de-8ecd-ef4cdb9da7a9",
|
||||
"next_execution_time": "2019-06-07 22:41:00"
|
||||
}
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"name": "python3",
|
||||
"description": "Runtime Python3.7 ready for production.",
|
||||
"image": "openstackqinling/python3-runtime",
|
||||
"is_public:": true,
|
||||
"trusted": true
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"status": "creating",
|
||||
"created_at": "2019-06-06 15:33:23.178645",
|
||||
"description": "Runtime Python3.7 ready for production.",
|
||||
"image": "openstackqinling/python3-runtime",
|
||||
"updated_at": null,
|
||||
"is_public": true,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "b351d3b6-8ccb-4f5b-b70f-58c72298a2ac",
|
||||
"trusted": true,
|
||||
"name": "python3"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to delete runtime 63f8f51d-7270-4545-abdd-f767ef8b1882 has been accepted.
|
@ -1,38 +0,0 @@
|
||||
[
|
||||
{
|
||||
"status": "available",
|
||||
"description": "Runtime Python3.7 ready for production.",
|
||||
"image": "openstackqinling/python3-runtime",
|
||||
"updated_at": "2019-05-30 14:40:50",
|
||||
"created_at": "2019-05-30 14:40:41",
|
||||
"is_public": true,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"trusted": true,
|
||||
"name": "python3"
|
||||
},
|
||||
{
|
||||
"status": "available",
|
||||
"description": "Runtime Python2.7 ready for production.",
|
||||
"image": "openstackqinling/python2-runtime",
|
||||
"updated_at": "2019-06-03 19:01:37",
|
||||
"created_at": "2019-06-03 19:00:33",
|
||||
"is_public": true,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "c4682a12-1a82-424d-b299-9b238fb6b694",
|
||||
"trusted": true,
|
||||
"name": "python2.7"
|
||||
},
|
||||
{
|
||||
"status": "available",
|
||||
"description": "Runtime Node.js 8.10 ready for production.",
|
||||
"image": "openstackqinling/nodejs-runtime",
|
||||
"updated_at": "2019-06-03 19:30:31",
|
||||
"created_at": "2019-06-03 19:30:06",
|
||||
"is_public": true,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "d3780197-d3a8-4961-8228-354ac7592e48",
|
||||
"trusted": true,
|
||||
"name": "nodejs8.10"
|
||||
}
|
||||
]
|
@ -1,7 +0,0 @@
|
||||
{
|
||||
"capacity": {
|
||||
"available": 3,
|
||||
"total": 3
|
||||
},
|
||||
"name": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d"
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"status": "available",
|
||||
"description": "Runtime Python3.7 ready for production.",
|
||||
"image": "openstackqinling/python3-runtime",
|
||||
"updated_at": "2019-05-30 14:40:50",
|
||||
"created_at": "2019-05-30 14:40:41",
|
||||
"is_public": true,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"trusted": true,
|
||||
"name": "python3"
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "python3",
|
||||
"description": "Runtime Python3.7 ready for production.",
|
||||
"image": "openstackqinling/python3-runtime"
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
{
|
||||
"status": "available",
|
||||
"description": "Runtime Python3.7 ready for production.",
|
||||
"image": "openstackqinling/python3-runtime",
|
||||
"updated_at": "2019-05-30 14:40:50",
|
||||
"created_at": "2019-06-06 16:40:31",
|
||||
"is_public": true,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "cbd9e85f-a1b2-4120-a2c7-57c90809ce7d",
|
||||
"trusted": true,
|
||||
"name": "python3"
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
{
|
||||
"description": "This version is ready for production"
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"version_number": 1,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "This version is ready for production",
|
||||
"created_at": "2019-06-07 01:23:16.278205",
|
||||
"updated_at": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "45ebdcbf-6e2f-46c9-bd58-7f6ae01ecfcc"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to detach function f8e7357f-af4a-4448-87d8-6fed4c7db5b5(version 1) has been accepted.
|
@ -1,22 +0,0 @@
|
||||
[
|
||||
{
|
||||
"count": 0,
|
||||
"version_number": 1,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": "This version is ready for production",
|
||||
"created_at": "2019-06-07 01:23:16",
|
||||
"updated_at": null,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"id": "45ebdcbf-6e2f-46c9-bd58-7f6ae01ecfcc"
|
||||
},
|
||||
{
|
||||
"count": 0,
|
||||
"version_number": 2,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"description": "This version has not been tested yet",
|
||||
"created_at": "2019-06-07 01:34:10",
|
||||
"updated_at": null,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"id": "9490f863-020b-4746-8f30-9324cff31678"
|
||||
}
|
||||
]
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"count": 0,
|
||||
"version_number": 1,
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "This version is ready for production",
|
||||
"created_at": "2019-06-07 01:23:16",
|
||||
"updated_at": null,
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "45ebdcbf-6e2f-46c9-bd58-7f6ae01ecfcc"
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"function_alias": "hq-production-function",
|
||||
"description": "Webhook based on function alias triggered by Jenkins"
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "Webhook triggered by Jenkins",
|
||||
"function_version": 2
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "Webhook triggered by Jenkins",
|
||||
"created_at": "2019-06-07 14:53:22.989283",
|
||||
"updated_at": null,
|
||||
"function_version": 2,
|
||||
"webhook_url": "http://127.0.0.1:7070/v1/webhooks/2aac6d93-c4d3-4fc6-9d3b-8852be0c8c89/invoke",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "2aac6d93-c4d3-4fc6-9d3b-8852be0c8c89"
|
||||
}
|
@ -1 +0,0 @@
|
||||
Request to delete webhook 2aac6d93-c4d3-4fc6-9d3b-8852be0c8c89 has been accepted.
|
@ -1,22 +0,0 @@
|
||||
[
|
||||
{
|
||||
"function_id": "e47ca07c-b0cc-4501-901f-1c2e3df46724",
|
||||
"description": "Webhook Hello World",
|
||||
"created_at": "2019-06-07 02:48:16",
|
||||
"updated_at": null,
|
||||
"function_version": 0,
|
||||
"webhook_url": "http://127.0.0.1:7070/v1/webhooks/726779f2-227f-43af-a891-4de85e8dadd5/invoke",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "726779f2-227f-43af-a891-4de85e8dadd5"
|
||||
},
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "Webhook triggered by Jenkins",
|
||||
"created_at": "2019-06-07 14:52:19",
|
||||
"updated_at": null,
|
||||
"function_version": 2,
|
||||
"webhook_url": "http://127.0.0.1:7070/v1/webhooks/e3f34707-8fea-4d36-b558-e39b00b99105/invoke",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "e3f34707-8fea-4d36-b558-e39b00b99105"
|
||||
}
|
||||
]
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "Webhook triggered by Jenkins",
|
||||
"created_at": "2019-06-07 14:52:19",
|
||||
"updated_at": null,
|
||||
"function_version": 2,
|
||||
"webhook_url": "http://127.0.0.1:7070/v1/webhooks/e3f34707-8fea-4d36-b558-e39b00b99105/invoke",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "e3f34707-8fea-4d36-b558-e39b00b99105"
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
{
|
||||
"description": "Webhook based on function alias triggered by Gitlab",
|
||||
"function_alias": "hq-staging-function"
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "Webhook triggered by Gitlab",
|
||||
"function_version": 2
|
||||
}
|
@ -1,10 +0,0 @@
|
||||
{
|
||||
"function_id": "f8e7357f-af4a-4448-87d8-6fed4c7db5b5",
|
||||
"description": "Webhook triggered by Gitlab",
|
||||
"created_at": "2019-06-07 14:53:22",
|
||||
"updated_at": "2019-06-07 18:06:42",
|
||||
"function_version": 2,
|
||||
"webhook_url": "http://127.0.0.1:7070/v1/webhooks/2aac6d93-c4d3-4fc6-9d3b-8852be0c8c89/invoke",
|
||||
"project_id": "5eeb5916ae4b43699f06ea422e581b83",
|
||||
"id": "2aac6d93-c4d3-4fc6-9d3b-8852be0c8c89"
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
#################
|
||||
# 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.
|
@ -1,31 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
==================
|
||||
Qinling Base URLs
|
||||
==================
|
||||
|
||||
All API calls through the rest of this document require authentication
|
||||
with the OpenStack Identity service. They also required a ``url`` that
|
||||
is extracted from the Identity token of type
|
||||
``function-engine``. This will be the root url that every call below will be
|
||||
added to build a full path.
|
||||
|
||||
Note that if using OpenStack Identity service API v2, ``url`` can be
|
||||
represented via ``adminURL``, ``internalURL`` or ``publicURL`` in endpoint
|
||||
catalog. In Identity service API v3, ``url`` is represented with field
|
||||
``interface`` including ``admin``, ``internal`` and ``public``.
|
||||
|
||||
For instance, if the ``url`` is
|
||||
``http://my-qinling-url.org/qinling/v1`` then the full API call for
|
||||
``/functions`` is ``http://my-qinling-url.org/qinling/v1/functions``.
|
||||
|
||||
Depending on the deployment the function engine url might be http or https,
|
||||
a custom port, a custom path, and include your project id. The only way to
|
||||
know the urls for your deployment is by using the service catalog.
|
||||
The containers service URL should never be hard coded in applications, even
|
||||
if they are only expected to work at a single site. It should always be
|
||||
discovered from the Identity token.
|
||||
|
||||
As such, for the rest of this document we will be using short hand
|
||||
where ``GET /functions`` really means
|
||||
``GET {your_qinling_url}/functions``.
|
@ -1,255 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=========
|
||||
Versions
|
||||
=========
|
||||
|
||||
Lists, creates, detaches, shows details and deletes versions.
|
||||
|
||||
Function versions are like git commits, they’re snapshots of your
|
||||
project history. Each version has a number that serves as its ID,
|
||||
starting with 1 and incrementing up, and never reused. The code for
|
||||
a published version of a function is immutable (i.e. cannot be changed).
|
||||
So, a version number corresponds to a specific set of function code with
|
||||
certainty.
|
||||
|
||||
|
||||
Create a version
|
||||
================
|
||||
|
||||
.. rest_method:: POST /v1/functions/{function_id}/versions
|
||||
|
||||
Create a version.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- description: version_description
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/versions/create-version-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: version_description
|
||||
- function_id: function_id
|
||||
- count: version_count
|
||||
- version_number: version_number
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/versions/create-version-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List versions
|
||||
=============
|
||||
|
||||
.. rest_method:: GET /v1/functions/{function_id}/versions
|
||||
|
||||
List versions.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: version_description
|
||||
- function_id: function_id
|
||||
- count: version_count
|
||||
- version_number: version_number
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/versions/list-versions-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show a version
|
||||
==============
|
||||
|
||||
.. rest_method:: GET /v1/functions/{function_id}/versions/{version_number}
|
||||
|
||||
Show a version.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- version_number: path_version_number
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: version_description
|
||||
- function_id: function_id
|
||||
- count: version_count
|
||||
- version_number: version_number
|
||||
- project_id: project_id
|
||||
- status: status
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/versions/show-version-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Detach a version
|
||||
================
|
||||
|
||||
.. rest_method:: POST /v1/functions/{function_id}/versions/{version_number}/detach
|
||||
|
||||
Detach a version.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- version_number: path_version_number
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
|
||||
.. literalinclude:: samples/versions/detach-version-response.text
|
||||
:language: text
|
||||
|
||||
|
||||
Delete a version
|
||||
================
|
||||
|
||||
.. rest_method:: DELETE /v1/functions/{function_id}/versions/{version_number}
|
||||
|
||||
Delete a version.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: path_function_id
|
||||
- version_number: path_version_number
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
None
|
@ -1,272 +0,0 @@
|
||||
.. -*- rst -*-
|
||||
|
||||
=========
|
||||
Webhooks
|
||||
=========
|
||||
|
||||
Lists, creates, updates, shows details and deletes webhooks.
|
||||
|
||||
Webhooks are a low-effort way to invoke the functions. They do not
|
||||
require a bot user or authentication to use.
|
||||
|
||||
|
||||
Create a webhook
|
||||
================
|
||||
|
||||
.. rest_method:: POST /v1/webhooks
|
||||
|
||||
Create a webhook.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 201
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- function_id: webhook_function_id
|
||||
- function_alias: webhook_function_alias
|
||||
- function_version: webhook_function_version
|
||||
- description: webhook_description
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/create-webhook-request.json
|
||||
:language: javascript
|
||||
|
||||
.. literalinclude:: samples/webhooks/create-webhook-alias-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: webhook_description
|
||||
- function_id: webhook_function_id
|
||||
- version_number: webhook_function_version
|
||||
- webhook_url: webhook_url
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/create-webhook-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
List webhooks
|
||||
=============
|
||||
|
||||
.. rest_method:: GET /v1/webhooks
|
||||
|
||||
List webhooks.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: webhook_description
|
||||
- function_id: webhook_function_id
|
||||
- version_number: webhook_function_version
|
||||
- webhook_url: webhook_url
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/list-webhooks-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Show a webhook
|
||||
==============
|
||||
|
||||
.. rest_method:: GET /v1/webhooks/{webhook_id}
|
||||
|
||||
Show a webhook.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 200
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- webhook_id: path_webhook_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: webhook_description
|
||||
- function_id: webhook_function_id
|
||||
- version_number: webhook_function_version
|
||||
- webhook_url: webhook_url
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/show-webhook-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Update a webhook
|
||||
================
|
||||
|
||||
.. rest_method:: PUT /v1/webhooks/{webhook_id}
|
||||
|
||||
Update a webhook.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 202
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- webhook_id: path_webhook_id
|
||||
- function_id: webhook_function_id
|
||||
- function_alias: webhook_function_alias
|
||||
- function_version: webhook_function_version
|
||||
- description: webhook_description
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- id: id
|
||||
- description: webhook_description
|
||||
- function_id: webhook_function_id
|
||||
- version_number: webhook_function_version
|
||||
- webhook_url: webhook_url
|
||||
- project_id: project_id
|
||||
- created_at: created_at
|
||||
- updated_at: updated_at
|
||||
|
||||
Request Example
|
||||
---------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/update-webhook-request.json
|
||||
:language: javascript
|
||||
|
||||
.. literalinclude:: samples/webhooks/update-webhook-alias-request.json
|
||||
:language: javascript
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/update-webhook-response.json
|
||||
:language: javascript
|
||||
|
||||
|
||||
Delete a webhook
|
||||
================
|
||||
|
||||
.. rest_method:: DELETE /v1/webhooks/{webhook_id}
|
||||
|
||||
Delete a webhook.
|
||||
|
||||
Response Codes
|
||||
--------------
|
||||
|
||||
.. rest_status_code:: success status.yaml
|
||||
|
||||
- 204
|
||||
|
||||
.. rest_status_code:: error status.yaml
|
||||
|
||||
- 400
|
||||
- 401
|
||||
- 403
|
||||
|
||||
Request
|
||||
-------
|
||||
|
||||
.. rest_parameters:: parameters.yaml
|
||||
|
||||
- x-auth-token: x-auth-token
|
||||
- webhook_id: path_webhook_id
|
||||
|
||||
Response Parameters
|
||||
-------------------
|
||||
|
||||
None
|
||||
|
||||
Response Example
|
||||
----------------
|
||||
|
||||
.. literalinclude:: samples/webhooks/delete-webhook-response.text
|
||||
:language: text
|
@ -1,226 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Save trace setting
|
||||
XTRACE=$(set +o | grep xtrace)
|
||||
set -o xtrace
|
||||
|
||||
|
||||
function install_qinling {
|
||||
git_clone $QINLING_REPO $QINLING_DIR $QINLING_BRANCH
|
||||
setup_develop $QINLING_DIR
|
||||
}
|
||||
|
||||
|
||||
function install_qinlingclient {
|
||||
if use_library_from_git "python-qinlingclient"; then
|
||||
git_clone $QINLINGCLIENT_REPO $QINLINGCLIENT_DIR $QINLINGCLIENT_BRANCH
|
||||
setup_develop $QINLINGCLIENT_DIR
|
||||
else
|
||||
pip_install python-qinlingclient
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
function install_k8s {
|
||||
pushd $QINLING_DIR
|
||||
source tools/gate/kubeadm/setup_gate.sh
|
||||
popd
|
||||
|
||||
# Pre-fetch the docker images for runtimes and image function test.
|
||||
for image in "$QINLING_PYTHON_RUNTIME_IMAGE" "$QINLING_NODEJS_RUNTIME_IMAGE" "$QINLING_SIDECAR_IMAGE" "openstackqinling/alpine-test" "lingxiankong/sleep"
|
||||
do
|
||||
sudo docker pull $image
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
function create_qinling_accounts {
|
||||
create_service_user "qinling" "admin"
|
||||
|
||||
local qinling_service=$(get_or_create_service "qinling" "function-engine" "Function Service")
|
||||
qinling_api_url="$QINLING_SERVICE_PROTOCOL://$QINLING_SERVICE_HOST:$QINLING_SERVICE_PORT"
|
||||
|
||||
get_or_create_endpoint $qinling_service \
|
||||
"$REGION_NAME" \
|
||||
"$qinling_api_url" \
|
||||
"$qinling_api_url" \
|
||||
"$qinling_api_url"
|
||||
|
||||
# get or adds 'service' role to 'qinling' user on 'demo' project
|
||||
get_or_add_user_project_role "service" "qinling" "demo"
|
||||
}
|
||||
|
||||
|
||||
function mkdir_chown_stack {
|
||||
if [[ ! -d "$1" ]]; then
|
||||
sudo mkdir -p "$1"
|
||||
fi
|
||||
sudo chown -R $STACK_USER:$STACK_USER "$1"
|
||||
}
|
||||
|
||||
|
||||
function configure_k8s_certificates {
|
||||
pushd $QINLING_DIR
|
||||
|
||||
mkdir_chown_stack "$QINLING_CONF_DIR"/pki
|
||||
mkdir_chown_stack "$QINLING_CONF_DIR"/pki/kubernetes
|
||||
|
||||
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /tmp/cfssl
|
||||
chmod +x /tmp/cfssl
|
||||
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /tmp/cfssljson
|
||||
chmod +x /tmp/cfssljson
|
||||
|
||||
sudo /tmp/cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=example/kubernetes/cfssl-ca-config.json -profile=client example/kubernetes/cfssl-client-csr.json | /tmp/cfssljson -bare client
|
||||
# The command above outputs client-key.pem, client.pem and client.csr
|
||||
mv client-key.pem "$QINLING_CONF_DIR"/pki/kubernetes/qinling.key
|
||||
mv client.pem "$QINLING_CONF_DIR"/pki/kubernetes/qinling.crt
|
||||
rm -f client.csr
|
||||
|
||||
cp /etc/kubernetes/pki/ca.crt "$QINLING_CONF_DIR"/pki/kubernetes/ca.crt
|
||||
|
||||
popd
|
||||
}
|
||||
|
||||
function configure_etcd_certificates {
|
||||
pushd $QINLING_DIR
|
||||
|
||||
mkdir_chown_stack $QINLING_CONF_DIR/pki/etcd
|
||||
sudo cp /etc/kubernetes/pki/etcd/ca.crt $QINLING_CONF_DIR/pki/etcd/
|
||||
|
||||
# Re-use k8s api server etcd client cert
|
||||
sudo cp /etc/kubernetes/pki/apiserver-etcd-client.crt $QINLING_CONF_DIR/pki/etcd/qinling-etcd-client.crt
|
||||
sudo cp /etc/kubernetes/pki/apiserver-etcd-client.key $QINLING_CONF_DIR/pki/etcd/qinling-etcd-client.key
|
||||
|
||||
mkdir_chown_stack $QINLING_CONF_DIR/pki/etcd
|
||||
# For the tempest user to read the key file when running tempest
|
||||
chmod 644 $QINLING_CONF_DIR/pki/etcd/qinling-etcd-client.key
|
||||
|
||||
popd
|
||||
}
|
||||
|
||||
|
||||
function configure_qinling {
|
||||
mkdir_chown_stack "$QINLING_AUTH_CACHE_DIR"
|
||||
rm -rf "$QINLING_AUTH_CACHE_DIR"/*
|
||||
|
||||
mkdir_chown_stack "$QINLING_CONF_DIR"
|
||||
rm -rf "$QINLING_CONF_DIR"/*
|
||||
|
||||
mkdir_chown_stack "$QINLING_FUNCTION_STORAGE_DIR"
|
||||
rm -rf "$QINLING_FUNCTION_STORAGE_DIR"/*
|
||||
|
||||
cp $QINLING_DIR/etc/policy.json.sample $QINLING_POLICY_FILE
|
||||
|
||||
# Generate Qinling configuration file and configure common parameters.
|
||||
oslo-config-generator --config-file $QINLING_DIR/tools/config/config-generator.qinling.conf --output-file $QINLING_CONF_FILE
|
||||
|
||||
iniset $QINLING_CONF_FILE oslo_policy policy_file $QINLING_POLICY_FILE
|
||||
iniset $QINLING_CONF_FILE DEFAULT debug $QINLING_DEBUG
|
||||
iniset $QINLING_CONF_FILE DEFAULT server all
|
||||
iniset $QINLING_CONF_FILE DEFAULT logging_context_format_string "%(asctime)s %(process)d %(color)s %(levelname)s [%(request_id)s] %(message)s %(resource)s (%(name)s)"
|
||||
iniset $QINLING_CONF_FILE storage file_system_dir $QINLING_FUNCTION_STORAGE_DIR
|
||||
|
||||
# Setup keystone_authtoken section
|
||||
configure_auth_token_middleware $QINLING_CONF_FILE qinling $QINLING_AUTH_CACHE_DIR
|
||||
iniset $QINLING_CONF_FILE keystone_authtoken www_authenticate_uri $KEYSTONE_AUTH_URI_V3
|
||||
iniset $QINLING_CONF_FILE keystone_authtoken region_name "$REGION_NAME"
|
||||
|
||||
# Setup RabbitMQ credentials
|
||||
iniset_rpc_backend qinling $QINLING_CONF_FILE
|
||||
|
||||
# Configure the database.
|
||||
iniset $QINLING_CONF_FILE database connection `database_connection_url qinling`
|
||||
|
||||
if [ "$QINLING_INSTALL_K8S" == "True" ]; then
|
||||
# Configure Kubernetes API server certificates for qinling if required.
|
||||
if [ "$QINLING_K8S_APISERVER_TLS" == "True" ]; then
|
||||
iniset $QINLING_CONF_FILE kubernetes kube_host https://$(hostname -f):6443
|
||||
configure_k8s_certificates
|
||||
sudo kubectl create -f $QINLING_DIR/example/kubernetes/k8s_qinling_role.yaml
|
||||
else
|
||||
iniset $QINLING_CONF_FILE kubernetes use_api_certificate False
|
||||
fi
|
||||
|
||||
# Config etcd TLS certs
|
||||
configure_etcd_certificates
|
||||
else
|
||||
echo_summary "Skip k8s related configuration"
|
||||
fi
|
||||
|
||||
iniset $QINLING_CONF_FILE kubernetes replicas 5
|
||||
}
|
||||
|
||||
|
||||
function init_qinling {
|
||||
# (re)create qinling database
|
||||
recreate_database qinling utf8
|
||||
|
||||
$QINLING_BIN_DIR/qinling-db-manage --config-file $QINLING_CONF_FILE upgrade head
|
||||
}
|
||||
|
||||
|
||||
function start_qinling {
|
||||
run_process qinling-engine "$QINLING_BIN_DIR/qinling-engine --config-file $QINLING_CONF_FILE"
|
||||
run_process qinling-api "$QINLING_BIN_DIR/qinling-api --config-file $QINLING_CONF_FILE"
|
||||
}
|
||||
|
||||
|
||||
function stop_qinling {
|
||||
local serv
|
||||
for serv in qinling-api qinling-engine; do
|
||||
stop_process $serv
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
function cleanup_qinling {
|
||||
sudo rm -rf $QINLING_AUTH_CACHE_DIR/*
|
||||
sudo rm -rf $QINLING_CONF_DIR/*
|
||||
}
|
||||
|
||||
|
||||
# check for service enabled
|
||||
if is_service_enabled qinling; then
|
||||
if [[ "$1" == "stack" && "$2" == "install" ]]; then
|
||||
# Perform installation of service source
|
||||
echo_summary "Installing qinling"
|
||||
install_qinling
|
||||
echo_summary "Installing qinlingclient"
|
||||
install_qinlingclient
|
||||
|
||||
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
|
||||
# Configure after the other layer 1 and 2 services have been configured
|
||||
echo_summary "Configuring qinling"
|
||||
if is_service_enabled key; then
|
||||
create_qinling_accounts
|
||||
fi
|
||||
|
||||
if [ "$QINLING_INSTALL_K8S" == "True" ]; then
|
||||
echo_summary "Installing kubernetes cluster"
|
||||
install_k8s
|
||||
else
|
||||
echo_summary "Skip kubernetes cluster installation"
|
||||
fi
|
||||
|
||||
configure_qinling
|
||||
|
||||
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
|
||||
# Initialize and start the qinling service
|
||||
echo_summary "Initializing qinling"
|
||||
init_qinling
|
||||
start_qinling
|
||||
fi
|
||||
|
||||
if [[ "$1" == "unstack" ]]; then
|
||||
echo_summary "Shutting down qinling"
|
||||
stop_qinling
|
||||
fi
|
||||
|
||||
if [[ "$1" == "clean" ]]; then
|
||||
echo_summary "Cleaning qinling"
|
||||
cleanup_qinling
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Restore xtrace
|
||||
$XTRACE
|
@ -1,30 +0,0 @@
|
||||
# Devstack settings
|
||||
enable_service qinling qinling-api qinling-engine
|
||||
|
||||
|
||||
# Set up default repos
|
||||
QINLING_DIR=$DEST/qinling
|
||||
QINLING_BIN_DIR=$(get_python_exec_prefix)
|
||||
QINLING_REPO=${QINLING_REPO:-${GIT_BASE}/openstack/qinling.git}
|
||||
QINLING_BRANCH=${QINLING_BRANCH:-master}
|
||||
|
||||
QINLINGCLIENT_DIR=$DEST/python-qinlingclient
|
||||
QINLINGCLIENT_REPO=${QINLINGCLIENT_REPO:-${GIT_BASE}/openstack/python-qinlingclient.git}
|
||||
QINLINGCLIENT_BRANCH=${QINLINGCLIENT_BRANCH:-master}
|
||||
|
||||
QINLING_SERVICE_HOST=${QINLING_SERVICE_HOST:-$SERVICE_HOST}
|
||||
QINLING_SERVICE_PORT=${QINLING_SERVICE_PORT:-7070}
|
||||
QINLING_SERVICE_PROTOCOL=${QINLING_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
|
||||
|
||||
QINLING_DEBUG=${QINLING_DEBUG:-True}
|
||||
QINLING_CONF_DIR=${QINLING_CONF_DIR:-/etc/qinling}
|
||||
QINLING_CONF_FILE=${QINLING_CONF_DIR}/qinling.conf
|
||||
QINLING_POLICY_FILE=${QINLING_CONF_DIR}/policy.json
|
||||
QINLING_AUTH_CACHE_DIR=${QINLING_AUTH_CACHE_DIR:-/var/cache/qinling}
|
||||
QINLING_FUNCTION_STORAGE_DIR=${QINLING_FUNCTION_STORAGE_DIR:-/opt/qinling/function/packages}
|
||||
QINLING_PYTHON_RUNTIME_IMAGE=${QINLING_PYTHON_RUNTIME_IMAGE:-openstackqinling/python3-runtime:0.0.2}
|
||||
QINLING_NODEJS_RUNTIME_IMAGE=${QINLING_NODEJS_RUNTIME_IMAGE:-openstackqinling/nodejs-runtime:0.0.1}
|
||||
QINLING_SIDECAR_IMAGE=${QINLING_SIDECAR_IMAGE:-openstackqinling/sidecar:0.0.2}
|
||||
|
||||
QINLING_INSTALL_K8S=${QINLING_INSTALL_K8S:-True}
|
||||
QINLING_K8S_APISERVER_TLS=${QINLING_K8S_APISERVER_TLS:-True}
|
@ -1,27 +0,0 @@
|
||||
========================
|
||||
Qinling Development Docs
|
||||
========================
|
||||
|
||||
Files under this directory tree are used for generating the documentation
|
||||
for the qinling source code.
|
||||
|
||||
Developer documentation is built to:
|
||||
https://docs.openstack.org/qinling/latest/
|
||||
|
||||
Tools
|
||||
=====
|
||||
|
||||
Sphinx
|
||||
The Python Sphinx package is used to generate the documentation output.
|
||||
Information on Sphinx, including formatting information for RST source
|
||||
files, can be found in the `Sphinx online documentation
|
||||
<http://www.sphinx-doc.org/en/stable/>`_.
|
||||
|
||||
Building Documentation
|
||||
======================
|
||||
|
||||
Doc builds are performed using tox with the ``docs`` target::
|
||||
|
||||
% cd ..
|
||||
% tox -e docs
|
||||
|
@ -1,9 +0,0 @@
|
||||
# The order of packages is significant, because pip processes them in the order
|
||||
# of appearance. Changing the order has an impact on the overall integration
|
||||
# process, which may cause wedges in the gate later.
|
||||
# this is required for the docs build jobs
|
||||
sphinx>=2.0.0,!=2.1.0 # BSD
|
||||
sphinxcontrib-apidoc>=0.2.0 # BSD
|
||||
openstackdocstheme>=2.2.1 # Apache-2.0
|
||||
reno>=3.1.0 # Apache-2.0
|
||||
os-api-ref>=1.0.0 # Apache-2.0
|
@ -1,32 +0,0 @@
|
||||
..
|
||||
Copyright 2010-2011 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
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.
|
||||
|
||||
Administration/Operation Guide
|
||||
==============================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
installation
|
||||
runtime
|
||||
security
|
||||
|
||||
Indices and tables
|
||||
------------------
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`search`
|
@ -1,215 +0,0 @@
|
||||
..
|
||||
Copyright 2018 Catalyst IT Ltd
|
||||
All Rights Reserved.
|
||||
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.
|
||||
|
||||
Config Qinling with existing kubernetes/etcd cluster
|
||||
====================================================
|
||||
|
||||
In most cases, it's not ideal to set up a new dedicated kubernetes cluster for
|
||||
Qinling. The component which works with kubernetes cluster in Qinling is the
|
||||
``qinling-engine``. Follow the steps below to configure Qinling to work with
|
||||
existing kubernetes/etcd cluster, and make Qinling access the kubernetes/etcd
|
||||
service with authentication and authorization.
|
||||
|
||||
Prerequisites
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
* You know the kubernetes API address and etcd service address, for example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
export K8S_ADDRESS=10.0.0.5
|
||||
export ETCD_ADDRESS=10.0.0.6
|
||||
export QINLING_SERVICE_USER=qinling
|
||||
|
||||
.. end
|
||||
|
||||
Make sure the kubernetes and etcd services are both accessible to external.
|
||||
|
||||
* You know the IP address that ``qinling-engine`` service talks to kubernetes,
|
||||
for example:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
export QINLING_ENGINE_ADDRESS=10.0.0.7
|
||||
|
||||
.. end
|
||||
|
||||
* You have CA certificates of the kubernetes and etcd respectively and store on
|
||||
the host that ``qinling-engine`` is running.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
export K8S_CA_CERT=$HOME/ca.crt
|
||||
export K8S_CA_KEY=$HOME/ca.key
|
||||
export ETCD_CA_CERT=$HOME/etcd_ca.crt
|
||||
export ETCD_CA_KEY=$HOME/etcd_ca.key
|
||||
|
||||
.. end
|
||||
|
||||
* This guide assumes
|
||||
`RBAC <https://kubernetes.io/docs/admin/authorization/rbac/>`_ is enabled in
|
||||
the kubernetes cluster.
|
||||
* All the following commands are supposed to be executed under ``root``
|
||||
permission.
|
||||
|
||||
Qinling configurations
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Below are the options and their default values that relate to accessing the
|
||||
Kubernetes API and etcd in Qinling's configuration file.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[kubernetes]
|
||||
kube_host = https://127.0.0.1:8001
|
||||
use_api_certificate = True
|
||||
ssl_ca_cert = /etc/qinling/pki/kubernetes/ca.crt
|
||||
cert_file = /etc/qinling/pki/kubernetes/qinling.crt
|
||||
key_file = /etc/qinling/pki/kubernetes/qinling.key
|
||||
|
||||
[etcd]
|
||||
host = 127.0.0.1
|
||||
port = 2379
|
||||
protocol = https
|
||||
ca_cert = /etc/qinling/pki/etcd/ca.crt
|
||||
cert_file = /etc/qinling/pki/etcd/qinling-etcd-client.crt
|
||||
cert_key = /etc/qinling/pki/etcd/qinling-etcd-client.key
|
||||
|
||||
.. end
|
||||
|
||||
First, change the kubernetes and etcd service addresses in the config file, and
|
||||
add the addresses that ``qinling-engine`` uses to talk to kubernetes services
|
||||
to the ``trusted_cidrs`` option. We will create all the related certificates in
|
||||
the following steps.
|
||||
|
||||
.. note::
|
||||
|
||||
If the ``qinling-engine`` service is running behind a NAT device, make sure
|
||||
you get the correct IP address that talks to kubernetes.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[kubernetes]
|
||||
kube_host = https://${K8S_ADDRESS}:6443
|
||||
trusted_cidrs = ${QINLING_ENGINE_ADDRESS}/32
|
||||
...
|
||||
[etcd]
|
||||
host = ${ETCD_ADDRESS}
|
||||
...
|
||||
|
||||
.. end
|
||||
|
||||
Generate and config client certificates for Qinling
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
There are a lot of
|
||||
`tools <https://kubernetes.io/docs/concepts/cluster-administration/certificates/>`_
|
||||
out there for certificate generation. We use ``cfssl`` as the example here.
|
||||
|
||||
#) Download and prepare the command line tools as needed.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /tmp/cfssl
|
||||
chmod +x /tmp/cfssl
|
||||
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /tmp/cfssljson
|
||||
chmod +x /tmp/cfssljson
|
||||
|
||||
.. end
|
||||
|
||||
#) Generate the kubernetes and etcd client certificates for Qinling.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
mkdir -p /tmp/certs; cd /tmp/certs
|
||||
curl -SL https://raw.githubusercontent.com/openstack/qinling/master/example/kubernetes/cfssl-ca-config.json -o /tmp/certs/cfssl-ca-config.json
|
||||
curl -SL https://raw.githubusercontent.com/openstack/qinling/master/example/kubernetes/cfssl-client-csr.json -o /tmp/certs/cfssl-client-csr.json
|
||||
/tmp/cfssl gencert -ca=${K8S_CA_CERT} \
|
||||
-ca-key=${K8S_CA_KEY} \
|
||||
-config=/tmp/certs/cfssl-ca-config.json \
|
||||
-profile=client \
|
||||
/tmp/certs/cfssl-client-csr.json | /tmp/cfssljson -bare k8s-client
|
||||
/tmp/cfssl gencert -ca=${ETCD_CA_CERT} \
|
||||
-ca-key=${ETCD_CA_KEY} \
|
||||
-config=/tmp/certs/cfssl-ca-config.json \
|
||||
-profile=client \
|
||||
/tmp/certs/cfssl-client-csr.json | /tmp/cfssljson -bare etcd-client
|
||||
|
||||
.. end
|
||||
|
||||
#) Move the certificates to the pre-defined locations in the config file and
|
||||
ensure the qinling service user has the permission to those locations.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
mkdir -p /etc/qinling/pki/{kubernetes,etcd}
|
||||
cp k8s-client-key.pem /etc/qinling/pki/kubernetes/qinling.key
|
||||
cp k8s-client.pem /etc/qinling/pki/kubernetes/qinling.crt
|
||||
cp etcd-client-key.pem /etc/qinling/pki/etcd/qinling-etcd-client.key
|
||||
cp etcd-client.pem /etc/qinling/pki/etcd/qinling-etcd-client.crt
|
||||
cp ${K8S_CA_CERT} /etc/qinling/pki/kubernetes/ca.crt
|
||||
cp ${ETCD_CA_CERT} /etc/qinling/pki/etcd/ca.crt
|
||||
chown -R ${QINLING_SERVICE_USER}:${QINLING_SERVICE_USER} /etc/qinling/pki
|
||||
cd -; rm -rf /tmp/certs
|
||||
|
||||
.. end
|
||||
|
||||
Create Role and RoleBinding in Kubernetes
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
According to the least privilege principle, the operation permission of qinling
|
||||
service user in kubernetes cluster should be restricted, this could be easily
|
||||
achieved by applying the pre-defined authorization manifest file. The following
|
||||
command is supposed to be executed with ``admin`` access of the kubernetes
|
||||
cluster.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
curl -sSL https://raw.githubusercontent.com/openstack/qinling/master/example/kubernetes/k8s_qinling_role.yaml | kubectl apply -f -
|
||||
|
||||
.. end
|
||||
|
||||
Restart Qinlig services
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Restart all the Qinling services. Now Qinling is accessing the Kubernetes API
|
||||
and etcd service using TLS. The requests that Qinling makes to the Kubernetes
|
||||
API are also authorized.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
systemctl restart devstack@qinling-*.service
|
||||
|
||||
.. end
|
||||
|
||||
Access the Kubernetes API Insecurely (For testing purpose ONLY)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Qinling can also connect to the Kubernetes API insecurely if the Kubernetes API
|
||||
server serves for insecure connections. However, this is not recommended and
|
||||
should be used for testing purpose only.
|
||||
|
||||
In the configuration file, under the ``kubernetes`` section, set ``kube_host``
|
||||
to the URI which the Kubernetes API serves for insecure HTTP connections, for
|
||||
example, ``kube_host = http://localhost:8080``, and set ``use_api_certificate``
|
||||
to ``False`` to disable Qinling using a client certificate to access the
|
||||
Kubernetes API.
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[kubernetes]
|
||||
kube_host = http://localhost:8080
|
||||
use_api_certificate = False
|
||||
|
||||
.. end
|
@ -1,19 +0,0 @@
|
||||
..
|
||||
Copyright 2018 Catalyst IT Ltd
|
||||
All Rights Reserved.
|
||||
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.
|
||||
|
||||
Install Qinling in DevStack
|
||||
===========================
|
||||
|
||||
Refer to
|
||||
`Developer Guide <https://docs.openstack.org/qinling/latest/contributor/development-environment-devstack.html>`_
|
@ -1,363 +0,0 @@
|
||||
..
|
||||
Copyright 2018 Catalyst IT Ltd
|
||||
All Rights Reserved.
|
||||
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.
|
||||
|
||||
Install Qinling on Ubuntu 16.04
|
||||
===============================
|
||||
|
||||
This section describes how to install and configure the Function management
|
||||
service, code-named qinling on the controller node that runs Ubuntu 16.04 (LTS).
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
Before you install and configure Qinling, you must create a database,
|
||||
service credentials, and API endpoints.
|
||||
|
||||
#. 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 ``qinling`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
CREATE DATABASE qinling;
|
||||
|
||||
* Grant proper access to the ``qinling`` database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
GRANT ALL PRIVILEGES ON qinling.* TO 'qinling'@'localhost' \
|
||||
IDENTIFIED BY 'QINLING_DBPASS';
|
||||
GRANT ALL PRIVILEGES ON qinling.* TO 'qinling'@'%' \
|
||||
IDENTIFIED BY 'QINLING_DBPASS';
|
||||
|
||||
Replace ``QINLING_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 ``qinling`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack user create --domain default --password-prompt qinling
|
||||
User Password:
|
||||
Repeat User Password:
|
||||
+---------------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+---------------------+----------------------------------+
|
||||
| domain_id | default |
|
||||
| enabled | True |
|
||||
| id | f77c97367087440da5f923bfcc66f68b |
|
||||
| name | qinling |
|
||||
| options | {} |
|
||||
| password_expires_at | None |
|
||||
+---------------------+----------------------------------+
|
||||
|
||||
* Add the ``admin`` role to the ``qinling`` user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack role add --project service --user qinling admin
|
||||
|
||||
.. note::
|
||||
|
||||
This command provides no output.
|
||||
|
||||
* Create the ``qinling`` service entities:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack service create function-engine \
|
||||
--name qinling --description="Function Service"
|
||||
+-------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+-------------+----------------------------------+
|
||||
| description | Function Service |
|
||||
| enabled | True |
|
||||
| id | 8811fab348b548e3adef6ff0b149edfb |
|
||||
| name | qinling |
|
||||
| type | function-engine |
|
||||
+-------------+----------------------------------+
|
||||
|
||||
#. Create the Function engine service API endpoints:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
function-engine public http://controller:7070
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 70937a84ed434256b11853b7e8a05d91 |
|
||||
| interface | public |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 8811fab348b548e3adef6ff0b149edfb |
|
||||
| service_name | qinling |
|
||||
| service_type | function-engine |
|
||||
| url | http://controller:7070 |
|
||||
+--------------+----------------------------------+
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
function-engine internal http://controller:7070
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 7249f13c00cf4ca788da3df3fac9cfe2 |
|
||||
| interface | internal |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 8811fab348b548e3adef6ff0b149edfb |
|
||||
| service_name | qinling |
|
||||
| service_type | function-engine |
|
||||
| url | http://controller:7070 |
|
||||
+--------------+----------------------------------+
|
||||
$ openstack endpoint create --region RegionOne \
|
||||
function-engine admin http://controller:7070
|
||||
+--------------+----------------------------------+
|
||||
| Field | Value |
|
||||
+--------------+----------------------------------+
|
||||
| enabled | True |
|
||||
| id | 7726669d928d47198388c599bfcd62a5 |
|
||||
| interface | admin |
|
||||
| region | RegionOne |
|
||||
| region_id | RegionOne |
|
||||
| service_id | 8811fab348b548e3adef6ff0b149edfb |
|
||||
| service_name | qinling |
|
||||
| service_type | function-engine |
|
||||
| url | http://controller:7070 |
|
||||
+--------------+----------------------------------+
|
||||
|
||||
Install and configure Qinling components
|
||||
----------------------------------------
|
||||
|
||||
#. Create qinling user and necessary directories:
|
||||
|
||||
* Create user:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# groupadd --system qinling
|
||||
# useradd --home-dir "/var/lib/qinling" \
|
||||
--create-home \
|
||||
--system \
|
||||
--shell /bin/false \
|
||||
-g qinling \
|
||||
qinling
|
||||
|
||||
* Create directories:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# mkdir -p /etc/qinling /var/lib/qinling/package
|
||||
# chown -R qinling:qinling /etc/qinling /var/lib/qinling/package
|
||||
|
||||
#. Clone and install qinling:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# apt install -y python-pip
|
||||
# cd /var/lib/qinling
|
||||
# git clone https://opendev.org/openstack/qinling.git
|
||||
# chown -R qinling:qinling qinling
|
||||
# cd qinling
|
||||
# pip install -e .
|
||||
|
||||
#. Generate a sample configuration file:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "oslo-config-generator \
|
||||
--config-file tools/config/config-generator.qinling.conf \
|
||||
--output-file etc/qinling.conf.sample" qinling
|
||||
# su -s /bin/sh -c "cp etc/qinling.conf.sample \
|
||||
/etc/qinling/qinling.conf" qinling
|
||||
# su -s /bin/sh -c "cp etc/policy.json.sample \
|
||||
/etc/qinling/policy.json" qinling
|
||||
|
||||
#. Edit the ``/etc/qinling/qinling.conf``:
|
||||
|
||||
* In the ``[DEFAULT]`` section,
|
||||
configure ``RabbitMQ`` message queue access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[DEFAULT]
|
||||
...
|
||||
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
|
||||
|
||||
Replace ``RABBIT_PASS`` with the password you chose for the
|
||||
``openstack`` account in ``RabbitMQ``.
|
||||
|
||||
* In the ``[api]`` section, configure the IP address that Qinling API
|
||||
server is going to listen:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[api]
|
||||
...
|
||||
host = 10.0.0.9
|
||||
port = 7070
|
||||
|
||||
Replace ``10.0.0.9`` with the management interface IP address
|
||||
of the controller node if different.
|
||||
|
||||
* In the ``[database]`` section, configure database access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[database]
|
||||
...
|
||||
connection = mysql+pymysql://qinling:QINLING_DBPASS@controller/qinling?charset=utf8
|
||||
|
||||
Replace ``QINLING_DBPASS`` with the password you chose for
|
||||
the qinling database.
|
||||
|
||||
* In the ``[storage]`` section, configure function package storage path:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[storage]
|
||||
...
|
||||
file_system_dir = /var/lib/qinling/package
|
||||
|
||||
* In the ``[oslo_policy]`` section, configure the policy file path for
|
||||
Qinling service:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[oslo_policy]
|
||||
...
|
||||
policy_file = /etc/qinling/policy.json
|
||||
|
||||
* In the ``[keystone_authtoken]`` section, configure
|
||||
Identity service access:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[keystone_authtoken]
|
||||
...
|
||||
memcached_servers = controller:11211
|
||||
www_authenticate_uri = http://controller:5000
|
||||
project_domain_name = default
|
||||
project_name = service
|
||||
user_domain_name = default
|
||||
password = QINLING_PASS
|
||||
username = qinling
|
||||
auth_url = http://controller:5000
|
||||
auth_type = password
|
||||
auth_version = v3
|
||||
|
||||
Replace QINLING_PASS with the password you chose for the qinling user in
|
||||
the Identity service.
|
||||
|
||||
.. note::
|
||||
|
||||
Make sure that ``/etc/qinling/qinling.conf`` still have the correct
|
||||
permissions. You can set the permissions again with:
|
||||
|
||||
# chown qinling:qinling /etc/qinling/qinling.conf
|
||||
|
||||
#. Populate Qinling database:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# su -s /bin/sh -c "qinling-db-manage --config-file \
|
||||
/etc/qinling/qinling.conf upgrade head" qinling
|
||||
|
||||
Install and configure Kubernetes and etcd
|
||||
-----------------------------------------
|
||||
|
||||
Installing Kubernetes in not in the scope of this guide, you can refer to
|
||||
`Kubernetes installation guide <https://kubernetes.io/docs/setup/>`_ for more
|
||||
information.
|
||||
|
||||
For etcd installation, you can refer to
|
||||
`OpenStack Installation Guide <https://docs.openstack.org/install-guide/environment-etcd.html>`_.
|
||||
|
||||
Qinling could also connect with existing kubernetes and etcd services,
|
||||
`here <https://docs.openstack.org/qinling/latest/admin/install/config_kubernetes.html>`_
|
||||
is the guide for the detailed configuration.
|
||||
|
||||
Finalize installation
|
||||
---------------------
|
||||
|
||||
#. Create an upstart config for qinling-api, it could be named as
|
||||
``/etc/systemd/system/qinling-api.service``:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
cat <<EOF > /etc/systemd/system/qinling-api.service
|
||||
[Unit]
|
||||
Description = OpenStack Function Management Service API
|
||||
|
||||
[Service]
|
||||
ExecStart = /usr/local/bin/qinling-api
|
||||
User = qinling
|
||||
|
||||
[Install]
|
||||
WantedBy = multi-user.target
|
||||
EOF
|
||||
|
||||
#. Create an upstart config for qinling-engine, it could be named as
|
||||
``/etc/systemd/system/qinling-engine.service``:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
cat <<EOF > /etc/systemd/system/qinling-engine.service
|
||||
[Unit]
|
||||
Description = OpenStack Function Management Service Engine
|
||||
|
||||
[Service]
|
||||
ExecStart = /usr/local/bin/qinling-engine
|
||||
User = qinling
|
||||
|
||||
[Install]
|
||||
WantedBy = multi-user.target
|
||||
EOF
|
||||
|
||||
#. Enable and start qinling-api and qinling-engine:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl enable qinling-api
|
||||
# systemctl enable qinling-engine
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl start qinling-api
|
||||
# systemctl start qinling-engine
|
||||
|
||||
#. Verify that qinling-api and qinling-engine services are running:
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
# systemctl status qinling-api
|
||||
# systemctl status qinling-engine
|
@ -1,49 +0,0 @@
|
||||
..
|
||||
Copyright 2018 Catalyst IT Ltd
|
||||
All Rights Reserved.
|
||||
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.
|
||||
|
||||
Service Overview
|
||||
================
|
||||
|
||||
The Qinling project consists of the following components:
|
||||
|
||||
qinling-api
|
||||
A WSGI app that authenticates and routes requests to qinling-engine after
|
||||
a preliminary handling for the request.
|
||||
|
||||
qinling-engine
|
||||
A standalone service whose purpose is to process operations such as runtime
|
||||
maintenance, function execution operations, function autoscaling, etc.
|
||||
|
||||
kubernetes
|
||||
Qinling uses kubernetes as the default backend orchestrator, in order to
|
||||
manage and maintain the underlying pods to run the functions.
|
||||
|
||||
database
|
||||
Qinling needs to interact with the database(usually MySQL) to store and
|
||||
retrieve resource information.
|
||||
|
||||
etcd
|
||||
etcd is a distributed key-value store that provides fast read/write
|
||||
operations for some specific internal resources in Qinling such as the
|
||||
mapping from functions to the function services, mapping from function to the
|
||||
workers, etc. In addition, etcd provides the locking mechanism in Qinling.
|
||||
|
||||
Messaging queue
|
||||
Routes information between the Qinling processes.
|
||||
|
||||
Additionally, users can interact with Qinling service either by sending HTTP
|
||||
request or using openstack CLI provided by
|
||||
`python-qinlingclient <https://docs.openstack.org/python-qinlingclient/latest/>`_.
|
||||
Qinling Horizon dashboard is also available
|
||||
`here <https://docs.openstack.org/qinling-dashboard/latest/>`_.
|
@ -1,33 +0,0 @@
|
||||
..
|
||||
Copyright 2010-2011 United States Government as represented by the
|
||||
Administrator of the National Aeronautics and Space Administration.
|
||||
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.
|
||||
|
||||
Installation Guide
|
||||
==================
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
install/overview
|
||||
install/install_devstack
|
||||
install/install_ubuntu
|
||||
install/config_kubernetes
|
||||
|
||||
Indices and tables
|
||||
------------------
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`search`
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user