403 lines
9.3 KiB
ReStructuredText
403 lines
9.3 KiB
ReStructuredText
===============================
|
||
Application definition language
|
||
===============================
|
||
|
||
There is a description of current syntax of application definition framework.
|
||
|
||
Application definition template
|
||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. sourcecode:: yaml
|
||
|
||
service:
|
||
name: service-name
|
||
kind: DaemonSet
|
||
ports:
|
||
- internal-port:external-port
|
||
headless: true
|
||
hostNetwork: true
|
||
hostPID: true
|
||
antiAffinity: local
|
||
annotations:
|
||
pod:
|
||
description: frontend ports
|
||
service:
|
||
description: frontend service
|
||
containers:
|
||
- name: container-name
|
||
image: container-image
|
||
probes:
|
||
readiness: readiness.sh
|
||
liveness: liveness.sh
|
||
volumes:
|
||
- name: volume-name
|
||
type: host
|
||
path: /path
|
||
pre:
|
||
- name: service-bootstrap
|
||
dependencies:
|
||
- some-service
|
||
- some-other-service
|
||
type: single
|
||
image: some_image
|
||
command: /tmp/bootstrap.sh
|
||
files:
|
||
- bootstrap.sh
|
||
user: user
|
||
- name: db-sync
|
||
dependencies:
|
||
- some-dep
|
||
command: some command
|
||
user: user
|
||
daemon:
|
||
dependencies:
|
||
- demon-dep
|
||
command: daemon.sh
|
||
files:
|
||
- config.conf
|
||
user: user
|
||
post:
|
||
- name: post-command
|
||
dependencies:
|
||
- some-service
|
||
- some-other-service
|
||
type: single
|
||
command: post.sh
|
||
files:
|
||
- config.conf
|
||
|
||
files:
|
||
config.conf:
|
||
path: /etc/service/config.conf
|
||
content: config.conf.j2
|
||
perm: "0600"
|
||
user: user
|
||
bootstrap.sh:
|
||
path: /tmp/bootstrap.sh
|
||
content: bootstrap.sh.j2
|
||
perm: "0755"
|
||
|
||
|
||
Parameters description
|
||
~~~~~~~~~~~~~~~~~~~~~~
|
||
|
||
.. _service:
|
||
|
||
service
|
||
-------
|
||
|
||
.. list-table::
|
||
:widths: 10 35 7 15 7
|
||
:header-rows: 1
|
||
|
||
* - Name
|
||
- Description
|
||
- Required
|
||
- Schema
|
||
- Default
|
||
* - name
|
||
- Name of the service.
|
||
- true
|
||
- string
|
||
- --
|
||
* - kind
|
||
- Kind of k8s object to use for containers deployment.
|
||
- false
|
||
- one of: ["Deployment", "DaemonSet", "StatefulSet"]
|
||
- Deployment
|
||
* - containers
|
||
- List of containers under multi-container pod.
|
||
- true
|
||
- container_ array
|
||
- --
|
||
* - ports
|
||
- k8s Service will be created if specified (with NodePort type for now).
|
||
Only internal or both internal:external ports can be specified.
|
||
- false
|
||
- internal-port: external-port array
|
||
- --
|
||
* - hostNetwork
|
||
- Use the host’s network namespace.
|
||
- false
|
||
- boolean
|
||
- false
|
||
* - headless
|
||
- Create headless service.
|
||
- false
|
||
- boolean
|
||
- false
|
||
* - hostPID
|
||
- Use the host’s pid namespace.
|
||
- false
|
||
- boolean
|
||
- false
|
||
* - strategy
|
||
- The strategy that should be used to replace old Pods by new ones.
|
||
- false
|
||
- one of: ["RollingUpdate", "Recreate"]
|
||
- RollingUpdate
|
||
* - antiAffinity
|
||
- Restrict scheduling of pods on the same host:
|
||
local - within namespace, global - within k8s cluster
|
||
- false
|
||
- one of: [null, "global", "local"]
|
||
- null
|
||
* - annotations
|
||
- pod - annotations for pods, service - annotations for service.
|
||
- false
|
||
- string dict
|
||
- null
|
||
|
||
.. _container:
|
||
|
||
container
|
||
---------
|
||
|
||
.. list-table::
|
||
:widths: 10 35 7 15 7
|
||
:header-rows: 1
|
||
|
||
* - Name
|
||
- Description
|
||
- Required
|
||
- Schema
|
||
- Default
|
||
* - name
|
||
- Name of the container. It will be used to track status in etcd.
|
||
- true
|
||
- string
|
||
- --
|
||
* - image
|
||
- Name of the image. registry, namespace, tag will be added by framework.
|
||
- true
|
||
- string
|
||
- --
|
||
* - probes
|
||
- Readiness, liveness or both checks can be defined. Exec action will be
|
||
used for both checks.
|
||
- false
|
||
- dict with two keys:
|
||
|
||
liveness:
|
||
cmd
|
||
|
||
readiness:
|
||
cmd
|
||
- --
|
||
* - volumes
|
||
- --
|
||
- false
|
||
- volume_ array
|
||
- --
|
||
* - pre
|
||
- List of commands that need to be executed before daemon process start.
|
||
- false
|
||
- command_ array
|
||
- --
|
||
* - daemon
|
||
- --
|
||
- true
|
||
- command_
|
||
- --
|
||
* - post
|
||
- The same as for “pre” except that post commands will be executed after
|
||
daemon process has been started.
|
||
- false
|
||
- command_ array
|
||
- --
|
||
* - env
|
||
- An array of environment variables defined in kubernetes way.
|
||
- false
|
||
- env_ array
|
||
- --
|
||
|
||
.. _env: http://kubernetes.io/docs/api-reference/v1/definitions/#_v1_envvar
|
||
|
||
.. _volume:
|
||
|
||
volume
|
||
------
|
||
|
||
.. list-table::
|
||
:widths: 10 35 7 15 7
|
||
:header-rows: 1
|
||
|
||
* - Name
|
||
- Description
|
||
- Required
|
||
- Schema
|
||
- Default
|
||
* - name
|
||
- Name of the volume.
|
||
- true
|
||
- string
|
||
- --
|
||
* - type
|
||
- host and empty-dir type supported for now.
|
||
- true
|
||
- one of: ["host", "empty-dir"]
|
||
- --
|
||
* - path
|
||
- Host path that should be mounted (only if type = "host").
|
||
- false
|
||
- string
|
||
- --
|
||
* - mount-path
|
||
- Mount path in container.
|
||
- false
|
||
- string
|
||
- path
|
||
* - readOnly
|
||
- Mount mode of the volume.
|
||
- false
|
||
- bool
|
||
- False
|
||
|
||
.. _command:
|
||
|
||
command
|
||
-------
|
||
|
||
.. list-table::
|
||
:widths: 10 35 7 15 7
|
||
:header-rows: 1
|
||
|
||
* - Name
|
||
- Description
|
||
- Required
|
||
- Schema
|
||
- Default
|
||
* - name
|
||
- Name of the command. Required only for `pre` and `post` with type
|
||
`single`.
|
||
-
|
||
- string
|
||
-
|
||
* - image
|
||
- Image that will be used to run the command. Can be used only for `pre`
|
||
and `post` with type `single`.
|
||
- false
|
||
- string
|
||
- same as for daemon
|
||
* - command
|
||
- --
|
||
- true
|
||
- string
|
||
- --
|
||
* - dependencies
|
||
- These keys will be polled from etcd before commands execution.
|
||
- false
|
||
- string array
|
||
- --
|
||
* - type
|
||
- type: single means that this command should be executed once per
|
||
openstack deployment. For commands with type: single Job object will be
|
||
created.
|
||
|
||
type: local (or if type is not specified) means that command will be
|
||
executed inside the same container as a daemon process.
|
||
- false
|
||
- one of: ["single", "local"]
|
||
- local
|
||
* - files
|
||
- List of the files that maps to the keys of files dict. It defines which
|
||
files will be rendered inside a container.
|
||
- false
|
||
- file_ keys array
|
||
- --
|
||
* - user
|
||
- --
|
||
- false
|
||
- string
|
||
- --
|
||
|
||
.. _files:
|
||
|
||
files
|
||
-----
|
||
|
||
.. list-table::
|
||
:widths: 35 10 7 15 7
|
||
:header-rows: 1
|
||
|
||
* - Name
|
||
- Description
|
||
- Required
|
||
- Schema
|
||
- Default
|
||
* - Name of the file to refer in files list of commands
|
||
- --
|
||
- false
|
||
- file_ array
|
||
- --
|
||
|
||
.. _file:
|
||
|
||
file
|
||
----
|
||
|
||
.. list-table::
|
||
:widths: 10 35 7 15 7
|
||
:header-rows: 1
|
||
|
||
* - Name
|
||
- Description
|
||
- Required
|
||
- Schema
|
||
- Default
|
||
* - path
|
||
- Destination path inside a container.
|
||
- true
|
||
- string
|
||
- --
|
||
* - content
|
||
- Name of the file under {{ service_repo }}/service/files directory. This
|
||
file will be rendered inside a container and moved to the destination
|
||
defined with path.
|
||
- true
|
||
- string
|
||
- --
|
||
* - perm
|
||
- --
|
||
- false
|
||
- string
|
||
- --
|
||
* - user
|
||
- --
|
||
- false
|
||
- string
|
||
- --
|
||
|
||
DSL versioning
|
||
~~~~~~~~~~~~~~
|
||
|
||
Some changes in CCP framework are backward compatible and some of them are not.
|
||
To prevent situations when service definitions are being processed by
|
||
incompatible version of CCP framework, DSL versioning has been implemented.
|
||
|
||
DSL versioning is based on Semantic Versioning model. Version has a format
|
||
``MAJOR.MINOR.PATCH`` and is being defined in ``dsl_version`` field of
|
||
:file:`fuel_ccp/__init__.py` module. Each service definition contains
|
||
``dsl_version`` field with the version of DSL it was implemented/updated for.
|
||
|
||
During the validation phase of :command:`ccp deploy` those versions will be
|
||
compared according to the following rules:
|
||
|
||
#. if DSL version of ``fuel-ccp`` is less than service's DSL version -
|
||
they are incompatible - error will be printed, deployment will be
|
||
aborted;
|
||
#. if ``MAJOR`` parts of these versions are different - they are incompatible
|
||
- error will be printed, deployment will be aborted;
|
||
#. otherwise they are compatible and deployment can be continued.
|
||
|
||
For ``dsl_version`` in ``fuel-ccp`` repository you should increment:
|
||
|
||
#. MAJOR version when you make incompatible changes in DSL;
|
||
#. MINOR version when you make backward-compatible changes in DSL;
|
||
#. PATCH version when you make fixes that do not change DSL, but affect
|
||
processing flow.
|
||
|
||
If you made a change in service definition that is not supposed to work with
|
||
the current ```dsl_version```, you should bump it to the minimal appropriate
|
||
number.
|