Bumps the go-deps group with 10 updates: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/compute](https://github.com/googleapis/google-cloud-go) | `1.23.1` | `1.23.3` | | [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) | `1.33.0` | `1.35.1` | | [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) | `1.45.27` | `1.47.9` | | [github.com/hashicorp/go-retryablehttp](https://github.com/hashicorp/go-retryablehttp) | `0.7.4` | `0.7.5` | | [github.com/labstack/echo/v4](https://github.com/labstack/echo) | `4.11.2` | `4.11.3` | | [github.com/labstack/gommon](https://github.com/labstack/gommon) | `0.4.0` | `0.4.1` | | [github.com/openshift-online/ocm-sdk-go](https://github.com/openshift-online/ocm-sdk-go) | `0.1.374` | `0.1.385` | | [github.com/osbuild/images](https://github.com/osbuild/images) | `0.12.0` | `0.15.0` | | [github.com/spf13/cobra](https://github.com/spf13/cobra) | `1.7.0` | `1.8.0` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.13.0` | `0.14.0` | Updates `cloud.google.com/go/compute` from 1.23.1 to 1.23.3 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/documentai/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.23.1...compute/v1.23.3) Updates `cloud.google.com/go/storage` from 1.33.0 to 1.35.1 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.33.0...storage/v1.35.1) Updates `github.com/aws/aws-sdk-go` from 1.45.27 to 1.47.9 - [Release notes](https://github.com/aws/aws-sdk-go/releases) - [Commits](https://github.com/aws/aws-sdk-go/compare/v1.45.27...v1.47.9) Updates `github.com/hashicorp/go-retryablehttp` from 0.7.4 to 0.7.5 - [Changelog](https://github.com/hashicorp/go-retryablehttp/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/go-retryablehttp/compare/v0.7.4...v0.7.5) Updates `github.com/labstack/echo/v4` from 4.11.2 to 4.11.3 - [Release notes](https://github.com/labstack/echo/releases) - [Changelog](https://github.com/labstack/echo/blob/master/CHANGELOG.md) - [Commits](https://github.com/labstack/echo/compare/v4.11.2...v4.11.3) Updates `github.com/labstack/gommon` from 0.4.0 to 0.4.1 - [Release notes](https://github.com/labstack/gommon/releases) - [Commits](https://github.com/labstack/gommon/compare/v0.4.0...v0.4.1) Updates `github.com/openshift-online/ocm-sdk-go` from 0.1.374 to 0.1.385 - [Release notes](https://github.com/openshift-online/ocm-sdk-go/releases) - [Changelog](https://github.com/openshift-online/ocm-sdk-go/blob/main/CHANGES.md) - [Commits](https://github.com/openshift-online/ocm-sdk-go/compare/v0.1.374...v0.1.385) Updates `github.com/osbuild/images` from 0.12.0 to 0.15.0 - [Release notes](https://github.com/osbuild/images/releases) - [Commits](https://github.com/osbuild/images/compare/v0.12.0...v0.15.0) Updates `github.com/spf13/cobra` from 1.7.0 to 1.8.0 - [Release notes](https://github.com/spf13/cobra/releases) - [Commits](https://github.com/spf13/cobra/compare/v1.7.0...v1.8.0) Updates `golang.org/x/oauth2` from 0.13.0 to 0.14.0 - [Commits](https://github.com/golang/oauth2/compare/v0.13.0...v0.14.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/compute dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-deps - dependency-name: cloud.google.com/go/storage dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-deps - dependency-name: github.com/aws/aws-sdk-go dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-deps - dependency-name: github.com/hashicorp/go-retryablehttp dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-deps - dependency-name: github.com/labstack/echo/v4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-deps - dependency-name: github.com/labstack/gommon dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-deps - dependency-name: github.com/openshift-online/ocm-sdk-go dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go-deps - dependency-name: github.com/osbuild/images dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-deps - dependency-name: github.com/spf13/cobra dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-deps - dependency-name: golang.org/x/oauth2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go-deps ... Signed-off-by: dependabot[bot] <support@github.com>
315 lines
8.2 KiB
Go
315 lines
8.2 KiB
Go
/*
|
|
Copyright (c) 2017 VMware, Inc. All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package pbm
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/vmware/govmomi/pbm/methods"
|
|
"github.com/vmware/govmomi/pbm/types"
|
|
"github.com/vmware/govmomi/vim25"
|
|
"github.com/vmware/govmomi/vim25/soap"
|
|
vim "github.com/vmware/govmomi/vim25/types"
|
|
)
|
|
|
|
const (
|
|
Namespace = "pbm"
|
|
Path = "/pbm"
|
|
)
|
|
|
|
var (
|
|
ServiceInstance = vim.ManagedObjectReference{
|
|
Type: "PbmServiceInstance",
|
|
Value: "ServiceInstance",
|
|
}
|
|
)
|
|
|
|
type Client struct {
|
|
*soap.Client
|
|
|
|
ServiceContent types.PbmServiceInstanceContent
|
|
|
|
RoundTripper soap.RoundTripper
|
|
}
|
|
|
|
func NewClient(ctx context.Context, c *vim25.Client) (*Client, error) {
|
|
sc := c.Client.NewServiceClient(Path, Namespace)
|
|
|
|
req := types.PbmRetrieveServiceContent{
|
|
This: ServiceInstance,
|
|
}
|
|
|
|
res, err := methods.PbmRetrieveServiceContent(ctx, sc, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Client{sc, res.Returnval, sc}, nil
|
|
}
|
|
|
|
// RoundTrip dispatches to the RoundTripper field.
|
|
func (c *Client) RoundTrip(ctx context.Context, req, res soap.HasFault) error {
|
|
return c.RoundTripper.RoundTrip(ctx, req, res)
|
|
}
|
|
|
|
func (c *Client) QueryProfile(ctx context.Context, rtype types.PbmProfileResourceType, category string) ([]types.PbmProfileId, error) {
|
|
req := types.PbmQueryProfile{
|
|
This: c.ServiceContent.ProfileManager,
|
|
ResourceType: rtype,
|
|
ProfileCategory: category,
|
|
}
|
|
|
|
res, err := methods.PbmQueryProfile(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) RetrieveContent(ctx context.Context, ids []types.PbmProfileId) ([]types.BasePbmProfile, error) {
|
|
req := types.PbmRetrieveContent{
|
|
This: c.ServiceContent.ProfileManager,
|
|
ProfileIds: ids,
|
|
}
|
|
|
|
res, err := methods.PbmRetrieveContent(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
type PlacementCompatibilityResult []types.PbmPlacementCompatibilityResult
|
|
|
|
func (c *Client) CheckRequirements(ctx context.Context, hubs []types.PbmPlacementHub, ref *types.PbmServerObjectRef, preq []types.BasePbmPlacementRequirement) (PlacementCompatibilityResult, error) {
|
|
req := types.PbmCheckRequirements{
|
|
This: c.ServiceContent.PlacementSolver,
|
|
HubsToSearch: hubs,
|
|
PlacementSubjectRef: ref,
|
|
PlacementSubjectRequirement: preq,
|
|
}
|
|
|
|
res, err := methods.PbmCheckRequirements(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (l PlacementCompatibilityResult) CompatibleDatastores() []types.PbmPlacementHub {
|
|
var compatibleDatastores []types.PbmPlacementHub
|
|
|
|
for _, res := range l {
|
|
if len(res.Error) == 0 {
|
|
compatibleDatastores = append(compatibleDatastores, res.Hub)
|
|
}
|
|
}
|
|
return compatibleDatastores
|
|
}
|
|
|
|
func (l PlacementCompatibilityResult) NonCompatibleDatastores() []types.PbmPlacementHub {
|
|
var nonCompatibleDatastores []types.PbmPlacementHub
|
|
|
|
for _, res := range l {
|
|
if len(res.Error) > 0 {
|
|
nonCompatibleDatastores = append(nonCompatibleDatastores, res.Hub)
|
|
}
|
|
}
|
|
return nonCompatibleDatastores
|
|
}
|
|
|
|
func (c *Client) CreateProfile(ctx context.Context, capabilityProfileCreateSpec types.PbmCapabilityProfileCreateSpec) (*types.PbmProfileId, error) {
|
|
req := types.PbmCreate{
|
|
This: c.ServiceContent.ProfileManager,
|
|
CreateSpec: capabilityProfileCreateSpec,
|
|
}
|
|
|
|
res, err := methods.PbmCreate(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) UpdateProfile(ctx context.Context, id types.PbmProfileId, updateSpec types.PbmCapabilityProfileUpdateSpec) error {
|
|
req := types.PbmUpdate{
|
|
This: c.ServiceContent.ProfileManager,
|
|
ProfileId: id,
|
|
UpdateSpec: updateSpec,
|
|
}
|
|
|
|
_, err := methods.PbmUpdate(ctx, c, &req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *Client) DeleteProfile(ctx context.Context, ids []types.PbmProfileId) ([]types.PbmProfileOperationOutcome, error) {
|
|
req := types.PbmDelete{
|
|
This: c.ServiceContent.ProfileManager,
|
|
ProfileId: ids,
|
|
}
|
|
|
|
res, err := methods.PbmDelete(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) QueryAssociatedEntity(ctx context.Context, id types.PbmProfileId, entityType string) ([]types.PbmServerObjectRef, error) {
|
|
req := types.PbmQueryAssociatedEntity{
|
|
This: c.ServiceContent.ProfileManager,
|
|
Profile: id,
|
|
EntityType: entityType,
|
|
}
|
|
|
|
res, err := methods.PbmQueryAssociatedEntity(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) QueryAssociatedEntities(ctx context.Context, ids []types.PbmProfileId) ([]types.PbmQueryProfileResult, error) {
|
|
req := types.PbmQueryAssociatedEntities{
|
|
This: c.ServiceContent.ProfileManager,
|
|
Profiles: ids,
|
|
}
|
|
|
|
res, err := methods.PbmQueryAssociatedEntities(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) ProfileIDByName(ctx context.Context, profileName string) (string, error) {
|
|
resourceType := types.PbmProfileResourceType{
|
|
ResourceType: string(types.PbmProfileResourceTypeEnumSTORAGE),
|
|
}
|
|
category := types.PbmProfileCategoryEnumREQUIREMENT
|
|
ids, err := c.QueryProfile(ctx, resourceType, string(category))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
profiles, err := c.RetrieveContent(ctx, ids)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
for i := range profiles {
|
|
profile := profiles[i].GetPbmProfile()
|
|
if profile.Name == profileName {
|
|
return profile.ProfileId.UniqueId, nil
|
|
}
|
|
}
|
|
return "", fmt.Errorf("no pbm profile found with name: %q", profileName)
|
|
}
|
|
|
|
func (c *Client) FetchCapabilityMetadata(ctx context.Context, rtype *types.PbmProfileResourceType, vendorUuid string) ([]types.PbmCapabilityMetadataPerCategory, error) {
|
|
req := types.PbmFetchCapabilityMetadata{
|
|
This: c.ServiceContent.ProfileManager,
|
|
ResourceType: rtype,
|
|
VendorUuid: vendorUuid,
|
|
}
|
|
|
|
res, err := methods.PbmFetchCapabilityMetadata(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) FetchComplianceResult(ctx context.Context, entities []types.PbmServerObjectRef) ([]types.PbmComplianceResult, error) {
|
|
req := types.PbmFetchComplianceResult{
|
|
This: c.ServiceContent.ComplianceManager,
|
|
Entities: entities,
|
|
}
|
|
|
|
res, err := methods.PbmFetchComplianceResult(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
// GetProfileNameByID gets storage profile name by ID
|
|
func (c *Client) GetProfileNameByID(ctx context.Context, profileID string) (string, error) {
|
|
resourceType := types.PbmProfileResourceType{
|
|
ResourceType: string(types.PbmProfileResourceTypeEnumSTORAGE),
|
|
}
|
|
category := types.PbmProfileCategoryEnumREQUIREMENT
|
|
ids, err := c.QueryProfile(ctx, resourceType, string(category))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
profiles, err := c.RetrieveContent(ctx, ids)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
for i := range profiles {
|
|
profile := profiles[i].GetPbmProfile()
|
|
if profile.ProfileId.UniqueId == profileID {
|
|
return profile.Name, nil
|
|
}
|
|
}
|
|
return "", fmt.Errorf("no pbm profile found with id: %q", profileID)
|
|
}
|
|
|
|
func (c *Client) QueryAssociatedProfile(ctx context.Context, entity types.PbmServerObjectRef) ([]types.PbmProfileId, error) {
|
|
req := types.PbmQueryAssociatedProfile{
|
|
This: c.ServiceContent.ProfileManager,
|
|
Entity: entity,
|
|
}
|
|
|
|
res, err := methods.PbmQueryAssociatedProfile(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|
|
|
|
func (c *Client) QueryAssociatedProfiles(ctx context.Context, entities []types.PbmServerObjectRef) ([]types.PbmQueryProfileResult, error) {
|
|
req := types.PbmQueryAssociatedProfiles{
|
|
This: c.ServiceContent.ProfileManager,
|
|
Entities: entities,
|
|
}
|
|
|
|
res, err := methods.PbmQueryAssociatedProfiles(ctx, c, &req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return res.Returnval, nil
|
|
}
|