manifest

package
v0.4.0 Latest Latest
Warning

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

Go to latest
Published: Sep 4, 2019 License: Apache-2.0 Imports: 29 Imported by: 0

Documentation

Overview

Package manifest represents a valid BOSH manifest and provides funcs to load it, marshal it and access its fields.

Index

Constants

View Source
const (
	// DataDir the mount path for the data directory.
	DataDir = "/var/vcap/data"

	// SysDir the mount path for the sys directory.
	SysDir = "/var/vcap/sys"

	// JobSpecFilename is the name of the job spec manifest in an unpacked BOSH release
	JobSpecFilename = "job.MF"
)
View Source
const (
	ClientAuth AuthType = "client_auth"
	ServerAuth AuthType = "server_auth"

	IGTypeService    InstanceGroupType = "service"
	IGTypeErrand     InstanceGroupType = "errand"
	IGTypeAutoErrand InstanceGroupType = "auto-errand"
	IGTypeDefault    InstanceGroupType = ""
)

AuthType values from BOSH deployment manifest

View Source
const (
	// DesiredManifestKeyName is the name of the key in desired manifest secret
	DesiredManifestKeyName = "manifest.yaml"
)

Variables

View Source
var (
	// LabelDeploymentName is the name of a label for the deployment name.
	LabelDeploymentName = fmt.Sprintf("%s/deployment-name", apis.GroupName)
	// LabelInstanceGroupName is the name of a label for an instance group name.
	LabelInstanceGroupName = fmt.Sprintf("%s/instance-group-name", apis.GroupName)
	// LabelDeploymentVersion is the name of a label for the deployment's version.
	LabelDeploymentVersion = fmt.Sprintf("%s/deployment-version", apis.GroupName)
)

Functions

func InterpolateVariables added in v0.2.0

func InterpolateVariables(log *zap.SugaredLogger, boshManifestBytes []byte, variablesDir string) error

InterpolateVariables reads explicit secrets from a folder and writes an interpolated manifest to STDOUT

func RenderJobTemplates added in v0.2.0

func RenderJobTemplates(
	boshManifestPath string,
	jobsDir string,
	jobsOutputDir string,
	instanceGroupName string,
	specIndex int,
	podName string,
	podIP net.IP,
) error

RenderJobTemplates will render templates for all jobs of the instance group https://bosh.io/docs/create-release/#job-specs boshManifest is a resolved manifest for a single instance group

Types

type AddOn

type AddOn struct {
	Name    string               `json:"name"`
	Jobs    []AddOnJob           `json:"jobs"`
	Include *AddOnPlacementRules `json:"include,omitempty"`
	Exclude *AddOnPlacementRules `json:"exclude,omitempty"`
}

AddOn from BOSH deployment manifest

type AddOnJob

type AddOnJob struct {
	Name       string        `json:"name"`
	Release    string        `json:"release"`
	Properties JobProperties `json:"properties,omitempty"`
}

AddOnJob from BOSH deployment manifest

type AddOnPlacementJob

type AddOnPlacementJob struct {
	Name    string `json:"name"`
	Release string `json:"release"`
}

AddOnPlacementJob from BOSH deployment manifest

type AddOnPlacementRules

type AddOnPlacementRules struct {
	Stemcell      []*AddOnStemcell     `json:"stemcell,omitempty"`
	Deployments   []string             `json:"deployments,omitempty"`
	Jobs          []*AddOnPlacementJob `json:"release,omitempty"`
	InstanceGroup []string             `json:"instance_groups,omitempty"`
	Networks      []string             `json:"networks,omitempty"`
	Teams         []string             `json:"teams,omitempty"`
	Lifecycle     InstanceGroupType    `json:"lifecycle,omitempty"`
}

AddOnPlacementRules from BOSH deployment manifest

type AddOnStemcell

type AddOnStemcell struct {
	OS string `json:"os"`
}

AddOnStemcell from BOSH deployment manifest

type Agent

type Agent struct {
	Settings AgentSettings `json:"settings,omitempty"`
	Tmpfs    *bool         `json:"tmpfs,omitempty"`
}

Agent from BOSH deployment manifest.

type AgentEnv

type AgentEnv struct {
	PersistentDiskFS           string             `json:"persistent_disk_fs,omitempty"`
	PersistentDiskMountOptions []string           `json:"persistent_disk_mount_options,omitempty"`
	AgentEnvBoshConfig         AgentEnvBoshConfig `json:"bosh,omitempty"`
}

AgentEnv from BOSH deployment manifest.

type AgentEnvBoshConfig

type AgentEnvBoshConfig struct {
	Password              string  `json:"password,omitempty"`
	KeepRootPassword      string  `json:"keep_root_password,omitempty"`
	RemoveDevTools        *bool   `json:"remove_dev_tools,omitempty"`
	RemoveStaticLibraries *bool   `json:"remove_static_libraries,omitempty"`
	SwapSize              *int    `json:"swap_size,omitempty"`
	IPv6                  IPv6    `json:"ipv6,omitempty"`
	JobDir                *JobDir `json:"job_dir,omitempty"`
	Agent                 Agent   `json:"agent,omitempty"`
}

AgentEnvBoshConfig from BOSH deployment manifest.

type AgentSettings added in v0.3.0

type AgentSettings struct {
	Annotations                  map[string]string `json:"annotations,omitempty"`
	Labels                       map[string]string `json:"labels,omitempty"`
	Affinity                     *corev1.Affinity  `json:"affinity,omitempty"`
	DisableLogSidecar            bool              `json:"disable_log_sidecar,omitempty" yaml:"disable_log_sidecar,omitempty"`
	ServiceAccountName           string            `json:"serviceAccountName,omitempty" yaml:"serviceAccountName,omitempty"`
	AutomountServiceAccountToken *bool             `json:"automountServiceAccountToken,omitempty" yaml:"automountServiceAccountToken,omitempty"`
}

AgentSettings from BOSH deployment manifest. These annotations and labels are added to kube resources. Affinity is added into the pod's definition.

func (*AgentSettings) Set added in v0.3.0

func (as *AgentSettings) Set(manifestName, igName, version string)

Set overrides labels and annotations with operator-owned metadata.

type AuthType

type AuthType string

AuthType from BOSH deployment manifest

type Feature

type Feature struct {
	ConvergeVariables    bool  `json:"converge_variables"`
	RandomizeAzPlacement *bool `json:"randomize_az_placement,omitempty"`
	UseDNSAddresses      *bool `json:"use_dns_addresses,omitempty"`
	UseTmpfsJobConfig    *bool `json:"use_tmpfs_job_config,omitempty"`
}

Feature from BOSH deployment manifest

type HealthCheck added in v0.2.2

type HealthCheck struct {
	ReadinessProbe *corev1.Probe `json:"readiness" yaml:"readiness"`
	LivenessProbe  *corev1.Probe `json:"liveness"  yaml:"liveness"`
}

HealthCheck defines liveness and readiness probes for a container.

type IPv6

type IPv6 struct {
	Enable bool `json:"enable"`
}

IPv6 from BOSH deployment manifest.

type InstanceGroup

type InstanceGroup struct {
	Name               string                 `json:"name"`
	Instances          int                    `json:"instances"`
	AZs                []string               `json:"azs"`
	Jobs               []Job                  `json:"jobs"`
	VMType             string                 `json:"vm_type,omitempty"`
	VMExtensions       []string               `json:"vm_extensions,omitempty"`
	VMResources        *VMResource            `json:"vm_resources"`
	Stemcell           string                 `json:"stemcell"`
	PersistentDisk     *int                   `json:"persistent_disk,omitempty"`
	PersistentDiskType string                 `json:"persistent_disk_type,omitempty"`
	Networks           []*Network             `json:"networks,omitempty"`
	Update             *Update                `json:"update,omitempty"`
	MigratedFrom       []*MigratedFrom        `json:"migrated_from,omitempty"`
	LifeCycle          InstanceGroupType      `json:"lifecycle,omitempty"`
	Properties         map[string]interface{} `json:"properties,omitempty"`
	Env                AgentEnv               `json:"env,omitempty"`
}

InstanceGroup from BOSH deployment manifest.

func (*InstanceGroup) ExtendedStatefulsetName added in v0.4.0

func (ig *InstanceGroup) ExtendedStatefulsetName(deploymentName string) string

ExtendedStatefulsetName constructs the ests name.

func (*InstanceGroup) HeadlessServiceName added in v0.4.0

func (ig *InstanceGroup) HeadlessServiceName(deploymentName string) string

HeadlessServiceName constructs the headless service name for the instance group.

func (*InstanceGroup) IndexedServiceName added in v0.4.0

func (ig *InstanceGroup) IndexedServiceName(deploymentName string, index int) string

IndexedServiceName constructs an indexed service name. It's used to construct the other service names other than the headless service.

func (*InstanceGroup) NameSanitized added in v0.4.0

func (ig *InstanceGroup) NameSanitized() string

NameSanitized returns the sanitized instance group name.

type InstanceGroupResolver added in v0.4.0

type InstanceGroupResolver struct {
	// contains filtered or unexported fields
}

InstanceGroupResolver gathers data for jobs in the manifest, it handles links and returns a deployment manifest that only has information pertinent to an instance group.

func NewInstanceGroupResolver added in v0.4.0

func NewInstanceGroupResolver(basedir, namespace string, manifest Manifest, instanceGroupName string) (*InstanceGroupResolver, error)

NewInstanceGroupResolver returns a data gatherer with logging for a given input manifest and instance group

func (*InstanceGroupResolver) BPMConfigs added in v0.4.0

func (dg *InstanceGroupResolver) BPMConfigs() (bpm.Configs, error)

BPMConfigs returns a map of all BOSH jobs in the instance group The output will be persisted by ExtendedJob as 'bpm.yaml' in the `<deployment-name>.bpm.<instance-group>-v<version>` secret.

func (*InstanceGroupResolver) Manifest added in v0.4.0

func (dg *InstanceGroupResolver) Manifest() (Manifest, error)

Manifest returns a manifest for a specific instance group only. That manifest includes the gathered data from BPM and links. The output will be persisted by ExtendedJob as 'properties.yaml' in the `<deployment-name>.ig-resolved.<instance-group>-v<version>` secret.

type InstanceGroupType added in v0.4.0

type InstanceGroupType string

InstanceGroupType represents instance groups types

type Job

type Job struct {
	Name       string                 `json:"name"`
	Release    string                 `json:"release"`
	Consumes   map[string]interface{} `json:"consumes,omitempty"`
	Provides   map[string]interface{} `json:"provides,omitempty"`
	Properties JobProperties          `json:"properties,omitempty"`
}

Job from BOSH deployment manifest

func (*Job) DataDirs added in v0.4.0

func (j *Job) DataDirs() []string

DataDirs returns all data dirs a BOSH job expects

func (Job) Property added in v0.2.0

func (job Job) Property(propertyName string) (interface{}, bool)

Property search for property value in the job properties

func (*Job) SysDirs added in v0.4.0

func (j *Job) SysDirs() []string

SysDirs returns all sys dirs a BOSH job expects

type JobDir

type JobDir struct {
	Tmpfs     *bool  `json:"tmpfs,omitempty"`
	TmpfsSize string `json:"tmpfs_size,omitempty"`
}

JobDir from BOSH deployment manifest.

type JobInstance

type JobInstance struct {
	Address  string                 `json:"address"`
	AZ       string                 `json:"az"`
	Index    int                    `json:"index"`
	Instance int                    `json:"instance"`
	Name     string                 `json:"name"`
	Network  map[string]interface{} `json:"networks"`
}

JobInstance for data gathering.

type JobLink struct {
	Address    string                 `json:"address"`
	Instances  []JobInstance          `json:"instances"`
	Properties map[string]interface{} `json:"properties"`
}

JobLink describes links inside a job properties quarks.

type JobProperties

type JobProperties struct {
	Quarks     Quarks                 `json:"quarks"`
	Properties map[string]interface{} `json:"-"`
}

JobProperties represents the properties map of a Job

func (*JobProperties) FromMap added in v0.4.0

func (p *JobProperties) FromMap(properties map[string]interface{}) error

FromMap populates a JobProperties based on a map

func (*JobProperties) MarshalJSON added in v0.4.0

func (p *JobProperties) MarshalJSON() ([]byte, error)

MarshalJSON is implemented to support inlining Properties

func (*JobProperties) ToMap

func (p *JobProperties) ToMap() map[string]interface{}

ToMap returns a complete map with all properties, including the quarks key

func (*JobProperties) UnmarshalJSON added in v0.4.0

func (p *JobProperties) UnmarshalJSON(b []byte) error

UnmarshalJSON is implemented to support inlining properties

type JobProviderLinks map[string]map[string]JobLink

JobProviderLinks provides links to other jobs, indexed by provider type and name

func (JobProviderLinks) Add added in v0.2.0

func (jpl JobProviderLinks) Add(job Job, spec JobSpec, jobsInstances []JobInstance, linkAddress string) error

Add another job to the lookup map

func (JobProviderLinks) Lookup added in v0.2.0

func (jpl JobProviderLinks) Lookup(provider *JobSpecProvider) (JobLink, bool)

Lookup returns a link for a type and name, used when links are consumed

type JobSpec

type JobSpec struct {
	Name        string
	Description string
	Packages    []string
	Templates   map[string]string
	Properties  map[string]struct {
		Description string
		Default     interface{}
		Example     interface{}
	}
	Consumes []JobSpecProvider
	Provides []JobSpecLink
}

JobSpec describes the contents of "job.MF" files

func (JobSpec) RetrieveNestedProperty added in v0.2.0

func (js JobSpec) RetrieveNestedProperty(properties map[string]interface{}, propertyName string)

RetrieveNestedProperty will generate a nested struct based on a string of the type foo.bar in the provided map It overrides existing property paths that are not of the correct type.

func (JobSpec) RetrievePropertyDefault added in v0.2.0

func (js JobSpec) RetrievePropertyDefault(propertyName string) interface{}

RetrievePropertyDefault return the default value of the spec property

type JobSpecLink struct {
	Name       string
	Type       string
	Properties []string
}

JobSpecLink represents a link in the job spec Provides field.

type JobSpecProvider added in v0.3.0

type JobSpecProvider struct {
	Name     string
	Type     string
	Optional bool
}

JobSpecProvider represents a provider in the job spec Consumes field.

type Manifest

type Manifest struct {
	Name           string                   `json:"name"`
	DirectorUUID   string                   `json:"director_uuid"`
	InstanceGroups []*InstanceGroup         `json:"instance_groups,omitempty"`
	Features       *Feature                 `json:"features,omitempty"`
	Tags           map[string]string        `json:"tags,omitempty"`
	Releases       []*Release               `json:"releases,omitempty"`
	Stemcells      []*Stemcell              `json:"stemcells,omitempty"`
	AddOns         []*AddOn                 `json:"addons,omitempty"`
	Properties     []map[string]interface{} `json:"properties,omitempty"`
	Variables      []Variable               `json:"variables,omitempty"`
	Update         *Update                  `json:"update,omitempty"`
}

Manifest is a BOSH deployment manifest

func LoadYAML added in v0.2.2

func LoadYAML(data []byte) (*Manifest, error)

LoadYAML returns a new BOSH deployment manifest from a yaml representation

func (*Manifest) ApplyAddons added in v0.4.0

func (m *Manifest) ApplyAddons() error

ApplyAddons goes through all defined addons and adds jobs to matched instance groups

func (*Manifest) GetJobOS added in v0.4.0

func (m *Manifest) GetJobOS(instanceGroupName, jobName string) (string, error)

GetJobOS returns the stemcell layer OS used for a Job This is used for matching addon placement rules

func (*Manifest) GetReleaseImage

func (m *Manifest) GetReleaseImage(instanceGroupName, jobName string) (string, error)

GetReleaseImage returns the release image location for a given instance group/job

func (*Manifest) ImplicitVariables added in v0.4.0

func (m *Manifest) ImplicitVariables() ([]string, error)

ImplicitVariables returns a list of all implicit variables in a manifest

func (*Manifest) InstanceGroupByName added in v0.2.2

func (m *Manifest) InstanceGroupByName(name string) (*InstanceGroup, error)

InstanceGroupByName returns the instance group identified by the given name

func (*Manifest) Marshal added in v0.3.1

func (m *Manifest) Marshal() ([]byte, error)

Marshal serializes a BOSH manifest into yaml

func (*Manifest) SHA1

func (m *Manifest) SHA1() (string, error)

SHA1 calculates the SHA1 of the manifest

type MigratedFrom

type MigratedFrom struct {
	Name string `json:"name"`
	Az   string `json:"az,omitempty"`
}

MigratedFrom from BOSH deployment manifest.

type Network

type Network struct {
	Name      string   `json:"name"`
	StaticIps []string `json:"static_ips,omitempty"`
	Default   []string `json:"default,omitempty"`
}

Network from BOSH deployment manifest.

type Port added in v0.2.0

type Port struct {
	Name     string `json:"name"`
	Protocol string `json:"protocol"`
	Internal int    `json:"internal"`
}

Port represents the port to be opened up for this job.

type PostStart added in v0.4.0

type PostStart struct {
	Condition *PostStartCondition `json:"condition,omitempty"`
}

PostStart allows post-start specifics to be passed through the manifest.

type PostStartCondition added in v0.4.0

type PostStartCondition struct {
	Exec *corev1.ExecAction `json:"exec,omitempty"`
}

PostStartCondition represents the condition that should succeed in order to execute the post-start script. It's often set to be the same as the readiness probe of a job.

type PreRenderScripts added in v0.4.0

type PreRenderScripts struct {
	BPM        []string `json:"bpm" yaml:"bpm"`
	IgResolver []string `json:"ig_resolver" yaml:"ig_resolver"`
	Jobs       []string `json:"jobs" yaml:"jobs"`
}

PreRenderScripts describes the different types of scripts that can be run inside a job.

type Quarks added in v0.4.0

type Quarks struct {
	Consumes         map[string]JobLink `json:"consumes"`
	Instances        []JobInstance      `json:"instances"`
	Release          string             `json:"release"`
	BPM              *bpm.Config        `json:"bpm,omitempty" yaml:"bpm,omitempty"`
	Ports            []Port             `json:"ports"`
	Run              RunConfig          `json:"run"`
	PreRenderScripts PreRenderScripts   `json:"pre_render_scripts" yaml:"pre_render_scripts"`
	PostStart        PostStart          `json:"post_start"`
	Debug            bool               `json:"debug" yaml:"debug"`
	IsAddon          bool               `json:"is_addon" yaml:"is_addon"`
	Envs             []corev1.EnvVar    `json:"envs" yaml:"envs"`
}

Quarks represents the special 'quarks' property key. It contains all kubernetes structures we need to add to the BOSH manifest.

type Release

type Release struct {
	Name     string           `json:"name"`
	Version  string           `json:"version"`
	URL      string           `json:"url,omitempty"`
	SHA1     string           `json:"sha1,omitempty"`
	Stemcell *ReleaseStemcell `json:"stemcell,omitempty"`
}

Release from BOSH deployment manifest

type ReleaseStemcell

type ReleaseStemcell struct {
	OS      string `json:"os"`
	Version string `json:"version"`
}

ReleaseStemcell from BOSH deployment manifest

type RunConfig added in v0.2.2

type RunConfig struct {
	HealthCheck     map[string]HealthCheck  `json:"healthcheck" yaml:"healthcheck"`
	SecurityContext *corev1.SecurityContext `json:"security_context" yaml:"security_context"`
}

RunConfig describes the runtime configuration for this job.

type Stemcell

type Stemcell struct {
	Alias   string `json:"alias"`
	OS      string `json:"os,omitempty"`
	Version string `json:"version"`
	Name    string `json:"name,omitempty"`
}

Stemcell from BOSH deployment manifest

type Update

type Update struct {
	Canaries        int     `json:"canaries"`
	MaxInFlight     string  `json:"max_in_flight"`
	CanaryWatchTime string  `json:"canary_watch_time"`
	UpdateWatchTime string  `json:"update_watch_time"`
	Serial          bool    `json:"serial,omitempty"`
	VMStrategy      *string `json:"vm_strategy,omitempty"`
}

Update from BOSH deployment manifest.

type VMResource

type VMResource struct {
	CPU               int `json:"cpu"`
	RAM               int `json:"ram"`
	EphemeralDiskSize int `json:"ephemeral_disk_size"`
}

VMResource from BOSH deployment manifest.

type Variable

type Variable struct {
	Name    string           `json:"name"`
	Type    string           `json:"type"`
	Options *VariableOptions `json:"options,omitempty"`
}

Variable from BOSH deployment manifest

type VariableOptions

type VariableOptions struct {
	CommonName       string                  `json:"common_name"`
	AlternativeNames []string                `json:"alternative_names,omitempty"`
	IsCA             bool                    `json:"is_ca"`
	CA               string                  `json:"ca,omitempty"`
	ExtendedKeyUsage []AuthType              `json:"extended_key_usage,omitempty"`
	SignerType       string                  `json:"signer_type,omitempty"`
	ServiceRef       []esv1.ServiceReference `json:"serviceRef,omitempty"`
}

VariableOptions from BOSH deployment manifest

Directories

Path Synopsis
Code generated by counterfeiter.
Code generated by counterfeiter.

Jump to

Keyboard shortcuts

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