diff --git a/openstack/dms/v2/kafka/instances/requests.go b/openstack/dms/v2/kafka/instances/requests.go index 5a33bae2e..4f7c6be11 100644 --- a/openstack/dms/v2/kafka/instances/requests.go +++ b/openstack/dms/v2/kafka/instances/requests.go @@ -242,6 +242,20 @@ func CreateWithEngine(client *golangsdk.ServiceClient, ops CreateOpsBuilder, eng return } +func CreateInstance(client *golangsdk.ServiceClient, ops CreateOpsBuilder) (r CreateResult) { + b, err := ops.ToInstanceCreateMap() + if err != nil { + r.Err = err + return + } + + _, r.Err = client.Post(createInstanceURL(client), b, &r.Body, &golangsdk.RequestOpts{ + OkCodes: []int{200}, + }) + + return +} + // Delete an instance by id func Delete(client *golangsdk.ServiceClient, id string) (r DeleteResult) { _, r.Err = client.Delete(deleteURL(client, id), &golangsdk.RequestOpts{ @@ -386,6 +400,29 @@ func Resize(client *golangsdk.ServiceClient, id string, opts ResizeInstanceOpts) return "", err } +func ExtendInstance(client *golangsdk.ServiceClient, instanceId string, opts ResizeInstanceOpts) (string, error) { + b, err := golangsdk.BuildRequestBody(opts, "") + if err != nil { + return "", err + } + + var rst golangsdk.Result + _, err = client.Post(extendInstanceURL(client, instanceId), b, &rst.Body, &golangsdk.RequestOpts{ + MoreHeaders: requestOpts.MoreHeaders, + }) + + if err == nil { + var r struct { + JobID string `json:"job_id"` + } + if err = rst.ExtractInto(&r); err != nil { + return "", err + } + return r.JobID, nil + } + return "", err +} + // CrossVpcUpdateOpts is the structure required by the UpdateCrossVpc method to update the internal IP address for // cross-VPC access. type CrossVpcUpdateOpts struct { diff --git a/openstack/dms/v2/kafka/instances/urls.go b/openstack/dms/v2/kafka/instances/urls.go index 6bcf5d89c..d9a7c5158 100644 --- a/openstack/dms/v2/kafka/instances/urls.go +++ b/openstack/dms/v2/kafka/instances/urls.go @@ -14,6 +14,10 @@ func createURLWithEngine(engine string, client *golangsdk.ServiceClient) string return client.ServiceURL(engine, client.ProjectID, resourcePath) } +func createInstanceURL(client *golangsdk.ServiceClient) string { + return client.ServiceURL(client.ProjectID, "kafka", resourcePath) +} + // deleteURL will build the url of deletion func deleteURL(client *golangsdk.ServiceClient, id string) string { return client.ServiceURL(client.ProjectID, resourcePath, id) @@ -37,6 +41,10 @@ func extend(client *golangsdk.ServiceClient, id string) string { return client.ServiceURL(client.ProjectID, resourcePath, id, "extend") } +func extendInstanceURL(client *golangsdk.ServiceClient, instanceId string) string { + return client.ServiceURL(client.ProjectID, "kafka", resourcePath, instanceId, "extend") +} + func crossVpcURL(client *golangsdk.ServiceClient, id string) string { return client.ServiceURL(client.ProjectID, resourcePath, id, "crossvpc/modify") }