Support Qinling function aliases
https://storyboard.openstack.org/#!/story/2001588
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 (for example, to invoke the function) without having to know the specific
version the alias is pointing to. Function aliases enable the following use
cases:
- Easier support for promotion of new versions of functions and rollback when
needed.
- Simplify management of event source mappings.
Problem description
- As a function developer, you want to create an alias that points to function
version, and remapping of aliases to different function versions.
- As an application developer who relies on the Qinling functions, I want a
safe and sustainable way to call the functions without changing the
applications after the function is updated.
Proposed change
Data model impact
A new database table needs to be created to store the mappings from alias to
function and function version.
REST API impact
- Create function alias that points to the specified function version. After
creation, Qinling returns the function alias information, including
function id, version id, alias name, description
and timestamps.
- POST
/aliases
- Parameters: function_id
- Parameters: description
- Parameters: function_version
- Parameters: name
- the ‘name’ must be unique within the project
- Update function alias. Update the function id and version to which the alias
points and alias description.
- PUT
/aliases/<alias_name>
- Parameters: function_id
- Parameters: description
- Parameters: function version
- Get the specified function alias information.
- GET
/aliases/<alias_name>
- List the aliases.
- Delete specific function alias. When deleting alias, need to check if there is
any webhook/running job using the alias.
- DELETE
/aliases/<alias_name>
- Create execution. Create execution with alias, so the execution will be
created with the function id and version number the alias points to.
- Create job. Create job with alias, so the job will be created with the
function id and version number the alias points to.
- Create webhook. Create webhook with alias, so the webhook will be
created with the function id and version number the alias points to.
- Delete function. Qinling needs to check if there is any alias using that
function, if there is alias associated with the function, the function
deletion will fail.
- Delete function version. Qinling needs to check if there is any alias using that
function version, if there is alias associated with the function version,
the function version deleteion will fail.
End user impact
All the API changes should be supported in CLI.
Deployer impact
Database migration script is provided.
Testing
Pay attention to the notes written in REST API impact
section.