cloudapi: Add optional blueprint schema to compose request

This adds a 'blueprint' section to the compose request. It also
restricts it so that only 'blueprint' or 'customizations' can be
included, but not both. The goal is to move to using 'blueprint' for all
customizations so that there is a single consistent interface for the
clients.

Where the openapi schemas are the same between the two they have been
shared, but a few are different. They are created with 'Blueprint*' as
their name.

This also re-adds the SSHKey schema removed by commit
bfad6d50e1, it is used by the Blueprint
Customization.
This commit is contained in:
Brian C. Lane 2023-10-18 10:58:53 -07:00 committed by Sanne Raymaekers
parent ea05f400e6
commit 5b87877109
2 changed files with 767 additions and 175 deletions

View file

@ -22,6 +22,15 @@ const (
BearerScopes = "Bearer.Scopes"
)
// Defines values for BlueprintCustomizationsPartitioningMode.
const (
BlueprintCustomizationsPartitioningModeAutoLvm BlueprintCustomizationsPartitioningMode = "auto-lvm"
BlueprintCustomizationsPartitioningModeLvm BlueprintCustomizationsPartitioningMode = "lvm"
BlueprintCustomizationsPartitioningModeRaw BlueprintCustomizationsPartitioningMode = "raw"
)
// Defines values for ComposeStatusValue.
const (
ComposeStatusValueFailure ComposeStatusValue = "failure"
@ -200,6 +209,185 @@ type AzureUploadStatus struct {
ImageName string `json:"image_name"`
}
// Blueprint defines model for Blueprint.
type Blueprint struct {
// Container images to embed into the final artfact
Containers *[]Container `json:"containers,omitempty"`
Customizations *BlueprintCustomizations `json:"customizations,omitempty"`
Description *string `json:"description,omitempty"`
// The distribution to use for the compose. If left empty the host
// distro will be used.
Distro *string `json:"distro,omitempty"`
// Package groups to be installed
Groups *[]PackageGroup `json:"groups,omitempty"`
// An alias for packages, retained for backwards compatability
Modules *[]Package `json:"modules,omitempty"`
Name string `json:"name"`
// Packages to be installed
Packages *[]Package `json:"packages,omitempty"`
// A semver version number
Version *string `json:"version,omitempty"`
}
// BlueprintCustomizations defines model for BlueprintCustomizations.
type BlueprintCustomizations struct {
// Directories to create in the final artifact
Directories *[]Directory `json:"directories,omitempty"`
// FIDO device onboard configuration
Fdo *FDO `json:"fdo,omitempty"`
// Files to create in the final artifact
Files *[]BlueprintFile `json:"files,omitempty"`
// List of filesystem mountpoints to create
Filesystem *[]BlueprintFilesystem `json:"filesystem,omitempty"`
// Enable FIPS mode
Fips *bool `json:"fips,omitempty"`
// Firewalld configuration
Firewall *BlueprintFirewall `json:"firewall,omitempty"`
// List of groups to create
Group *[]Group `json:"group,omitempty"`
// Configures the hostname
Hostname *string `json:"hostname,omitempty"`
// Ignition configuration
Ignition *Ignition `json:"ignition,omitempty"`
// Name of the installation device, currently only useful for the edge-simplified-installer type
InstallationDevice *string `json:"installation_device,omitempty"`
Kernel *Kernel `json:"kernel,omitempty"`
// Locale configuration
Locale *Locale `json:"locale,omitempty"`
Openscap *BlueprintOpenSCAP `json:"openscap,omitempty"`
// Select how the disk image will be partitioned. 'auto-lvm' will use raw unless
// there are one or more mountpoints in which case it will use LVM. 'lvm' always
// uses LVM, even when there are no extra mountpoints. 'raw' uses raw partitions
// even when there are one or more mountpoints.
PartitioningMode *BlueprintCustomizationsPartitioningMode `json:"partitioning_mode,omitempty"`
// Repositories to write to /etc/yum.repos.d/ in the final image. Note
// that these are not used at build time.
Repositories *[]BlueprintRepository `json:"repositories,omitempty"`
Services *Services `json:"services,omitempty"`
// List of ssh keys
Sshkey *[]SSHKey `json:"sshkey,omitempty"`
// Timezone configuration
Timezone *Timezone `json:"timezone,omitempty"`
// List of users to create
User *[]BlueprintUser `json:"user,omitempty"`
}
// Select how the disk image will be partitioned. 'auto-lvm' will use raw unless
// there are one or more mountpoints in which case it will use LVM. 'lvm' always
// uses LVM, even when there are no extra mountpoints. 'raw' uses raw partitions
// even when there are one or more mountpoints.
type BlueprintCustomizationsPartitioningMode string
// A custom file to create in the final artifact.
type BlueprintFile struct {
// Contents of the file as plain text
Data *string `json:"data,omitempty"`
// Group of the file as a gid or a group name
Group *interface{} `json:"group,omitempty"`
// Permissions string for the file in octal format
Mode *string `json:"mode,omitempty"`
// Path to the file
Path string `json:"path"`
// Owner of the file as a uid or a user name
User *interface{} `json:"user,omitempty"`
}
// BlueprintFilesystem defines model for BlueprintFilesystem.
type BlueprintFilesystem struct {
// size of the filesystem in bytes
Minsize uint64 `json:"minsize"`
Mountpoint string `json:"mountpoint"`
}
// Firewalld configuration
type BlueprintFirewall struct {
// List of ports (or port ranges) and protocols to open
Ports *[]string `json:"ports,omitempty"`
// Firewalld services to enable or disable
Services *FirewallServices `json:"services,omitempty"`
Zones *[]FirewallZones `json:"zones,omitempty"`
}
// BlueprintOpenSCAP defines model for BlueprintOpenSCAP.
type BlueprintOpenSCAP struct {
Datastream *string `json:"datastream,omitempty"`
ProfileId string `json:"profile_id"`
Tailoring *OpenSCAPTailoring `json:"tailoring,omitempty"`
}
// BlueprintRepository defines model for BlueprintRepository.
type BlueprintRepository struct {
Baseurls *[]string `json:"baseurls,omitempty"`
Enabled *bool `json:"enabled,omitempty"`
Filename *string `json:"filename,omitempty"`
Gpgcheck *bool `json:"gpgcheck,omitempty"`
Gpgkeys *[]string `json:"gpgkeys,omitempty"`
Id string `json:"id"`
Metalink *string `json:"metalink,omitempty"`
Mirrorlist *string `json:"mirrorlist,omitempty"`
// Disables modularity filtering for this repository.
ModuleHotfixes *bool `json:"module_hotfixes,omitempty"`
Name *string `json:"name,omitempty"`
Priority *int `json:"priority,omitempty"`
RepoGpgcheck *bool `json:"repo_gpgcheck,omitempty"`
Sslverify *bool `json:"sslverify,omitempty"`
}
// BlueprintUser defines model for BlueprintUser.
type BlueprintUser struct {
Description *string `json:"description,omitempty"`
// Group id to use instead of the default
Gid *int `json:"gid,omitempty"`
// A list of additional groups to add the user to
Groups *[]string `json:"groups,omitempty"`
// The user's home directory
Home *string `json:"home,omitempty"`
// ssh public key
Key *string `json:"key,omitempty"`
Name string `json:"name"`
// If the password starts with $6$, $5$, or $2b$ it will be stored as
// an encrypted password. Otherwise it will be treated as a plain text
// password.
Password *string `json:"password,omitempty"`
// Login shell to use
Shell *string `json:"shell,omitempty"`
// User id to use instead of the default
Uid *int `json:"uid,omitempty"`
}
// CloneComposeBody defines model for CloneComposeBody.
type CloneComposeBody interface{}
@ -258,6 +446,7 @@ type ComposeMetadata struct {
// ComposeRequest defines model for ComposeRequest.
type ComposeRequest struct {
Blueprint *Blueprint `json:"blueprint,omitempty"`
Customizations *Customizations `json:"customizations,omitempty"`
Distribution string `json:"distribution"`
ImageRequest *ImageRequest `json:"image_request,omitempty"`
@ -485,13 +674,27 @@ type FirewallCustomization struct {
Ports *[]string `json:"ports,omitempty"`
// Firewalld services to enable or disable
Services *struct {
// List of services to disable
Disabled *[]string `json:"disabled,omitempty"`
Services *FirewallServices `json:"services,omitempty"`
}
// List of services to enable
Enabled *[]string `json:"enabled,omitempty"`
} `json:"services,omitempty"`
// Firewalld services to enable or disable
type FirewallServices struct {
// List of services to disable
Disabled *[]string `json:"disabled,omitempty"`
// List of services to enable
Enabled *[]string `json:"enabled,omitempty"`
}
// Bind a list of network sources to a zone to restrict traffic from
// those sources based on the settings of the zone.
type FirewallZones struct {
// name of the zone, if left empty the sources will apply to
// the default zone.
Name *string `json:"name,omitempty"`
// List of sources for the zone
Sources *[]string `json:"sources,omitempty"`
}
// GCPUploadOptions defines model for GCPUploadOptions.
@ -696,6 +899,24 @@ type OpenSCAPTailoring struct {
Unselected *[]string `json:"unselected,omitempty"`
}
// Package defines model for Package.
type Package struct {
// Name of the package to install. File globbing is supported,
// eg. 'openssh-*'
Name string `json:"name"`
// Optional version of the package to install. If left blank the
// latest available version will be used. Wildcards are supported
// eg. '4.11.*'
Version *string `json:"version,omitempty"`
}
// PackageGroup defines model for PackageGroup.
type PackageGroup struct {
// Package group name
Name string `json:"name"`
}
// PackageMetadata defines model for PackageMetadata.
type PackageMetadata struct {
Arch string `json:"arch"`
@ -751,6 +972,15 @@ type Repository struct {
Rhsm *bool `json:"rhsm,omitempty"`
}
// SSHKey defines model for SSHKey.
type SSHKey struct {
// Adds the key to the user's authorized_keys file
Key string `json:"key"`
// User to configure the ssh key for
User string `json:"user"`
}
// Services defines model for Services.
type Services struct {
// List of services to disable by default
@ -1101,158 +1331,176 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"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",
}
// GetSwagger returns the content of the embedded swagger specification file