Rackspace Cloud Databases

Brief summary

Rackspace Cloud Databases can be created, updated, and deleted using the OS::Trove::Instance resource. Cloud Databases instances can also be created as replicas of other Cloud Databases instances.

Example template

Start by adding the top-level template sections:

heat_template_version: 2014-10-16

description: |
  Create a Rackspace Cloud Database instance and make a replica.

resources:

outputs:

Resources section

Add an OS::Trove::Instance resource with a list of databases and users:

db:
  type: OS::Trove::Instance
  properties:
    name: db
    flavor: 1GB Instance
    size: 10
    databases:
    - name: my_data
    users:
    - name: john
      password: secrete
      databases: [ my_data ]

This resource will create your Cloud Databases instance.

Add another OS::Trove::Instance, but this time leave out the databases and users and specify a replica_of property:

db_replica:
  type: OS::Trove::Instance
  properties:
    name: db_replica
    flavor: 1GB Instance
    size: 10
    replica_of: { get_resource: db }

This will create a replica of your first Cloud Databases instance. Alternatively, you can add a template parameter for the UUID of the database instance that you want a replica of and pass in the UUID upon stack creation.

Outputs section

Add the following to your outputs section:

"DB ID":
  value: { get_resource: db }
  description: Database instance ID.

"DB hostname":
  value: { get_attr: [db, hostname] }
  description: Database instance hostname.

"DB href":
  value: { get_attr: [db, href] }
  description: Api endpoint of the database instance.

"DB replica ID":
  value: { get_resource: db_replica }
  description: Database replica ID.

"DB replica hostname":
  value: { get_attr: [db_replica, hostname] }
  description: Database replica hostname.

"DB replica href":
  value: { get_attr: [db_replica, href] }
    description: Api endpoint of the database replica.

Full template

heat_template_version: 2014-10-16

description: |
  Test template using Trove with replication

resources:
  db:
    type: OS::Trove::Instance
    properties:
      name: db
      flavor: 1GB Instance
      size: 10
      databases:
      - name: my_data
      users:
      - name: john
        password: secrete
        databases: [ my_data ]

  db_replica:
    type: OS::Trove::Instance
    properties:
      name: db_replica
      flavor: 1GB Instance
      size: 10
      replica_of: { get_resource: db }

outputs:
  "DB ID":
    value: { get_resource: db }
    description: Database instance ID.

  "DB hostname":
    value: { get_attr: [db, hostname] }
    description: Database instance hostname.

  "DB href":
    value: { get_attr: [db, href] }
    description: Api endpoint of the database instance.

  "DB replica ID":
    value: { get_resource: db_replica }
    description: Database replica ID.

  "DB replica hostname":
    value: { get_attr: [db_replica, hostname] }
    description: Database replica hostname.

  "DB replica href":
    value: { get_attr: [db_replica, href] }
    description: Api endpoint of the database replica.