Skip to main content
Version: Develop

Service Plans

The a9s Service Broker can provide different services and service plans. Which services and service plans are provided can be configured in the specific service config for each service e.g. the config/postgresql.yml.example.

Service Plan Configuration

The configuration for each service plan looks the same. That's why we will have a exemplary look at the configuration of the postgresql-single-small plan of a9s PostgreSQL 13:

plans:
postgresql-single-small:
guid: a6747d74-580f-4520-98c5-5ffe3dc20b5a
description: 'a small single instance'
free: true
ssl: false
template_name: postgresql13-single
template_name_v2: postgresql13-single
default_placeholder_values:
vm_type: a9svs-postgresql-single-small
persistent_disk_type: a9svs-postgresql-single-small
migration_paths:
- postgresql-single-medium
- postgresql-single-big
- postgresql-replica-small
- postgresql-replica-medium
- postgresql-replica-big

Each service plan has the following properties:

  • name: The name of the service plan. Has to be unique within the service but can be used in other services as service plan name too. In this example postgresql-single-small.
  • guid: The distinct identifier of the service plan. Has to be unique across all services and service plans.
  • description: The description of the service plan.
  • free: If the plan can be used for free or not.
  • ssl: If the service instance is using SSL or not. Valid values: true/false. Default value: false.
  • [Deprecated] template_name: The name of the template that should be used when a service instance of this service plan is created.
  • template_name_v2: The name of the template that should be used when a service instance of this service plan is created.

In the following we will have a more detailed look at the properties default_placeholder_values and migration_paths.

Default Placeholder Values

The property default_placeholder_values is a list of values that will be replaced in the template that is used for the given service plan. The templates itself are YAML files that contain ERB tags with variables that can be replaced.

This is an example extract of the postgresql13-single template:

jobs:
- name: pg
vm_type: <%= vm_type %>
instances: 1
azs: [z3,z2,z1]
stemcell: ((stemcell_alias))
persistent_disk_type: <%= persistent_disk_type %>
networks:
- <%= network_type || "((service_network))" %>

Currently the a9s Service Broker supports the following placeholder values:

  • vm_type: The VM type that should be used for the service instance. Has to match one of the VM types that are defined in the cloud-config of your setup.
  • persistent_disk_type: The persistent disk type that should be used for the service instance. Has to match one of the disk types that are defined in the cloud-config of your setup.
  • network_type: The network that should be used in the service instance. Has to match one of the networks that are defined in the cloud-config of your setup.

Custom Parameter Configuration

Some SPIs allow the platform operator to give default values to custom parameters in the SPI configuration. If the platform operator doesn't configure the SPI configuration, the anynines defaults get used as described in the individual SPI configuration pages:

You can configure those properties per plan under the property custom_param_config. The same configuration structure applies.

For example, the following configuration for the plan postgresql-single-nano would set the max_connections custom parameter default value to 100 and would not allow the application developer to modify this value:

...
plans:
postgresql-single-nano:
custom_param_config:
max_connections:
default_value: 100
modifiable: false
...

IMPORTANT: When the platform operator configures the SPI's and a plan's custom parameter configuration, the plan's custom parameter configuration will completely replace the SPI's custom parameter configuration for that specific plan.

Let's take the following example for a SPI and plan configuration:

postgresql-spi:
service_instance:
custom_param_config:
max_connections:
default_value: 200
modifiable: true
metric_pg_database_size:
default_value: 600
modifiable: false
...
plans:
postgresql-single-nano:
custom_param_config:
max_connections:
default_value: 100
modifiable: false
...

In this case, an instance of plan postgresql-single-nano would be configured to set the max_connections default value to 100 and be not modifiable for the application developer. The custom parameter metric_pg_database_size would not be set to the values configured in the SPI configuration, but the SPI default values for that custom parameter.

Migration Paths

The migration_paths property defines to which service plans the given service plan can be migrated. In the example above the postgresql-single-small plan can be migrated to the plans:

  • postgresql-single-medium
  • postgresql-single-big
  • postgresql-replica-small
  • postgresql-replica-medium
  • postgresql-replica-big
Migration Limitations

The following limitations apply to all of the a9s Data Services:

  • You can only migrate to service plans of the same service. For example it is not possible to migrate a PostgreSQL 11 single-small service instance to a PostgreSQL 13 single-medium service instance.

  • The a9s Data Services do not support the migration to service plans with a smaller VM type, a smaller persistent disk type, or from clustered instances to single instances.

  • Currently, the a9s Data Services do not support plan upgrades from Non-SSL/TLS to SSL/TLS instances. We recommend that you create a new instance with SSL/TLS enabled and migrate your data to the new instance.

Redis 6 and Above

a9s Redis 6 and above do not support:

  • migration from single to cluster plans
  • non-SSL to SSL plans

Network Per Plan

In order to configure a different network per service plan, it is necessary to modify the service configuration and add network_type property under the default_placeholder_values property in each desired plan.

Example

In the following configuration snippet, the plan postgresql-single-nano has been configured to use the netwokk <your_desired_network>:

---
postgresql_service:
services:
a9s-postgresql13:
(...)
plans:
postgresql-single-nano:
default_placeholder_values:
network_type: "<your_desired_network>"
vm_type: a9svs-postgresql-single-nano
(...)
postgresql-single-small:
default_placeholder_values:
vm_type: a9svs-postgresql-single-small
(...)

On the other hand, the plan postgresql-single-small in the above example will be deployed to the default network, given by the template variable service_network in the a9s Template Uploader errand configuration, since the property network_type has not been set.

Deployment Prefix Per Plan

By default, the deployment names for the instances that the a9s Service Broker creates are in the schema d<2 digits><2 hex digits>. These names can be extended with a prefix that can be configured per provided service plan by the service_deployment_prefix option. The prefix can be changed at any time without affecting the instances already deployed.

danger

The prefix must only contain small letters [a-z] and should not exceed the length of 3 characters (otherwise problems with the generated DNS names may occur).

Example

plans:
postgresql-single-small:
guid: a6747d74-580f-4520-98c5-5ffe3dc20b5a
description: 'a small single instance'
free: true
ssl: false
template_name: postgresql13-single
template_name_v2: postgresql13-single
service_deployment_prefix: pss

Available Templates

The templates that can be used for the different service plans are provided by the template-uploader-errand. There are templates for each a9s Data Service.

Important: Service plans using templates that include no-logging in the template name, do not provide logs and metrics streaming.

a9s Elasticsearch

template namedescription
elasticsearch2-cluster-sslA clustered Elasticsearch 2 instance with ssl enabled
elasticsearch2-clusterA clustered Elasticsearch 2 instance
elasticsearch2-single-no-logging-sslA single Elasticsearch 2 instance without Logstash with ssl enabled
elasticsearch2-single-no-loggingA single Elasticsearch 2 instance without Logstash
elasticsearch2-single-sslA single Elasticsearch 2 instance with ssl enabled
elasticsearch2-singleA single Elasticsearch 2 instance
elasticsearch5-cluster-sslA clustered Elasticsearch 2 instance with ssl enabled
elasticsearch5-clusterA clustered Elasticsearch 2 instance with ssl enabled
elasticsearch5-single-no-logging-sslA single Elasticsearch 5 instance without Logstash with ssl enabled
elasticsearch5-single-no-loggingA single Elasticsearch 5 instance without Logstash
elasticsearch5-single-sslA single Elasticsearch 5 instance with ssl enabled
elasticsearch5-singleA single Elasticsearch 5 instance
elasticsearch6-cluster-sslA clustered Elasticsearch 6 instance with ssl enabled
elasticsearch6-clusterA clustered Elasticsearch 6 instance
elasticsearch6-single-no-logging-sslA single Elasticsearch 6 instance without Logstash with ssl enabled
elasticsearch6-single-no-loggingA single Elasticsearch 6 instance without Logstash
elasticsearch6-single-sslA single Elasticsearch 6 instance with ssl enabled
elasticsearch6-singleA single Elasticsearch 6 instance with ssl enabled
elasticsearch7-cluster-sslA clustered Elasticsearch 7 instance with ssl enabled
elasticsearch7-clusterA clustered Elasticsearch 7 instance
elasticsearch7-single-no-logging-sslA single Elasticsearch 7 instance without Logstash with ssl enabled
elasticsearch7-single-no-loggingA single Elasticsearch 7 instance without Logstash
elasticsearch7-single-sslA single Elasticsearch 7 instance with ssl enabled
elasticsearch7-singleA single Elasticsearch 7 instance with ssl enabled

a9s MongoDB

template namedescription
mongodb32-replicaA MongoDB 3.2 replica set
mongodb32-single-no-loggingA MongoDB 3.2 single instance without Logstash
mongodb32-singleA MongoDB 3.2 single instance
mongodb34-replica-sslA MongoDB 3.4 replica set with ssl enabled
mongodb34-replicaA MongoDB 3.4 replica set
mongodb34-single-no-logging-sslA MongoDB 3.4 single instance without Logstash with ssl
mongodb34-single-no-loggingA MongoDB 3.4 single instance without Logstash
mongodb34-single-sslA MongoDB 3.4 single instance with ssl enabled
mongodb34-singleA MongoDB 3.4 single instance
mongodb36-replica-sslA MongoDB 3.6 replica set with ssl enabled
mongodb36-replicaA MongoDB 3.6 replica set
mongodb36-single-no-logging-sslA MongoDB 3.6 single instance without Logstash with ssl
mongodb36-single-no-loggingA MongoDB 3.6 single instance without Logstash
mongodb36-single-sslA MongoDB 3.6 single instance with ssl enabled
mongodb36-singleA MongoDB 3.6 single instance
mongodb40-replica-sslA MongoDB 4.0 replica set with ssl enabled
mongodb40-replicaA MongoDB 4.0 replica set
mongodb40-single-no-logging-sslA MongoDB 4.0 single instance without Logstash with ssl
mongodb40-single-no-loggingA MongoDB 4.0 single instance without Logstash
mongodb40-single-sslA MongoDB 4.0 single instance with ssl enabled
mongodb40-singleA MongoDB 4.0 single instance

a9s MariaDB

template namedescription
mysql101-clusterA MariaDB Galera cluster
mysql101-single-no-loggingA MariaDB single instance without Logstash
mysql101-singleA MariaDB single instance
mysql104-clusterA MariaDB Galera cluster
mysql104-cluster-sslA MariaDB Galera cluster with ssl enabled
mysql104-single-no-loggingA MariaDB single instance without Logstash
mysql104-single-no-logging-sslA MariaDB single instance without Logstash with ssl enabled
mysql104-singleA MariaDB single instance
mysql104-single-sslA MariaDB single instance with ssl enabled
mariadb106-clusterA MariaDB Galera cluster
mariadb106-cluster-sslA MariaDB Galera cluster with ssl enabled
mariadb106-single-no-loggingA MariaDB single instance without Logstash
mariadb106-single-no-logging-sslA MariaDB single instance without Logstash with ssl enabled
mariadb106-singleA MariaDB single instance
mariadb106-single-sslA MariaDB single instance with ssl enabled

a9s PostgreSQL

template namedescription
postgresql13-replica-ssl A clustered PostgreSQL 13 instance with ssl enabled
postgresql13-replica A clustered PostgreSQL 13 instance
postgresql13-single-no-logging-ssl A single PostgreSQL 13 instance without Logstash with ssl enabled
postgresql13-single-no-logging A single PostgreSQL 13 instance without Logstash
postgresql13-single-ssl A single PostgreSQL 13 instance with ssl enabled
postgresql13-single A single PostgreSQL 13 instance
postgresql11-replica-ssl A clustered PostgreSQL 11 instance with ssl enabled
postgresql11-replica A clustered PostgreSQL 11 instance
postgresql11-single-no-logging-ssl A single PostgreSQL 11 instance without Logstash with ssl enabled
postgresql11-single-no-logging A single PostgreSQL 11 instance without Logstash
postgresql11-single-ssl A single PostgreSQL 11 instance with ssl enabled
postgresql11-single A single PostgreSQL 11 instance
postgresql10-replica-sslA clustered PostgreSQL 10 instance with ssl enabled 
postgresql10-replica A clustered PostgreSQL 10 instance
postgresql10-single-no-logging-ssl A single PostgreSQL 10 instance without Logstash with ssl enabled
postgresql10-single-no-logging A single PostgreSQL 10 instance without Logstash
postgresql10-single-ssl A single PostgreSQL 10 instance with ssl enabled
postgresql10-single A single PostgreSQL 10 instance
postgresql94-replica-sslA clustered PostgreSQL 9.4 instance with ssl enabled 
postgresql94-replicaA clustered PostgreSQL 9.4 instance 
postgresql94-single-no-logging-sslA single PostgreSQL 9.4 instance without Logstash with ssl enabled
postgresql94-single-no-loggingA single PostgreSQL 9.4 instance without Logstash
postgresql94-single-sslA single PostgreSQL 9.4 instance with ssl enabled
postgresql94-singleA single PostgreSQL 9.4 instance 

a9s Messaging

template namedescription
rabbitmq37-replica-sslA clustered RabbitMQ 3.7 instance with ssl enabled 
rabbitmq37-replicaA clustered RabbitMQ 3.7 instance 
rabbitmq37-single-no-logging-sslA single RabbitMQ 3.7 instance without Logstash with ssl enabled 
rabbitmq37-single-no-loggingA single RabbitMQ 3.7 instance without Logstash 
rabbitmq37-single-sslA single RabbitMQ 3.7 instance with ssl enabled 
rabbitmq37-single A single RabbitMQ 3.7 instance
messaging38-replica-sslA clustered Messaging 3.8 instance with ssl enabled 
messaging38-replicaA clustered Messaging 3.8 instance 
messaging38-single-no-logging-sslA single Messaging 3.8 instance without Logstash with ssl enabled 
messaging38-single-no-loggingA single Messaging 3.8 instance without Logstash 
messaging38-single-sslA single Messaging 3.8 instance with ssl enabled 
messaging38-single A single Messaging 3.8 instance

a9s Redis

template namedescription
redis50-cluster A clustered Redis 5.0 instance
redis50-single-no-logging A single Redis 5.0 instance without Logstash
redis50-single A single Redis 5.0 instance
redis6-cluster A clustered Redis 6 instance
redis6-single-no-logging A single Redis 6 instance without Logstash
redis6-single A single Redis 6 instance
redis6-cluster-ssl A clustered Redis 6 instance with ssl enabled
redis6-single-no-logging-ssl A single Redis 6 instance without Logstash with ssl enabled
redis6-single-ssl A single Redis 6 instance with ssl enabled
template namedescription
search2-cluster-sslA clustered OpenSearch instance with ssl enabled
search2-single-no-logging-sslA single OpenSearch instance without Logstash and with ssl enabled
search2-single-sslA single OpenSearch instance with ssl enabled

a9s LogMe

template namedescription
logme-cluster A clustered LogMe instance with 3 Elasticsearch nodes
logme-platform-logging A clustered LogMe instance with 5 Elasticsearch nodes
logme-single A single LogMe instance

a9s LogMe 2

template namedescription
logme2-cluster-ssl A clustered LogMe 2 instance with 3 OpenSearch nodes, and with ssl enabled
logme2-single-ssl A single LogMe 2 instance with ssl enabled

a9s Prometheus

template namedescription
prometheus-plattform A single Prometheus instance for platform logging that can only deployed once
prometheus-singleA single Prometheus instance 
promgraf-singleA single Prometheus instance containing Grafana v8

Add New Service Plans

If you want to provide another service plan that is not offered by default, you can add your new service plan to the service config. Currently, it is only possible to add plans that differ in the VM type and the persistent disk type.

For the new service plan you have to define the same properties like for the default service plans:

  • guid

  • description

  • free

  • template_name_v2

  • default_placeholder_values

  • migration_paths

    A new plan with a bigger VM and persistent disk could look the following way:

postgresql-single-ultra:
guid: 8abb159a-b79e-41ee-a374-0a7dccf6723a
description: 'a ultra single instance'
free: true
template_name_v2: postgresql10-single
default_placeholder_values:
vm_type: a9svs-postgresql-single-ultra
persistent_disk_type: a9svs-postgresql-single-ultra
migration_paths: []

NOTE: You have to use one of the existing templates for the new service plan.

NOTE2: If you want to use other VM types or disk types you have to add them also to your cloud-config.

IMPORTANT: The a9s Data Services do not support the migration to service plans with smaller VM type or smaller persistent disk type or from clustered instances to single instances. So you have to be careful when you define the migration_paths for a new service plan.

Deleting service plans

It is also possible to delete service plans for a given service. These service plans won't be provided by the a9s Service Broker. To do this you have to remove the configuration for the service plan you want to delete from the specific service config. Then you have to redeploy the service with the new service config.

NOTE: Currently, it is not possible to delete a service plan, which has an existing service instance. Only unused service plans can be deleted.

Customizing the Documentation and Support URLs

If you want to customize the Documentation and/or Support URLs of a service, you can do so by replacing the values of supportUrl and documentationUrl with your own. These are located in the metadata property, on the service config, as shown below:

metadata:
displayName: "a9s PostgreSQL 13"
supportUrl: https://dssupport.anynines.com
documentationUrl: https://docs.anynines.com
shareable: true