diff --git a/spec/0.0.1-alpha/README.md b/spec/0.0.1-alpha/README.md deleted file mode 100644 index 3c2ea91..0000000 --- a/spec/0.0.1-alpha/README.md +++ /dev/null @@ -1,325 +0,0 @@ -# Container Application Specification - -**NOTE**: This is a proof-of-concept effort that is expected to change dramatically. - -#### Version 0.0.1-alpha - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC 2119](http://www.ietf.org/rfc/rfc2119.txt). - -The Container Application Specification is licensed under [GNU Free Documentation License Version 1.3, 3 November 2008](https://www.gnu.org/copyleft/fdl.html). - -## Introduction - -The Container Application specification is a project to describe 'an Application' that is composed of a set of dependent Container Applications (containerapp). The Container Application specification defines a set of files required to describe such a containerapp. These files can then be used by other tools to deploy a containerapp. Developers may use other tools to generate most of the required containerapp files. Additional utilities can also take advantage of the resulting files, such as testing tools. - -### Versioning - -Within this specification we follow [the semantic versioning pattern](http://semver.org/spec/v2.0.0.html). - -## Revision History - -Version | Date | Notes ---- | --- | --- -0.0.1-alpha | 2015-mm-dd | TBD -v1-alpha | 2015-04-10 | reversioned to 0.0.1-alpha - - -## Specification - -### Format - -The files describing a containerapp in accordance with the Container Application Specification are represented using [YAML 1.2](http://www.yaml.org/spec/1.2/spec.html) or [JSON](http://json.org/). - -All field names in the specification are **case sensitive**. - -By convention, the containerapp definition file is named `Nulecule`. The Nulecule is the primary file defining the containerapp and it's relationship to dependencies. - -### Data Types - -Primitive data types in the Container Application Specification are based on the types supported by the [JSON-Schema Draft 4](http://json-schema.org/latest/json-schema-core.html#anchor8). - -The formats defined by the Container Application Specification are: - -Common Name | [`type`](#dataTypeType) | [`format`](#dataTypeFormat) | Comments ------------ | ------ | -------- | -------- -integer | `integer` | `int32` | signed 64 bits -float | `number` | `float` | -string | `string` | | -byte | `string` | `byte` | -boolean | `boolean` | | -date | `string` | `date` | As defined by `full-date` - [RFC3339](http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14) -dateTime | `string` | `date-time` | As defined by `date-time` - [RFC3339](http://xml2rfc.ietf.org/public/rfc/html/rfc3339.html#anchor14) -password | `string` | `password` | Used to hint UIs the input needs to be obscured. -URL | `URL` | `URL` | As defined by `URL` - [RFC3986 Section 1.1.3](https://tools.ietf.org/html/rfc3986#section-1.1.3) - -### Terminology - -Container Application - -Provider - - -### Schema - -#### Container Application Object - -This is the root object for the specification. - -##### Fields - -Field Name | Type | Description ----|:---:|--- -id | `string` | **Required.** The machine readable id of the Container Application. -specversion | `string` | **Required.** The semantic version string of the Container Application Specification used to describe the app. The value MUST be `"0.0.1-alpha"`. -metadata | [ [MetadataObject](#metadataObject) ] | **Optional** An object holding optional metadata related to the Container Application, this may include license information or human readable information. -graph | [ [GraphObject](#graphObject) ] | **Required.** A list of depending containerapps. Strings may either match a local sub directory or another containerapp-spec compliant containerapp image that can be pulled via a provider. -requirements | [ [RequirementsObject](#requirementsObject) ] | **Optional** A list of requirements of this containerapp. - - -#### Metadata Object - -Metadata for the Container Application. - -##### Fields - -Field Name | Type | Description ----|:---:|--- -name | `string` | **Optional** A human readable name of the containerapp. -appversion | `string` | **Optional** The semantic version string of the Container Application. -description | `string` | **Optional** A human readable description of the Container Application. This may contain information for the deployer of the containerapp. -license | [License Object](#licenseObject) | **Optional** The license information for the containerapp. -arbitrary_data | `string` | **Optional** Arbitrary `key: value` pair(s) of metadata. May contain nested objects. - -##### Metadata Object Example: - -```yaml -name: myapp -appversion: 1.0.0 -description: description of myapp -foo: bar -othermetadata: - foo: bar - files: file://path/to/local/file -``` - -```js -{ - "name": "myapp", - "appversion": "1.0.0", - "description": "description of myapp", - "foo": "bar", - "othermetadata": { - "foo": "bar", - "files": "file://path/to/local/file" - } -} -``` - -#### License Object - -License information for the Container Application. - -##### Fields - -Field Name | Type | Description ----|:---:|--- -name | `string` | **Required.** The human readable license name used for the Container Application, no format imposed. -url | `string` | **Optional** A URL to the license used for the API. MUST be in the format of a URL. - -##### License Object Example: - - -```yaml -name: Apache 2.0 -url: http://www.apache.org/licenses/LICENSE-2.0.html -``` -```js -{ - "name": "GNU GPL, Version 3", - "url": "https://www.gnu.org/copyleft/gpl.html" -} -``` - - -#### Graph Object - -The graph is a list of items (containerapps) the Container Application depends on. - -##### Fields of a Graph Item Object - -Field Name | Type | Description ----|:---:|--- -source | `URL` | **Optional** Source location of the Container Application, the source MUST be specified by a valid URL. If source is present, all other fields SHALL be ignored. -params | [ [ParamsObject](#paramsObject) ] | **Optional** A list of [ParamsObject](#paramsObject) that contain provider specific information. If params is present, source field SHALL be ignored. -artifacts | [ [ArtifactsObject](#artifactsObject) ] | **Optional** A list of [ArtifactsObject](#artifactsObject) that contain providr specific information. If artifacts is present, source field SHALL be ignored. - -##### Graph Item Object Example: - -```yaml ---- -atomicapp-zabbix-mongodb: - source: uri://registry.devops.example.com - # if no "artifacts" is specified, than it is an external Atomicapp to be pulled - # and installed from the specified source -``` - -```js -{ - "atomicapp-zabbix-mongodb": { - "source": "uri://registry.devops.example.com" - } -} -``` - -#### Parameters Object - -A set of Parameters the containerapp requires, has set some defaults for or needs user input. - -##### Fields - -Field Name | Type | Description ----|:---:|--- -description | `string` | **Required.** A human readable description of the parameter. -constraints | [ConstraintObject](#constraintObject) | **Optional** An optional definition of constraints to the parameter. -default | `string` | **Optional** An optional default value for the parameter. - -##### Parameters Object Example: - -```yaml -description: mongoDB Admin password -constraints: - - allowed_pattern: "[A-Z0-9]+" - description: Must consist of characters and numbers only. -``` -```js -{ - "description": "mongoDB Admin password", - "constraints": [ - { - "allowed_pattern": "[A-Z0-9]+", - "description": "Must consist of characters and numbers only." - } - ] -} -``` - -#### Constraint Object - -Constraints to the parameter. - -##### Fields - -Field Name | Type | Description ----|:---:|--- -allowed_pattern | `string` | **Required.** A regexp declaring the allowed pattern. -description | `string` | **Required.** A human readable description of the parameter. - - - -#### Requirements Object - -The list of requirements of the Container Application. It may be [Storage Requirement Objects](#storageRequirementsObject) (for a persistent Volume). - - -#### Storage Requirements Object - -This describes a requirement for persistent, read-only or read-write storage that should be available to the containerapp on runtime. The name of this object MUST be `"persistentVolume"`. - -##### Fields of Storage Requirement - -Field Name | Type | Description ----|:---:|--- -name | `string` | **Required.** A name associated with the storage requirement. -accessModes | `string` | **Required.** May be `"ReadWrite"` or `"ReadOnly"`. -size | `integer` | **Required.** Size of required the storage. - -##### Storage Requirement Example: - -```yaml ---- -- persistentVolume: - name: "var-lib-mongodb-data" - accessMode: "ReadWrite" - size: 4 # GB by default -``` -```js - { - "persistentVolume": { - "name": "var-lib-mongodb-data", - "accessMode": "ReadWrite", - "size": 4 - } - } -``` - - -#### Artifacts Object - -The Artifacts Object describes a list of provider specific artifact items. These artifact items will be used during installation of the containerapp to deploy it to the provider. Each artifact item is a `URL`. - -##### Artifacts Example: - -```yaml ---- -artifacts: # list of files to be processed by the provider selected at install-time - atomicplatform: - - file://relative/path/pod.json.tmpl - - https://git.devops.example.com - openshift: - - file://routes.json - - inherit: - - atomicplatform -``` -```js -{ - "artifacts": { - "atomicplatform": [ - "file://relative/path/pod.json.tmpl", - "https://git.devops.example.com" - ], - "openshift": [ - "file://routes.json", - { - "inherit": [ - "atomicplatform" - ] - } - ] - } -} -``` - - -## Directory Layout - -``` -├── Nulecule -├── Dockerfile -├── -│ ├── ... -│ └── -└── README.md -``` - -* `Nulecule`: Container Application definition -* `Dockerfile`: standard packaging for this containerapp -* ``: directories of provider-specific files referenced in a containerapp definition file - * `PROVIDER_FILES`: provider-specific files necessary for deploying to provider -* `README.md`: information for deploying this application - - -## README.md - -The README.md is the human-readable document. It describes the containerapp in enough detail so an operator can make parameterization and other deployment decisions. - -NOTE: This is optional. It is possible for some applications to be "self-describing" through well-written descriptions and input validation. - - -## Conventions - -A few conventions are used in the context of Container Applications. - -### Parameters for Providers - -Each provider in the [ArtifactsObject](#artifactsObject) of the [GraphObject](#graphObject) may correspond to a containerapp level [ParamsObject](#paramsObject). - diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/Dockerfile b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/Dockerfile deleted file mode 100644 index 7666e3d..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM scratch - -ADD / /application-entity/ diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/Nulecule b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/Nulecule deleted file mode 100644 index aad31b9..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/Nulecule +++ /dev/null @@ -1,62 +0,0 @@ ---- -specversion: 0.0.1-alpha -# 0.0.1-alpha requires: -# - Docker 1.6 or later -# - OpenShift3 0.4 or later -# - Atomic Host 7.1.1 or later -id: Atomicapp-mongoDB -metadata: - name: Atomicapp mongoDB - appversion: 2.4 - description: This is a mongoDB 2.4 Atomicapp - license: - name: GNU AFFERO GENERAL PUBLIC LICENSE, Version 3 - url: https://www.gnu.org/licenses/agpl-3.0.html -graph: - atomicapp-zabbix-mongodb: - source: uri://registry.devops.example.com - # if no artifacts is specified, than it is an external Atomicapp to be pulled - # and installed from the specified source - atomicapp-backupagent-mongodb: - params: - frequency: - description: How often shall the backup be performed? - default: daily - retentiontime: - description: For how long shall backups be kept? - default: 60 # days - confidential: - description: Does this backup container confidential data? - default: true - artifacts: # list of files to be processed by the provider selected on install-time - atomicplatform: - - file://relative/path/pod.json.tmpl - - https://git.devops.example.com - openshift: - - file://routes.json - - inherit: - - atomicplatform - docker: - - file://systemd/mongodb-service.tmpl - atomichost: - - file://pod.json.tmpl - - file://service.json.tmpl -requirements: - persistentVolume: - name: "var-lib-mongodb-data" - accessMode: "ReadWrite" - size: 4 # GB by default -params: - mongodb_admin_password: - description: mongoDB administrator password - constraints: - - allowed_pattern: "[a-zA-Z0-9]+" - description: Must consist of characters and numbers only. - openshift: - labels: - - eu-west-1 - - eu-west-1a - - qe - atomichost: - labels: - - devel diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/README.md b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/README.md deleted file mode 100644 index 48c057c..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/README.md +++ /dev/null @@ -1,4 +0,0 @@ -This is an mongoDB 2.4 Atomicapp! - -required parameters: - mongodb_admin_password diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/database_rc.json b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/database_rc.json deleted file mode 100644 index 2c1cb87..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/database_rc.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "id": "database", - "kind": "ReplicationController", - "apiVersion": "v1beta1", - "desiredState": { - "replicas": 1, - "replicaSelector": {"name": "database"}, - "podTemplate": { - "desiredState": { - "manifest": { - "containers": [ - { - "env": [ - { - "name": "MYSQL_USER", - "value": "${MYSQL_USER}" - }, - { - "name": "MYSQL_PASSWORD", - "value": "${MYSQL_PASSWORD}" - }, - { - "name": "MYSQL_DATABASE", - "value": "${MYSQL_DATABASE}" - } - ], - "image": "openshift/mysql-55-centos7", - "name": "ruby-helloworld-database", - "ports": [ - { - "containerPort": 3306 - } - ] - } - ], - "version": "v1beta1" - } - }, - "labels": { - "name": "database" - } - } - } -} diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/database_service.json b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/database_service.json deleted file mode 100644 index b3ee5f8..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/database_service.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "apiVersion": "v1beta1", - "containerPort": 3306, - "id": "database", - "kind": "Service", - "port": 5434, - "selector": { - "name": "database" - } -} diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/frontend_rc.json b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/frontend_rc.json deleted file mode 100644 index 09566c4..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/frontend_rc.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "id": "frontend", - "kind": "ReplicationController", - "apiVersion": "v1beta1", - "desiredState": { - "replicas": 1, - "replicaSelector": {"name": "frontend"}, - "podTemplate": { - "desiredState": { - "manifest": { - "containers": [ - { - "env": [ - { - "name": "ADMIN_USERNAME", - "value": "${ADMIN_USERNAME}" - }, - { - "name": "ADMIN_PASSWORD", - "value": "${ADMIN_PASSWORD}" - }, - { - "name": "MYSQL_USER", - "value": "${MYSQL_USER}" - }, - { - "name": "MYSQL_PASSWORD", - "value": "${MYSQL_PASSWORD}" - }, - { - "name": "MYSQL_DATABASE", - "value": "${MYSQL_DATABASE}" - } - ], - "image": "origin-ruby-sample", - "name": "ruby-helloworld", - "ports": [ - { - "containerPort": 8080 - } - ] - } - ], - "version": "v1beta1" - } - }, - "labels": { - "name": "frontend" - } - } - } -} diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/frontend_service.json b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/frontend_service.json deleted file mode 100644 index baf00d8..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/kubernetes/frontend_service.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "apiVersion": "v1beta1", - "containerPort": 8080, - "id": "frontend", - "kind": "Service", - "port": 5432, - "selector": { - "name": "frontend" - } -} diff --git a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/openshift/route.json b/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/openshift/route.json deleted file mode 100644 index d587d99..0000000 --- a/spec/0.0.1-alpha/examples/atomicapp-mongodb-24/openshift/route.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "apiVersion": "v1beta1", - "host": "${HOSTNAME}", - "id": "sample-app-secure", - "kind": "Route", - "metadata": { - "name": "route-edge" - }, - "serviceName": "frontend", - "tls": { - "caCertificate": "-----BEGIN CERTIFICATE-----\\nMIIEFzCCAv+gAwIBAgIJALK1iUpF2VQLMA0GCSqGSIb3DQEBBQUAMIGhMQswCQYD\\nVQQGEwJVUzELMAkGA1UECAwCU0MxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoG\\nA1UECgwTRGVmYXVsdCBDb21wYW55IEx0ZDEQMA4GA1UECwwHVGVzdCBDQTEaMBgG\\nA1UEAwwRd3d3LmV4YW1wbGVjYS5jb20xIjAgBgkqhkiG9w0BCQEWE2V4YW1wbGVA\\nZXhhbXBsZS5jb20wHhcNMTUwMTEyMTQxNTAxWhcNMjUwMTA5MTQxNTAxWjCBoTEL\\nMAkGA1UEBhMCVVMxCzAJBgNVBAgMAlNDMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkx\\nHDAaBgNVBAoME0RlZmF1bHQgQ29tcGFueSBMdGQxEDAOBgNVBAsMB1Rlc3QgQ0Ex\\nGjAYBgNVBAMMEXd3dy5leGFtcGxlY2EuY29tMSIwIAYJKoZIhvcNAQkBFhNleGFt\\ncGxlQGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\\nw2rK1J2NMtQj0KDug7g7HRKl5jbf0QMkMKyTU1fBtZ0cCzvsF4CqV11LK4BSVWaK\\nrzkaXe99IVJnH8KdOlDl5Dh/+cJ3xdkClSyeUT4zgb6CCBqg78ePp+nN11JKuJlV\\nIG1qdJpB1J5O/kCLsGcTf7RS74MtqMFo96446Zvt7YaBhWPz6gDaO/TUzfrNcGLA\\nEfHVXkvVWqb3gqXUztZyVex/gtP9FXQ7gxTvJml7UkmT0VAFjtZnCqmFxpLZFZ15\\n+qP9O7Q2MpsGUO/4vDAuYrKBeg1ZdPSi8gwqUP2qWsGd9MIWRv3thI2903BczDc7\\nr8WaIbm37vYZAS9G56E4+wIDAQABo1AwTjAdBgNVHQ4EFgQUugLrSJshOBk5TSsU\\nANs4+SmJUGwwHwYDVR0jBBgwFoAUugLrSJshOBk5TSsUANs4+SmJUGwwDAYDVR0T\\nBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaMJ33zAMV4korHo5aPfayV3uHoYZ\\n1ChzP3eSsF+FjoscpoNSKs91ZXZF6LquzoNezbfiihK4PYqgwVD2+O0/Ty7UjN4S\\nqzFKVR4OS/6lCJ8YncxoFpTntbvjgojf1DEataKFUN196PAANc3yz8cWHF4uvjPv\\nWkgFqbIjb+7D1YgglNyovXkRDlRZl0LD1OQ0ZWhd4Ge1qx8mmmanoBeYZ9+DgpFC\\nj9tQAbS867yeOryNe7sEOIpXAAqK/DTu0hB6+ySsDfMo4piXCc2aA/eI2DCuw08e\\nw17Dz9WnupZjVdwTKzDhFgJZMLDqn37HQnT6EemLFqbcR0VPEnfyhDtZIQ==\\n-----END CERTIFICATE-----", -"certificate": "-----BEGIN CERTIFICATE-----\\nMIIDIjCCAgqgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBoTELMAkGA1UEBhMCVVMx\\nCzAJBgNVBAgMAlNDMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNVBAoME0Rl\\nZmF1bHQgQ29tcGFueSBMdGQxEDAOBgNVBAsMB1Rlc3QgQ0ExGjAYBgNVBAMMEXd3\\ndy5leGFtcGxlY2EuY29tMSIwIAYJKoZIhvcNAQkBFhNleGFtcGxlQGV4YW1wbGUu\\nY29tMB4XDTE1MDExMjE0MTk0MVoXDTE2MDExMjE0MTk0MVowfDEYMBYGA1UEAwwP\\nd3d3LmV4YW1wbGUuY29tMQswCQYDVQQIDAJTQzELMAkGA1UEBhMCVVMxIjAgBgkq\\nhkiG9w0BCQEWE2V4YW1wbGVAZXhhbXBsZS5jb20xEDAOBgNVBAoMB0V4YW1wbGUx\\nEDAOBgNVBAsMB0V4YW1wbGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMrv\\ngu6ZTTefNN7jjiZbS/xvQjyXjYMN7oVXv76jbX8gjMOmg9m0xoVZZFAE4XyQDuCm\\n47VRx5Qrf/YLXmB2VtCFvB0AhXr5zSeWzPwaAPrjA4ebG+LUo24ziS8KqNxrFs1M\\nmNrQUgZyQC6XIe1JHXc9t+JlL5UZyZQC1IfaJulDAgMBAAGjDTALMAkGA1UdEwQC\\nMAAwDQYJKoZIhvcNAQEFBQADggEBAFCi7ZlkMnESvzlZCvv82Pq6S46AAOTPXdFd\\nTMvrh12E1sdVALF1P1oYFJzG1EiZ5ezOx88fEDTW+Lxb9anw5/KJzwtWcfsupf1m\\nV7J0D3qKzw5C1wjzYHh9/Pz7B1D0KthQRATQCfNf8s6bbFLaw/dmiIUhHLtIH5Qc\\nyfrejTZbOSP77z8NOWir+BWWgIDDB2//3AkDIQvT20vmkZRhkqSdT7et4NmXOX/j\\njhPti4b2Fie0LeuvgaOdKjCpQQNrYthZHXeVlOLRhMTSk3qUczenkKTOhvP7IS9q\\n+Dzv5hqgSfvMG392KWh5f8xXfJNs4W5KLbZyl901MeReiLrPH3w=\\n-----END CERTIFICATE-----", -"key": "-----BEGIN PRIVATE KEY-----\\nMIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAMrvgu6ZTTefNN7j\\njiZbS/xvQjyXjYMN7oVXv76jbX8gjMOmg9m0xoVZZFAE4XyQDuCm47VRx5Qrf/YL\\nXmB2VtCFvB0AhXr5zSeWzPwaAPrjA4ebG+LUo24ziS8KqNxrFs1MmNrQUgZyQC6X\\nIe1JHXc9t+JlL5UZyZQC1IfaJulDAgMBAAECgYEAnxOjEj/vrLNLMZE1Q9H7PZVF\\nWdP/JQVNvQ7tCpZ3ZdjxHwkvf//aQnuxS5yX2Rnf37BS/TZu+TIkK4373CfHomSx\\nUTAn2FsLmOJljupgGcoeLx5K5nu7B7rY5L1NHvdpxZ4YjeISrRtEPvRakllENU5y\\ngJE8c2eQOx08ZSRE4TkCQQD7dws2/FldqwdjJucYijsJVuUdoTqxP8gWL6bB251q\\nelP2/a6W2elqOcWId28560jG9ZS3cuKvnmu/4LG88vZFAkEAzphrH3673oTsHN+d\\nuBd5uyrlnGjWjuiMKv2TPITZcWBjB8nJDSvLneHF59MYwejNNEof2tRjgFSdImFH\\nmi995wJBAMtPjW6wiqRz0i41VuT9ZgwACJBzOdvzQJfHgSD9qgFb1CU/J/hpSRIM\\nkYvrXK9MbvQFvG6x4VuyT1W8mpe1LK0CQAo8VPpffhFdRpF7psXLK/XQ/0VLkG3O\\nKburipLyBg/u9ZkaL0Ley5zL5dFBjTV2Qkx367Ic2b0u9AYTCcgi2DsCQQD3zZ7B\\nv7BOm7MkylKokY2MduFFXU0Bxg6pfZ7q3rvg8gqhUFbaMStPRYg6myiDiW/JfLhF\\nTcFT4touIo7oriFJ\\n-----END PRIVATE KEY-----", -"termination": "edge" - } -} diff --git a/spec/0.0.1-alpha/examples/template/Nulecule b/spec/0.0.1-alpha/examples/template/Nulecule deleted file mode 100644 index 3944793..0000000 --- a/spec/0.0.1-alpha/examples/template/Nulecule +++ /dev/null @@ -1,39 +0,0 @@ ---- -id: 191131-abcd -specversion: 0.0.1-alpha - -metadata: - name: my app - appversion: v1.0.0 - description: some application - license: - name: Apache 2.0 - url: www.example.com/license - -graph: - somedb: - source: docker://registry.example.com/some/database - - mycode: - params: - username: - description: username - constraints: - - allowed_pattern: "[A-Z0-9]+" - description: Must consist of characters and numbers only. - password: - description: passphrase - artifacts: - provider1: - - file://providers/pod.json - - file://providers/service.json - provider2: - - file://providers/file.json - - inherit: - - provider1 - -requirements: -- persistentVolume: - name: "var-lib-data" - accessMode: "ReadWrite" - size: 4 diff --git a/spec/0.0.1-alpha/graph.json b/spec/0.0.1-alpha/graph.json deleted file mode 100644 index 17d5789..0000000 --- a/spec/0.0.1-alpha/graph.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Graph", - "description": "A list of depending containerapps. Strings may either match a local sub directory or another containerapp-spec compliant containerapp image that can be pulled via a provider.", - "type": "object", - "additionalProperties" : { - "$ref": "#/definitions/component" - }, - - "definitions": { - "component": { - "description": "ID of a component", - "type": "object", - "properties": { - "source": { - "description": "Source location of the Container Application, the source MUST be specified by a valid URL. If source is present, all other fields SHALL be ignored.", - "type": "string", - "default": "null" - }, - "params": { - "description": "A list of ParamsObject that contain provider specific information. If params is present, source field SHALL be ignored.", - "type": "object", - "additionalProperties": { - "$ref": "file:param.json" - } - }, - "artifacts": { - "description": "A list of ArtifactsObject that contain provider specific information. If artifacts is present, source field SHALL be ignored.", - "type": "object", - "additionalProperties": { - "$ref": "file:provider.json" - } - } - } - } - } -} diff --git a/spec/0.0.1-alpha/license.json b/spec/0.0.1-alpha/license.json deleted file mode 100644 index 715961d..0000000 --- a/spec/0.0.1-alpha/license.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "License", - "description": "License information for the Container Application.", - "type": "object", - "required": [ "name" ], - "properties": { - "name": { - "description": "The human readable license name used for the Container Application, no format imposed.", - "type": "string", - "value": "null" - }, - "url": { - "description": "A URL to the license used for the API. MUST be in the format of a URL.", - "type": "string", - "value": "null" - } - } -} diff --git a/spec/0.0.1-alpha/metadata.json b/spec/0.0.1-alpha/metadata.json deleted file mode 100644 index d234035..0000000 --- a/spec/0.0.1-alpha/metadata.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Metadata", - "description": "An object holding optional metadata related to the Container Application, this may include license information or human readable information.", - "type": "object", - "properties": { - "name": { - "description": "A human readable name of the containerapp.", - "type": "string", - "default": "null" - }, - "appversion": { - "description": "The semantic version string of the Container Application.", - "type": "string", - "default": "null" - }, - "description": { - "description": "A human readable description of the Container Application. This may contain information for the deployer of the containerapp.", - "type": "string", - "default": "null" - }, - "license": { - "$ref": "file:license.json" - } - } -} diff --git a/spec/0.0.1-alpha/param.json b/spec/0.0.1-alpha/param.json deleted file mode 100644 index 6040593..0000000 --- a/spec/0.0.1-alpha/param.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Parameter", - "description": "Name of the parameter as used in artifacts", - "type": "object", - "required": [ "description" ], - "properties": { - "description": { - "description": "A human readable description of the parameter.", - "type": "string", - "default": "null" - }, - "constraints": { - "$ref": "file:constraint.json" - }, - "default": { - "description": "An optional default value for the parameter.", - "type": "string", - "default": "null" - } - } -} diff --git a/spec/0.0.1-alpha/provider.json b/spec/0.0.1-alpha/provider.json deleted file mode 100644 index c1f1174..0000000 --- a/spec/0.0.1-alpha/provider.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Provider", - "description": "Name of the provider", - "type": "array", - "items": { - "oneOf": [ { "$ref": "#/definitions/path" }, { "$ref": "#/definitions/inheritance" } ] - }, - - "definitions": { - "path": { - "description": "Path to the artifact", - "type": "string", - "value": "null" - }, - "inheritance": { - "type": "object", - "properties": { - "inherit": { - "name": "inherit", - "description": "List of components whose artifacts will be added to the list of artifacts for the provider.", - "type": "array" - } - } - } - } -} diff --git a/spec/0.0.1-alpha/requirements/persistentvolume.json b/spec/0.0.1-alpha/requirements/persistentvolume.json deleted file mode 100644 index 1e6d47a..0000000 --- a/spec/0.0.1-alpha/requirements/persistentvolume.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "PersistentVolume", - "description": "This describes a requirement for persistent, read-only or read-write storage that should be available to the containerapp on runtime. The name of this object MUST be 'persistentVolume'", - "type": "object", - "properties": { - "persistentVolume": { - "type": "object", - "required": [ "name", "accessMode", "size" ], - "properties": { - "name": { - "description": "A name associated with the storage requirement.", - "type": "string", - "value": "null" - }, - "accessMode": { - "description": "Access mode in which the persitent volume will be available", - "type": "string", - "enum": [ - "ReadWrite", - "ReadOnly" - ] - }, - "size": { - "description": "Size of the required storage.", - "type": "number", - "minimum": 0 - } - } - } - }, - "additionalProperties": false -} diff --git a/spec/0.0.1-alpha/schema.json b/spec/0.0.1-alpha/schema.json deleted file mode 100644 index 95ceefb..0000000 --- a/spec/0.0.1-alpha/schema.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Schema", - "version": "0.0.1-alpha", - "description": "The Container Application specification is a project to describe 'an Application' that is composed of a set of dependent Container Applications (containerapp). The Container Application specification defines a set of files required to describe such a containerapp. These files can then be used by other tools to deploy a containerapp. Developers may use other tools to generate most of the required containerapp files. Additional utilities can also take advantage of the resulting files, such as testing tools.", - "required": [ "id", "specversion", "graph" ], - "properties": { - "id": { - "description": "The machine readable id of the Container Application.", - "type": "string", - "default": "null" - }, - "specversion": { - "description": "The semantic version string of the Container Application Specification used to describe the app. The value MUST be '0.0.1-alpha'.", - "type": "string", - "default": "0.0.1-alpha" - }, - "metadata": { - "$ref": "file:metadata.json" - }, - "graph": { - "$ref": "file:graph.json" - }, - "requirements": { - "$ref": "file:requirement.json" - } - } -} diff --git a/spec/0.0.2/constraint.json b/spec/0.0.2/constraint.json deleted file mode 100644 index 6d7f747..0000000 --- a/spec/0.0.2/constraint.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Constraint", - "description": "Constraint to the parameter.", - "type": "array", - "items": { - "type": "object", - "required": [ "allowed_pattern", "description" ], - "properties": { - "allowed_pattern": { - "description": "A regular expression pattern.", - "type": "string", - "default": "null" - }, - "description": { - "description": "A human readable description of the constraint.", - "type": "string", - "default": "null" - } - } - } -} diff --git a/spec/0.0.2/examples/template/artifacts/provider1/pod.json b/spec/0.0.2/examples/template/artifacts/provider1/pod.json deleted file mode 100644 index e69de29..0000000 diff --git a/spec/0.0.2/examples/template/artifacts/provider1/service.json b/spec/0.0.2/examples/template/artifacts/provider1/service.json deleted file mode 100644 index e69de29..0000000 diff --git a/spec/0.0.2/examples/template/artifacts/provider2/file.json b/spec/0.0.2/examples/template/artifacts/provider2/file.json deleted file mode 100644 index e69de29..0000000 diff --git a/spec/0.0.2/requirement.json b/spec/0.0.2/requirement.json deleted file mode 100644 index fa97fe3..0000000 --- a/spec/0.0.2/requirement.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-04/schema#", - - "title": "Requirements", - "description": "Requirement objects", - "type": "array", - "items": { - "oneOf": [ - { "$ref": "file:requirements/persistentvolume.json" } - ] - } -} diff --git a/spec/0.0.2/README.md b/spec/README.md similarity index 100% rename from spec/0.0.2/README.md rename to spec/README.md diff --git a/spec/0.0.1-alpha/constraint.json b/spec/constraint.json similarity index 100% rename from spec/0.0.1-alpha/constraint.json rename to spec/constraint.json diff --git a/spec/0.0.2/examples/template/Dockerfile b/spec/examples/template/Dockerfile similarity index 100% rename from spec/0.0.2/examples/template/Dockerfile rename to spec/examples/template/Dockerfile diff --git a/spec/0.0.2/examples/template/Nulecule b/spec/examples/template/Nulecule similarity index 100% rename from spec/0.0.2/examples/template/Nulecule rename to spec/examples/template/Nulecule diff --git a/spec/0.0.1-alpha/examples/template/providers/pod.json b/spec/examples/template/artifacts/provider1/pod.json similarity index 100% rename from spec/0.0.1-alpha/examples/template/providers/pod.json rename to spec/examples/template/artifacts/provider1/pod.json diff --git a/spec/0.0.1-alpha/examples/template/providers/service.json b/spec/examples/template/artifacts/provider1/service.json similarity index 100% rename from spec/0.0.1-alpha/examples/template/providers/service.json rename to spec/examples/template/artifacts/provider1/service.json diff --git a/spec/0.0.1-alpha/examples/template/providers/file.json b/spec/examples/template/artifacts/provider2/file.json similarity index 100% rename from spec/0.0.1-alpha/examples/template/providers/file.json rename to spec/examples/template/artifacts/provider2/file.json diff --git a/spec/0.0.2/files b/spec/files similarity index 100% rename from spec/0.0.2/files rename to spec/files diff --git a/spec/0.0.2/graph.json b/spec/graph.json similarity index 100% rename from spec/0.0.2/graph.json rename to spec/graph.json diff --git a/spec/0.0.2/license.json b/spec/license.json similarity index 100% rename from spec/0.0.2/license.json rename to spec/license.json diff --git a/spec/0.0.2/metadata.json b/spec/metadata.json similarity index 100% rename from spec/0.0.2/metadata.json rename to spec/metadata.json diff --git a/spec/0.0.2/param.json b/spec/param.json similarity index 100% rename from spec/0.0.2/param.json rename to spec/param.json diff --git a/spec/0.0.2/provider.json b/spec/provider.json similarity index 100% rename from spec/0.0.2/provider.json rename to spec/provider.json diff --git a/spec/0.0.1-alpha/requirement.json b/spec/requirement.json similarity index 100% rename from spec/0.0.1-alpha/requirement.json rename to spec/requirement.json diff --git a/spec/0.0.2/requirements/persistentvolume.json b/spec/requirements/persistentvolume.json similarity index 100% rename from spec/0.0.2/requirements/persistentvolume.json rename to spec/requirements/persistentvolume.json diff --git a/spec/0.0.2/schema.json b/spec/schema.json similarity index 100% rename from spec/0.0.2/schema.json rename to spec/schema.json