Add extra_info field for the response of protectable instances API

https://blueprints.launchpad.net/karbor/+spec/instances-extra-info

Problem description

We can only query the id, name and type of protectable instance using the restful API of protectable instance. We can not get more info about the resource instance. Some other info about instance is also needed when we protect resources with different resources type. For example: database instance. only the name of database instance is not enough. The host ip, the database system name about the instance are also needed.

Use Cases

Scenario #1 User want get the extra info of resource instances from the response of protectable instances API. Now the protectable instances API only return the id, name and type of the resource instances.

Scenario #2 User uses the Protectable Instances API to query the info of instances from the vendor’s backup software. User also can save the extra_info of resource instances to the plan, not only the id, name, type of resources.

Proposed change

Protectable Instances API: When return a protectable instance, a new field would be available called extra-info. This field must be a dict in the format of:

{
        "key1": "value1",
        "key2": "value2",
}

Keys and values must both be strings. The extra-info of instances is only used for presentation to a user/tenant. The values in extra-info filed of a resource can not be used inside the protection service of karbor and protection plugins.

The UI about the extra-info of protectable instances Show the extra-info in resource tree page. Add a fa-chevron-right icon before the Logo of the resource. The extra-info of this resource is collapsed by default. If a user/tenant click the icon, The extra-info will be displayed under this resource. Click the icon again, the extra-info will be collapsed.

Add a new field extra_info to the response for Protectable Instances API:

/{project_id}/protectables/{protectable_type}/instances:
  get:
    summary: Resource Instances
    description: |
      Return all the available instances for the given protectable type.
        examples:
          application/json: {
            "instances": [
              {
                "id": "cb4ef2ff-10f5-46c9-bce4-cf7a49c65a01",
                "type": "OS::Nova::Server",
                "name": "My VM",
                "extra_info": {
                    "hostname": "KarborServer",
                    "availability_zone": "AZOne",
                    "cell_name": "CellOne"
                  }
                "dependent_resources": [
                  {
                    "id": "99777fdd-8a5b-45ab-ba2c-52420008103f",
                    "type": "OS::Glance::Image",
                    "name": "cirros-0.3.4-x86_64-uec"
                    "extra_info": {
                        "availability_zone": "AZOne",
                        "cell_name": "CellOne"
                    }
                  }
                ]
              }
            ]
          }

Protectable Plugins can return the extra_info of resource Instances.

The extra_info field in resource database table is only for presentation to a user/tenant. The values in extra_info field can not be used and modified in karbor protection service. Add a new field extra_info to resources database table;

Field

Type

Null

Key

Default

Extra

id

Integer

NO

PRI

NULL

plan_id

varchar(255)

NO

FOR

NULL

resource_id

varchar(36)

NO

NULL

resource_type

varchar(64)

NO

NULL

resource_name

varchar(255)

NO

NULL

resource_extra_info

Text

NO

NULL

created_at

Datetime

YES

NULL

updated_at

Datetime

YES

NULL

deleted_at

Datetime

YES

NULL

deleted

Boolean

NO

NULL

Alternatives

Do nothing, this is not a mission critical feature.

Data model impact

None

REST API impact

Add a new field extra_info to the response for Protectable Instances API.

Security impact

None

Notifications impact

None

Other end user impact

The new API will be exposed to users via the python-karborclient.

Performance Impact

None

Other deployer impact

None

Developer impact

None

Implementation

Assignee(s)

Work Items

  • Write API

  • Add to Karbor client

  • Write tests

  • Add a usage example for API

Dependencies

None

Testing

Unit tests in Karbor and the python-karborclient.

Documentation Impact

Add a usage example for API.

References

None