Merge "Improve config package organization pt.2"
This commit is contained in:
commit
b0259abb6d
82
pkg/config/bootstrap.go
Normal file
82
pkg/config/bootstrap.go
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
Copyright 2014 The Kubernetes Authors.
|
||||
|
||||
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 config
|
||||
|
||||
import "sigs.k8s.io/yaml"
|
||||
|
||||
// Bootstrap holds configurations for bootstrap steps
|
||||
type Bootstrap struct {
|
||||
// Configuration parameters for container
|
||||
Container *Container `json:"container,omitempty"`
|
||||
// Configuration parameters for ISO builder
|
||||
Builder *Builder `json:"builder,omitempty"`
|
||||
// Configuration parameters for ephemeral node remote management
|
||||
RemoteDirect *RemoteDirect `json:"remoteDirect,omitempty"`
|
||||
}
|
||||
|
||||
// Container parameters
|
||||
type Container struct {
|
||||
// Container volume directory binding.
|
||||
Volume string `json:"volume,omitempty"`
|
||||
// ISO generator container image URL
|
||||
Image string `json:"image,omitempty"`
|
||||
// Container Runtime Interface driver
|
||||
ContainerRuntime string `json:"containerRuntime,omitempty"`
|
||||
}
|
||||
|
||||
// Builder parameters
|
||||
type Builder struct {
|
||||
// Cloud Init user-data file name placed to the container volume root
|
||||
UserDataFileName string `json:"userDataFileName,omitempty"`
|
||||
// Cloud Init network-config file name placed to the container volume root
|
||||
NetworkConfigFileName string `json:"networkConfigFileName,omitempty"`
|
||||
// File name for output metadata
|
||||
OutputMetadataFileName string `json:"outputMetadataFileName,omitempty"`
|
||||
}
|
||||
|
||||
// RemoteDirect configuration options
|
||||
type RemoteDirect struct {
|
||||
// IsoURL specifies url to download ISO image for ephemeral node
|
||||
IsoURL string `json:"isoUrl,omitempty"`
|
||||
}
|
||||
|
||||
// Bootstrap functions
|
||||
func (b *Bootstrap) String() string {
|
||||
yamlData, err := yaml.Marshal(&b)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
||||
// String returns Container object in a serialized string format
|
||||
func (c *Container) String() string {
|
||||
yamlData, err := yaml.Marshal(&c)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
||||
// String returns Builder object in a serialized string format
|
||||
func (b *Builder) String() string {
|
||||
yamlData, err := yaml.Marshal(&b)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
@ -801,62 +801,6 @@ func (c *Config) Purge() error {
|
||||
return os.Remove(c.loadedConfigPath)
|
||||
}
|
||||
|
||||
func (c *Context) String() string {
|
||||
cyaml, err := yaml.Marshal(&c)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
kcluster := c.KubeContext()
|
||||
kyaml, err := yaml.Marshal(&kcluster)
|
||||
if err != nil {
|
||||
return string(cyaml)
|
||||
}
|
||||
return fmt.Sprintf("%s\n%s", string(cyaml), string(kyaml))
|
||||
}
|
||||
|
||||
// PrettyString returns cluster name in a formatted string
|
||||
func (c *Context) PrettyString() string {
|
||||
clusterName := NewClusterComplexNameFromKubeClusterName(c.NameInKubeconf)
|
||||
return fmt.Sprintf("Context: %s\n%s\n", clusterName.Name, c)
|
||||
}
|
||||
|
||||
// KubeContext returns kube context object
|
||||
func (c *Context) KubeContext() *clientcmdapi.Context {
|
||||
return c.context
|
||||
}
|
||||
|
||||
// SetKubeContext updates kube contect with given context details
|
||||
func (c *Context) SetKubeContext(kc *clientcmdapi.Context) {
|
||||
c.context = kc
|
||||
}
|
||||
|
||||
// ClusterType returns cluster type by extracting the type portion from
|
||||
// the complex cluster name
|
||||
func (c *Context) ClusterType() string {
|
||||
return NewClusterComplexNameFromKubeClusterName(c.NameInKubeconf).Type
|
||||
}
|
||||
|
||||
func (c *Context) ClusterName() string {
|
||||
return NewClusterComplexNameFromKubeClusterName(c.NameInKubeconf).Name
|
||||
}
|
||||
|
||||
func (m *Manifest) String() string {
|
||||
yamlData, err := yaml.Marshal(&m)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
||||
// Bootstrap functions
|
||||
func (b *Bootstrap) String() string {
|
||||
yamlData, err := yaml.Marshal(&b)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
||||
// Management Configuration functions
|
||||
func (m *ManagementConfiguration) String() string {
|
||||
yamlData, err := yaml.Marshal(&m)
|
||||
@ -865,21 +809,3 @@ func (m *ManagementConfiguration) String() string {
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
||||
// String returns Container object in a serialized string format
|
||||
func (c *Container) String() string {
|
||||
yamlData, err := yaml.Marshal(&c)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
||||
// String returns Builder object in a serialized string format
|
||||
func (b *Builder) String() string {
|
||||
yamlData, err := yaml.Marshal(&b)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
||||
|
77
pkg/config/context.go
Normal file
77
pkg/config/context.go
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
Copyright 2014 The Kubernetes Authors.
|
||||
|
||||
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 config
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"k8s.io/client-go/tools/clientcmd/api"
|
||||
"sigs.k8s.io/yaml"
|
||||
)
|
||||
|
||||
// Context is a tuple of references to a cluster (how do I communicate with a kubernetes context),
|
||||
// a user (how do I identify myself), and a namespace (what subset of resources do I want to work with)
|
||||
type Context struct {
|
||||
// Context name in kubeconf
|
||||
NameInKubeconf string `json:"contextKubeconf"`
|
||||
|
||||
// Manifest is the default manifest to be use with this context
|
||||
// +optional
|
||||
Manifest string `json:"manifest,omitempty"`
|
||||
|
||||
// KubeConfig Context Object
|
||||
context *api.Context
|
||||
}
|
||||
|
||||
func (c *Context) String() string {
|
||||
cyaml, err := yaml.Marshal(&c)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
kcluster := c.KubeContext()
|
||||
kyaml, err := yaml.Marshal(&kcluster)
|
||||
if err != nil {
|
||||
return string(cyaml)
|
||||
}
|
||||
return fmt.Sprintf("%s\n%s", string(cyaml), string(kyaml))
|
||||
}
|
||||
|
||||
// PrettyString returns cluster name in a formatted string
|
||||
func (c *Context) PrettyString() string {
|
||||
clusterName := NewClusterComplexNameFromKubeClusterName(c.NameInKubeconf)
|
||||
return fmt.Sprintf("Context: %s\n%s\n", clusterName.Name, c)
|
||||
}
|
||||
|
||||
// KubeContext returns kube context object
|
||||
func (c *Context) KubeContext() *api.Context {
|
||||
return c.context
|
||||
}
|
||||
|
||||
// SetKubeContext updates kube contect with given context details
|
||||
func (c *Context) SetKubeContext(kc *api.Context) {
|
||||
c.context = kc
|
||||
}
|
||||
|
||||
// ClusterType returns cluster type by extracting the type portion from
|
||||
// the complex cluster name
|
||||
func (c *Context) ClusterType() string {
|
||||
return NewClusterComplexNameFromKubeClusterName(c.NameInKubeconf).Type
|
||||
}
|
||||
|
||||
func (c *Context) ClusterName() string {
|
||||
return NewClusterComplexNameFromKubeClusterName(c.NameInKubeconf).Name
|
||||
}
|
94
pkg/config/manifest.go
Normal file
94
pkg/config/manifest.go
Normal file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
Copyright 2014 The Kubernetes Authors.
|
||||
|
||||
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 config
|
||||
|
||||
import "sigs.k8s.io/yaml"
|
||||
|
||||
// Manifest is a tuple of references to a Manifest (how do Identify, collect ,
|
||||
// find the yaml manifests that airship uses to perform its operations)
|
||||
type Manifest struct {
|
||||
// PrimaryRepositoryName is a name of the repo, that contains site/<site-name> directory
|
||||
// and is a starting point for building document bundle
|
||||
PrimaryRepositoryName string `json:"primaryRepositoryName"`
|
||||
// ExtraRepositories is the map of extra repositories addressable by a name
|
||||
Repositories map[string]*Repository `json:"repositories,omitempty"`
|
||||
// TargetPath Local Target path for working or home directory for all Manifest Cloned/Returned/Generated
|
||||
TargetPath string `json:"targetPath"`
|
||||
// SubPath is a path relative to TargetPath + Path where PrimaryRepository is cloned and contains
|
||||
// directories with ClusterType and Phase bundles, example:
|
||||
// Repositories[PrimaryRepositoryName].Url = 'https://github.com/airshipit/treasuremap'
|
||||
// SubPath = "manifests"
|
||||
// you would expect that at treasuremap/manifests you would have ephemeral/initinfra and
|
||||
// ephemera/target directories, containing kustomize.yaml.
|
||||
SubPath string `json:"subPath"`
|
||||
}
|
||||
|
||||
// Repository is a tuple that holds the information for the remote sources of manifest yaml documents.
|
||||
// Information such as location, authentication info,
|
||||
// as well as details of what to get such as branch, tag, commit it, etc.
|
||||
type Repository struct {
|
||||
// URLString for Repository
|
||||
URLString string `json:"url"`
|
||||
// Auth holds authentication options against remote
|
||||
Auth *RepoAuth `json:"auth,omitempty"`
|
||||
// CheckoutOptions holds options to checkout repository
|
||||
CheckoutOptions *RepoCheckout `json:"checkout,omitempty"`
|
||||
}
|
||||
|
||||
// RepoAuth struct describes method of authentication against given repository
|
||||
type RepoAuth struct {
|
||||
// Type of authentication method to be used with given repository
|
||||
// supported types are "ssh-key", "ssh-pass", "http-basic"
|
||||
Type string `json:"type,omitempty"`
|
||||
//KeyPassword is a password decrypt ssh private key (used with ssh-key auth type)
|
||||
KeyPassword string `json:"keyPass,omitempty"`
|
||||
// KeyPath is path to private ssh key on disk (used with ssh-key auth type)
|
||||
KeyPath string `json:"sshKey,omitempty"`
|
||||
//HTTPPassword is password for basic http authentication (used with http-basic auth type)
|
||||
HTTPPassword string `json:"httpPass,omitempty"`
|
||||
// SSHPassword is password for ssh password authentication (used with ssh-pass)
|
||||
SSHPassword string `json:"sshPass,omitempty"`
|
||||
// Username to authenticate against git remote (used with any type)
|
||||
Username string `json:"username,omitempty"`
|
||||
}
|
||||
|
||||
// RepoCheckout container holds information how to checkout repository
|
||||
// Each field is mutually exclusive
|
||||
type RepoCheckout struct {
|
||||
// CommitHash is full hash of the commit that will be used to checkout
|
||||
CommitHash string `json:"commitHash,omitempty"`
|
||||
// Branch is the branch name to checkout
|
||||
Branch string `json:"branch"`
|
||||
// Tag is the tag name to checkout
|
||||
Tag string `json:"tag"`
|
||||
// RemoteRef is not supported currently TODO
|
||||
// RemoteRef is used for remote checkouts such as gerrit change requests/github pull request
|
||||
// for example refs/changes/04/691202/5
|
||||
// TODO Add support for fetching remote refs
|
||||
RemoteRef string `json:"remoteRef"`
|
||||
// ForceCheckout is a boolean to indicate whether to use the `--force` option when checking out
|
||||
ForceCheckout bool `json:"force"`
|
||||
}
|
||||
|
||||
// Manifest functions
|
||||
func (m *Manifest) String() string {
|
||||
yamlData, err := yaml.Marshal(&m)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return string(yamlData)
|
||||
}
|
@ -69,86 +69,6 @@ type Config struct {
|
||||
kubeConfig *kubeconfig.Config
|
||||
}
|
||||
|
||||
// Context is a tuple of references to a cluster (how do I communicate with a kubernetes context),
|
||||
// a user (how do I identify myself), and a namespace (what subset of resources do I want to work with)
|
||||
type Context struct {
|
||||
// Context name in kubeconf
|
||||
NameInKubeconf string `json:"contextKubeconf"`
|
||||
|
||||
// Manifest is the default manifest to be use with this context
|
||||
// +optional
|
||||
Manifest string `json:"manifest,omitempty"`
|
||||
|
||||
// KubeConfig Context Object
|
||||
context *kubeconfig.Context
|
||||
}
|
||||
|
||||
// Manifest is a tuple of references to a Manifest (how do Identify, collect ,
|
||||
// find the yaml manifests that airship uses to perform its operations)
|
||||
type Manifest struct {
|
||||
// PrimaryRepositoryName is a name of the repo, that contains site/<site-name> directory
|
||||
// and is a starting point for building document bundle
|
||||
PrimaryRepositoryName string `json:"primaryRepositoryName"`
|
||||
// ExtraRepositories is the map of extra repositories addressable by a name
|
||||
Repositories map[string]*Repository `json:"repositories,omitempty"`
|
||||
// TargetPath Local Target path for working or home dirctory for all Manifest Cloned/Returned/Generated
|
||||
TargetPath string `json:"targetPath"`
|
||||
// SubPath is a path relative to TargetPath + Path where PrimaryRepository is cloned and contains
|
||||
// directories with ClusterType and Phase bundles, example:
|
||||
// Repositories[PrimaryRepositoryName].Url = 'https://github.com/airshipit/treasuremap'
|
||||
// SubPath = "manifests"
|
||||
// you would expect that at treasuremap/manifests you would have ephemeral/initinfra and
|
||||
// ephemera/target directories, containing kustomize.yaml.
|
||||
SubPath string `json:"subPath"`
|
||||
}
|
||||
|
||||
// Repository is a tuple that holds the information for the remote sources of manifest yaml documents.
|
||||
// Information such as location, authentication info,
|
||||
// as well as details of what to get such as branch, tag, commit it, etc.
|
||||
type Repository struct {
|
||||
// URLString for Repository
|
||||
URLString string `json:"url"`
|
||||
// Auth holds authentication options against remote
|
||||
Auth *RepoAuth `json:"auth,omitempty"`
|
||||
// CheckoutOptions holds options to checkout repository
|
||||
CheckoutOptions *RepoCheckout `json:"checkout,omitempty"`
|
||||
}
|
||||
|
||||
// RepoAuth struct describes method of authentication agaist given repository
|
||||
type RepoAuth struct {
|
||||
// Type of authentication method to be used with given repository
|
||||
// supported types are "ssh-key", "ssh-pass", "http-basic"
|
||||
Type string `json:"type,omitempty"`
|
||||
//KeyPassword is a password decrypt ssh private key (used with ssh-key auth type)
|
||||
KeyPassword string `json:"keyPass,omitempty"`
|
||||
// KeyPath is path to private ssh key on disk (used with ssh-key auth type)
|
||||
KeyPath string `json:"sshKey,omitempty"`
|
||||
//HTTPPassword is password for basic http authentication (used with http-basic auth type)
|
||||
HTTPPassword string `json:"httpPass,omitempty"`
|
||||
// SSHPassword is password for ssh password authentication (used with ssh-pass)
|
||||
SSHPassword string `json:"sshPass,omitempty"`
|
||||
// Username to authenticate against git remote (used with any type)
|
||||
Username string `json:"username,omitempty"`
|
||||
}
|
||||
|
||||
// RepoCheckout container holds information how to checkout repository
|
||||
// Each field is mutually exclusive
|
||||
type RepoCheckout struct {
|
||||
// CommitHash is full hash of the commit that will be used to checkout
|
||||
CommitHash string `json:"commitHash,omitempty"`
|
||||
// Branch is the branch name to checkout
|
||||
Branch string `json:"branch"`
|
||||
// Tag is the tag name to checkout
|
||||
Tag string `json:"tag"`
|
||||
// RemoteRef is not supported currently TODO
|
||||
// RemoteRef is used for remote checkouts such as gerrit change requests/github pull request
|
||||
// for example refs/changes/04/691202/5
|
||||
// TODO Add support for fetching remote refs
|
||||
RemoteRef string `json:"remoteRef"`
|
||||
// ForceCheckout is a boolean to indicate whether to use the `--force` option when checking out
|
||||
ForceCheckout bool `json:"force"`
|
||||
}
|
||||
|
||||
// ManagementConfiguration defines configuration data for all remote systems within a context.
|
||||
type ManagementConfiguration struct {
|
||||
// Insecure indicates whether the SSL certificate should be checked on remote management requests.
|
||||
@ -160,39 +80,3 @@ type ManagementConfiguration struct {
|
||||
// one is configured in an environment.
|
||||
UseProxy bool `json:"useproxy,omitempty"`
|
||||
}
|
||||
|
||||
// Bootstrap holds configurations for bootstrap steps
|
||||
type Bootstrap struct {
|
||||
// Configuration parameters for container
|
||||
Container *Container `json:"container,omitempty"`
|
||||
// Configuration parameters for ISO builder
|
||||
Builder *Builder `json:"builder,omitempty"`
|
||||
// Configuration parameters for ephmeral node remote management
|
||||
RemoteDirect *RemoteDirect `json:"remoteDirect,omitempty"`
|
||||
}
|
||||
|
||||
// Container parameters
|
||||
type Container struct {
|
||||
// Container volume directory binding.
|
||||
Volume string `json:"volume,omitempty"`
|
||||
// ISO generator container image URL
|
||||
Image string `json:"image,omitempty"`
|
||||
// Container Runtime Interface driver
|
||||
ContainerRuntime string `json:"containerRuntime,omitempty"`
|
||||
}
|
||||
|
||||
// Builder parameters
|
||||
type Builder struct {
|
||||
// Cloud Init user-data file name placed to the container volume root
|
||||
UserDataFileName string `json:"userDataFileName,omitempty"`
|
||||
// Cloud Init network-config file name placed to the container volume root
|
||||
NetworkConfigFileName string `json:"networkConfigFileName,omitempty"`
|
||||
// File name for output metadata
|
||||
OutputMetadataFileName string `json:"outputMetadataFileName,omitempty"`
|
||||
}
|
||||
|
||||
// RemoteDirect configuration options
|
||||
type RemoteDirect struct {
|
||||
// IsoURL specifies url to download ISO image for epehemeral node
|
||||
IsoURL string `json:"isoUrl,omitempty"`
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user