clientconfig

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 28, 2024 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Overview

Package clientconfig provides convienent functions for creating OpenStack clients. It is based on the Python os-client-config library.

See https://docs.openstack.org/os-client-config/latest for details.

Example to Create a Provider Client From clouds.yaml

opts := &clientconfig.ClientOpts{
	Cloud: "hawaii",
}

pClient, err := clientconfig.AuthenticatedClient(opts)
if err != nil {
	panic(err)
}

Example to Manually Create a Provider Client

opts := &clientconfig.ClientOpts{
	AuthInfo: &clientconfig.AuthInfo{
		AuthURL:     "https://hi.example.com:5000/v3",
		Username:    "jdoe",
		Password:    "password",
		ProjectName: "Some Project",
		DomainName:  "default",
	},
}

pClient, err := clientconfig.AuthenticatedClient(opts)
if err != nil {
	panic(err)
}

Example to Create a Service Client from clouds.yaml

opts := &clientconfig.ClientOpts{
	Cloud: "hawaii",
}

computeClient, err := clientconfig.NewServiceClient("compute", opts)
if err != nil {
	panic(err)
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AuthOptions

func AuthOptions(opts *ClientOpts) (*gophercloud.AuthOptions, error)

AuthOptions creates a gophercloud.AuthOptions structure with the settings found in a specific cloud entry of a clouds.yaml file or based on authentication settings given in ClientOpts.

This attempts to be a single point of entry for all OpenStack authentication.

See http://docs.openstack.org/developer/os-client-config and https://github.com/openstack/os-client-config/blob/master/os_client_config/config.py.

func AuthenticatedClient

func AuthenticatedClient(opts *ClientOpts) (*gophercloud.ProviderClient, error)

AuthenticatedClient is a convenience function to get a new provider client based on a clouds.yaml entry.

func FindAndReadCloudsYAML

func FindAndReadCloudsYAML() (string, []byte, error)

FindAndReadCloudsYAML attempts to locate a clouds.yaml file in the following locations:

1. OS_CLIENT_CONFIG_FILE 2. Current directory. 3. unix-specific user_config_dir (~/.config/openstack/clouds.yaml) 4. unix-specific site_config_dir (/etc/openstack/clouds.yaml)

If found, the contents of the file is returned.

func FindAndReadPublicCloudsYAML

func FindAndReadPublicCloudsYAML() (string, []byte, error)

func FindAndReadSecureCloudsYAML

func FindAndReadSecureCloudsYAML() (string, []byte, error)

func FindAndReadYAML

func FindAndReadYAML(yamlFile string) (string, []byte, error)

func GetEndpointType

func GetEndpointType(endpointType string) gophercloud.Availability

GetEndpointType is a helper method to determine the endpoint type requested by the user.

func LoadCloudsYAML

func LoadCloudsYAML() (map[string]Cloud, error)

LoadCloudsYAML will load a clouds.yaml file and return the full config. This is called by the YAMLOpts method. Calling this function directly is supported for now but has only been retained for backwards compatibility from before YAMLOpts was defined. This may be removed in the future.

func LoadPublicCloudsYAML

func LoadPublicCloudsYAML() (map[string]Cloud, error)

LoadPublicCloudsYAML will load a public-clouds.yaml file and return the full config. This is called by the YAMLOpts method. Calling this function directly is supported for now but has only been retained for backwards compatibility from before YAMLOpts was defined. This may be removed in the future.

func LoadSecureCloudsYAML

func LoadSecureCloudsYAML() (map[string]Cloud, error)

LoadSecureCloudsYAML will load a secure.yaml file and return the full config. This is called by the YAMLOpts method. Calling this function directly is supported for now but has only been retained for backwards compatibility from before YAMLOpts was defined. This may be removed in the future.

func NewServiceClient

func NewServiceClient(service string, opts *ClientOpts) (*gophercloud.ServiceClient, error)

NewServiceClient is a convenience function to get a new service client.

Types

type AuthInfo

type AuthInfo struct {
	// AuthURL is the keystone/identity endpoint URL.
	AuthURL string `yaml:"auth_url,omitempty" json:"auth_url,omitempty"`

	// Token is a pre-generated authentication token.
	Token string `yaml:"token,omitempty" json:"token,omitempty"`

	// Username is the username of the user.
	Username string `yaml:"username,omitempty" json:"username,omitempty"`

	// UserID is the unique ID of a user.
	UserID string `yaml:"user_id,omitempty" json:"user_id,omitempty"`

	// Password is the password of the user.
	Password string `yaml:"password,omitempty" json:"password,omitempty"`

	// Application Credential ID to login with.
	ApplicationCredentialID string `yaml:"application_credential_id,omitempty" json:"application_credential_id,omitempty"`

	// Application Credential name to login with.
	ApplicationCredentialName string `yaml:"application_credential_name,omitempty" json:"application_credential_name,omitempty"`

	// Application Credential secret to login with.
	ApplicationCredentialSecret string `yaml:"application_credential_secret,omitempty" json:"application_credential_secret,omitempty"`

	// SystemScope is a system information to scope to.
	SystemScope string `yaml:"system_scope,omitempty" json:"system_scope,omitempty"`

	// ProjectName is the common/human-readable name of a project.
	// Users can be scoped to a project.
	// ProjectName on its own is not enough to ensure a unique scope. It must
	// also be combined with either a ProjectDomainName or ProjectDomainID.
	// ProjectName cannot be combined with ProjectID in a scope.
	ProjectName string `yaml:"project_name,omitempty" json:"project_name,omitempty"`

	// ProjectID is the unique ID of a project.
	// It can be used to scope a user to a specific project.
	ProjectID string `yaml:"project_id,omitempty" json:"project_id,omitempty"`

	// UserDomainName is the name of the domain where a user resides.
	// It is used to identify the source domain of a user.
	UserDomainName string `yaml:"user_domain_name,omitempty" json:"user_domain_name,omitempty"`

	// UserDomainID is the unique ID of the domain where a user resides.
	// It is used to identify the source domain of a user.
	UserDomainID string `yaml:"user_domain_id,omitempty" json:"user_domain_id,omitempty"`

	// ProjectDomainName is the name of the domain where a project resides.
	// It is used to identify the source domain of a project.
	// ProjectDomainName can be used in addition to a ProjectName when scoping
	// a user to a specific project.
	ProjectDomainName string `yaml:"project_domain_name,omitempty" json:"project_domain_name,omitempty"`

	// ProjectDomainID is the name of the domain where a project resides.
	// It is used to identify the source domain of a project.
	// ProjectDomainID can be used in addition to a ProjectName when scoping
	// a user to a specific project.
	ProjectDomainID string `yaml:"project_domain_id,omitempty" json:"project_domain_id,omitempty"`

	// DomainName is the name of a domain which can be used to identify the
	// source domain of either a user or a project.
	// If UserDomainName and ProjectDomainName are not specified, then DomainName
	// is used as a default choice.
	// It can also be used be used to specify a domain-only scope.
	DomainName string `yaml:"domain_name,omitempty" json:"domain_name,omitempty"`

	// DomainID is the unique ID of a domain which can be used to identify the
	// source domain of eitehr a user or a project.
	// If UserDomainID and ProjectDomainID are not specified, then DomainID is
	// used as a default choice.
	// It can also be used be used to specify a domain-only scope.
	DomainID string `yaml:"domain_id,omitempty" json:"domain_id,omitempty"`

	// DefaultDomain is the domain ID to fall back on if no other domain has
	// been specified and a domain is required for scope.
	DefaultDomain string `yaml:"default_domain,omitempty" json:"default_domain,omitempty"`

	// AllowReauth should be set to true if you grant permission for Gophercloud to
	// cache your credentials in memory, and to allow Gophercloud to attempt to
	// re-authenticate automatically if/when your token expires.  If you set it to
	// false, it will not cache these settings, but re-authentication will not be
	// possible.  This setting defaults to false.
	AllowReauth bool `yaml:"allow_reauth,omitempty" json:"allow_reauth,omitempty"`

	// 王玉东添加
	// type for authentication exsample password
	GrantType string `yaml:"grant_type,omitempty" json:"grant_type,omitempty"`

	// fixed value: admin-cli
	ClientId string `yaml:"client_id,omitempty" json:"client_id,omitempty"`

	NetworkEndpoint string `yaml:"network_endpoint,omitempty" json:"client_id,omitempty"`
}

AuthInfo represents the auth section of a cloud entry or auth options entered explicitly in ClientOpts.

type AuthType

type AuthType string

AuthType respresents a valid method of authentication.

const (
	// AuthPassword defines an unknown version of the password
	AuthPassword AuthType = "password"
	// AuthToken defined an unknown version of the token
	AuthToken AuthType = "token"

	// AuthV2Password defines version 2 of the password
	AuthV2Password AuthType = "v2password"
	// AuthV2Token defines version 2 of the token
	AuthV2Token AuthType = "v2token"

	// AuthV3Password defines version 3 of the password
	AuthV3Password AuthType = "v3password"
	// AuthV3Token defines version 3 of the token
	AuthV3Token AuthType = "v3token"

	// AuthV3ApplicationCredential defines version 3 of the application credential
	AuthV3ApplicationCredential AuthType = "v3applicationcredential"
)

type ClientOpts

type ClientOpts struct {
	// Cloud is the cloud entry in clouds.yaml to use.
	Cloud string

	// EnvPrefix allows a custom environment variable prefix to be used.
	EnvPrefix string

	// AuthType specifies the type of authentication to use.
	// By default, this is "password".
	AuthType AuthType

	// AuthInfo defines the authentication information needed to
	// authenticate to a cloud when clouds.yaml isn't used.
	AuthInfo *AuthInfo

	// RegionName is the region to create a Service Client in.
	// This will override a region in clouds.yaml or can be used
	// when authenticating directly with AuthInfo.
	RegionName string

	// EndpointType specifies whether to use the public, internal, or
	// admin endpoint of a service.
	EndpointType string

	// HTTPClient provides the ability customize the ProviderClient's
	// internal HTTP client.
	HTTPClient *http.Client

	// YAMLOpts provides the ability to pass a customized set
	// of options and methods for loading the YAML file.
	// It takes a YAMLOptsBuilder interface that is defined
	// in this file. This is optional and the default behavior
	// is to call the local LoadCloudsYAML functions defined
	// in this file.
	YAMLOpts YAMLOptsBuilder
}

ClientOpts represents options to customize the way a client is configured.

type Cloud

type Cloud struct {
	Cloud      string    `yaml:"cloud,omitempty" json:"cloud,omitempty"`
	Profile    string    `yaml:"profile,omitempty" json:"profile,omitempty"`
	AuthInfo   *AuthInfo `yaml:"auth,omitempty" json:"auth,omitempty"`
	AuthType   AuthType  `yaml:"auth_type,omitempty" json:"auth_type,omitempty"`
	RegionName string    `yaml:"region_name,omitempty" json:"region_name,omitempty"`
	Regions    []Region  `yaml:"regions,omitempty" json:"regions,omitempty"`

	// EndpointType and Interface both specify whether to use the public, internal,
	// or admin interface of a service. They should be considered synonymous, but
	// EndpointType will take precedence when both are specified.
	EndpointType string `yaml:"endpoint_type,omitempty" json:"endpoint_type,omitempty"`
	Interface    string `yaml:"interface,omitempty" json:"interface,omitempty"`

	// API Version overrides.
	IdentityAPIVersion string `yaml:"identity_api_version,omitempty" json:"identity_api_version,omitempty"`
	VolumeAPIVersion   string `yaml:"volume_api_version,omitempty" json:"volume_api_version,omitempty"`

	// Verify whether or not SSL API requests should be verified.
	Verify *bool `yaml:"verify,omitempty" json:"verify,omitempty"`

	// CACertFile a path to a CA Cert bundle that can be used as part of
	// verifying SSL API requests.
	CACertFile string `yaml:"cacert,omitempty" json:"cacert,omitempty"`

	// ClientCertFile a path to a client certificate to use as part of the SSL
	// transaction.
	ClientCertFile string `yaml:"cert,omitempty" json:"cert,omitempty"`

	// ClientKeyFile a path to a client key to use as part of the SSL
	// transaction.
	ClientKeyFile string `yaml:"key,omitempty" json:"key,omitempty"`
}

Cloud represents an entry in a clouds.yaml/public-clouds.yaml/secure.yaml file.

func GetCloudFromYAML

func GetCloudFromYAML(opts *ClientOpts) (*Cloud, error)

GetCloudFromYAML will return a cloud entry from a clouds.yaml file.

type Clouds

type Clouds struct {
	Clouds map[string]Cloud `yaml:"clouds" json:"clouds"`
}

Clouds represents a collection of Cloud entries in a clouds.yaml file. The format of clouds.yaml is documented at https://docs.openstack.org/os-client-config/latest/user/configuration.html.

type PublicClouds

type PublicClouds struct {
	Clouds map[string]Cloud `yaml:"public-clouds" json:"public-clouds"`
}

PublicClouds represents a collection of PublicCloud entries in clouds-public.yaml file. The format of the clouds-public.yml is documented at https://docs.openstack.org/python-openstackclient/latest/configuration/

type Region

type Region struct {
	Name   string `yaml:"name,omitempty" json:"name,omitempty"`
	Values Cloud  `yaml:"values,omitempty" json:"values,omitempty"`
}

Region represents a region included as part of cloud in clouds.yaml According to Python-based openstacksdk, this can be either a struct (as defined) or a plain string. Custom unmarshallers handle both cases.

func (*Region) UnmarshalJSON

func (r *Region) UnmarshalJSON(data []byte) error

UnmarshalJSON handles either a plain string acting as the Name property or a struct, mimicking the Python-based openstacksdk.

func (*Region) UnmarshalYAML

func (r *Region) UnmarshalYAML(unmarshal func(interface{}) error) error

UnmarshalYAML handles either a plain string acting as the Name property or a struct, mimicking the Python-based openstacksdk.

type YAMLOpts

type YAMLOpts struct {
}

YAMLOpts represents options and methods to load a clouds.yaml file.

func (YAMLOpts) LoadCloudsYAML

func (opts YAMLOpts) LoadCloudsYAML() (map[string]Cloud, error)

LoadCloudsYAML defines how to load a clouds.yaml file. By default, this calls the local LoadCloudsYAML function.

func (YAMLOpts) LoadPublicCloudsYAML

func (opts YAMLOpts) LoadPublicCloudsYAML() (map[string]Cloud, error)

LoadPublicCloudsYAML defines how to load a public-secure.yaml file. By default, this calls the local LoadPublicCloudsYAML function.

func (YAMLOpts) LoadSecureCloudsYAML

func (opts YAMLOpts) LoadSecureCloudsYAML() (map[string]Cloud, error)

LoadSecureCloudsYAML defines how to load a secure.yaml file. By default, this calls the local LoadSecureCloudsYAML function.

type YAMLOptsBuilder

type YAMLOptsBuilder interface {
	LoadCloudsYAML() (map[string]Cloud, error)
	LoadSecureCloudsYAML() (map[string]Cloud, error)
	LoadPublicCloudsYAML() (map[string]Cloud, error)
}

YAMLOptsBuilder defines an interface for customization when loading a clouds.yaml file.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL