// Package v2 provides primitives to interact with the openapi HTTP API. // // Code generated by github.com/deepmap/oapi-codegen version v1.8.2 DO NOT EDIT. package v2 import ( "bytes" "compress/gzip" "encoding/base64" "fmt" "net/http" "net/url" "path" "strings" "github.com/deepmap/oapi-codegen/pkg/runtime" "github.com/getkin/kin-openapi/openapi3" "github.com/labstack/echo/v4" ) 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" ComposeStatusValuePending ComposeStatusValue = "pending" ComposeStatusValueSuccess ComposeStatusValue = "success" ) // Defines values for CustomizationsPartitioningMode. const ( CustomizationsPartitioningModeAutoLvm CustomizationsPartitioningMode = "auto-lvm" CustomizationsPartitioningModeLvm CustomizationsPartitioningMode = "lvm" CustomizationsPartitioningModeRaw CustomizationsPartitioningMode = "raw" ) // Defines values for ImageStatusValue. const ( ImageStatusValueBuilding ImageStatusValue = "building" ImageStatusValueFailure ImageStatusValue = "failure" ImageStatusValuePending ImageStatusValue = "pending" ImageStatusValueRegistering ImageStatusValue = "registering" ImageStatusValueSuccess ImageStatusValue = "success" ImageStatusValueUploading ImageStatusValue = "uploading" ) // Defines values for ImageTypes. const ( ImageTypesAws ImageTypes = "aws" ImageTypesAwsHaRhui ImageTypes = "aws-ha-rhui" ImageTypesAwsRhui ImageTypes = "aws-rhui" ImageTypesAwsSapRhui ImageTypes = "aws-sap-rhui" ImageTypesAzure ImageTypes = "azure" ImageTypesAzureEap7Rhui ImageTypes = "azure-eap7-rhui" ImageTypesAzureRhui ImageTypes = "azure-rhui" ImageTypesAzureSapRhui ImageTypes = "azure-sap-rhui" ImageTypesEdgeCommit ImageTypes = "edge-commit" ImageTypesEdgeContainer ImageTypes = "edge-container" ImageTypesEdgeInstaller ImageTypes = "edge-installer" ImageTypesGcp ImageTypes = "gcp" ImageTypesGcpRhui ImageTypes = "gcp-rhui" ImageTypesGuestImage ImageTypes = "guest-image" ImageTypesImageInstaller ImageTypes = "image-installer" ImageTypesIotBootableContainer ImageTypes = "iot-bootable-container" ImageTypesIotCommit ImageTypes = "iot-commit" ImageTypesIotContainer ImageTypes = "iot-container" ImageTypesIotInstaller ImageTypes = "iot-installer" ImageTypesIotRawImage ImageTypes = "iot-raw-image" ImageTypesIotSimplifiedInstaller ImageTypes = "iot-simplified-installer" ImageTypesLiveInstaller ImageTypes = "live-installer" ImageTypesMinimalRaw ImageTypes = "minimal-raw" ImageTypesOci ImageTypes = "oci" ImageTypesVsphere ImageTypes = "vsphere" ImageTypesVsphereOva ImageTypes = "vsphere-ova" ImageTypesWsl ImageTypes = "wsl" ) // Defines values for UploadStatusValue. const ( UploadStatusValueFailure UploadStatusValue = "failure" UploadStatusValuePending UploadStatusValue = "pending" UploadStatusValueRunning UploadStatusValue = "running" UploadStatusValueSuccess UploadStatusValue = "success" ) // Defines values for UploadTypes. const ( UploadTypesAws UploadTypes = "aws" UploadTypesAwsS3 UploadTypes = "aws.s3" UploadTypesAzure UploadTypes = "azure" UploadTypesContainer UploadTypes = "container" UploadTypesGcp UploadTypes = "gcp" UploadTypesLocal UploadTypes = "local" UploadTypesOciObjectstorage UploadTypes = "oci.objectstorage" UploadTypesPulpOstree UploadTypes = "pulp.ostree" ) // AWSEC2CloneCompose defines model for AWSEC2CloneCompose. type AWSEC2CloneCompose struct { Region string `json:"region"` ShareWithAccounts *[]string `json:"share_with_accounts,omitempty"` } // AWSEC2UploadOptions defines model for AWSEC2UploadOptions. type AWSEC2UploadOptions struct { Region string `json:"region"` ShareWithAccounts []string `json:"share_with_accounts"` SnapshotName *string `json:"snapshot_name,omitempty"` } // AWSEC2UploadStatus defines model for AWSEC2UploadStatus. type AWSEC2UploadStatus struct { Ami string `json:"ami"` Region string `json:"region"` } // AWSS3UploadOptions defines model for AWSS3UploadOptions. type AWSS3UploadOptions struct { // If set to false (the default value), a long, obfuscated URL // is returned. Its expiration might be sooner than for other upload // targets. // // If set to true, a shorter URL is returned and // its expiration is the same as for the other upload targets. Public *bool `json:"public,omitempty"` Region string `json:"region"` } // AWSS3UploadStatus defines model for AWSS3UploadStatus. type AWSS3UploadStatus struct { Url string `json:"url"` } // AzureUploadOptions defines model for AzureUploadOptions. type AzureUploadOptions struct { // Name of the uploaded image. It must be unique in the given resource group. // If name is omitted from the request, a random one based on a UUID is // generated. ImageName *string `json:"image_name,omitempty"` // Location of the provided resource_group, where the image should be uploaded and registered. // How to list all locations: // https://docs.microsoft.com/en-us/cli/azure/account?view=azure-cli-latest#az_account_list_locations' // If the location is not specified, it is deducted from the provided resource_group. Location *string `json:"location,omitempty"` // Name of the resource group where the image should be uploaded. ResourceGroup string `json:"resource_group"` // ID of subscription where the image should be uploaded. SubscriptionId string `json:"subscription_id"` // ID of the tenant where the image should be uploaded. // How to find it in the Azure Portal: // https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/active-directory-how-to-find-tenant TenantId string `json:"tenant_id"` } // AzureUploadStatus defines model for AzureUploadStatus. 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"` Installer *Installer `json:"installer,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"` JsonTailoring *OpenSCAPJSONTailoring `json:"json_tailoring,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{} // CloneComposeResponse defines model for CloneComposeResponse. type CloneComposeResponse struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema Id string `json:"id"` } // CloneStatus defines model for CloneStatus. type CloneStatus struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded struct due to allOf(#/components/schemas/UploadStatus) UploadStatus `yaml:",inline"` } // ComposeId defines model for ComposeId. type ComposeId struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema Id string `json:"id"` } // ComposeLogs defines model for ComposeLogs. type ComposeLogs struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema ImageBuilds []interface{} `json:"image_builds"` Koji *KojiLogs `json:"koji,omitempty"` } // ComposeManifests defines model for ComposeManifests. type ComposeManifests struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema Manifests []interface{} `json:"manifests"` } // ComposeMetadata defines model for ComposeMetadata. type ComposeMetadata struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema // ID (hash) of the built commit OstreeCommit *string `json:"ostree_commit,omitempty"` // Package list including NEVRA Packages *[]PackageMetadata `json:"packages,omitempty"` } // 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"` ImageRequests *[]ImageRequest `json:"image_requests,omitempty"` Koji *Koji `json:"koji,omitempty"` } // ComposeStatus defines model for ComposeStatus. type ComposeStatus struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema ImageStatus ImageStatus `json:"image_status"` ImageStatuses *[]ImageStatus `json:"image_statuses,omitempty"` KojiStatus *KojiStatus `json:"koji_status,omitempty"` Status ComposeStatusValue `json:"status"` } // ComposeStatusError defines model for ComposeStatusError. type ComposeStatusError struct { Details *interface{} `json:"details,omitempty"` Id int `json:"id"` Reason string `json:"reason"` } // ComposeStatusValue defines model for ComposeStatusValue. type ComposeStatusValue string // Container defines model for Container. type Container struct { // Name to use for the container from the image Name *string `json:"name,omitempty"` // Reference to the container to embed Source string `json:"source"` // Control TLS verifification TlsVerify *bool `json:"tls_verify,omitempty"` } // ContainerUploadOptions defines model for ContainerUploadOptions. type ContainerUploadOptions struct { // Name for the created container image Name *string `json:"name,omitempty"` // Tag for the created container image Tag *string `json:"tag,omitempty"` } // ContainerUploadStatus defines model for ContainerUploadStatus. type ContainerUploadStatus struct { // Digest of the manifest of the uploaded container on the registry Digest string `json:"digest"` // FQDN of the uploaded image Url string `json:"url"` } // CustomRepository defines model for CustomRepository. type CustomRepository struct { Baseurl *[]string `json:"baseurl,omitempty"` CheckGpg *bool `json:"check_gpg,omitempty"` CheckRepoGpg *bool `json:"check_repo_gpg,omitempty"` Enabled *bool `json:"enabled,omitempty"` Filename *string `json:"filename,omitempty"` Gpgkey *[]string `json:"gpgkey,omitempty"` Id string `json:"id"` Metalink *string `json:"metalink,omitempty"` Mirrorlist *string `json:"mirrorlist,omitempty"` ModuleHotfixes *bool `json:"module_hotfixes,omitempty"` Name *string `json:"name,omitempty"` Priority *int `json:"priority,omitempty"` SslVerify *bool `json:"ssl_verify,omitempty"` } // Customizations defines model for Customizations. type Customizations struct { Containers *[]Container `json:"containers,omitempty"` // Extra repositories for packages specified in customizations. These // repositories will be used to depsolve and retrieve packages. Additionally, // these packages will be saved and imported to the `/etc/yum.repos.d/` directory // on the image CustomRepositories *[]CustomRepository `json:"custom_repositories,omitempty"` Directories *[]Directory `json:"directories,omitempty"` // FIDO device onboard configuration Fdo *FDO `json:"fdo,omitempty"` Files *[]File `json:"files,omitempty"` Filesystem *[]Filesystem `json:"filesystem,omitempty"` // System FIPS mode setup Fips *FIPS `json:"fips,omitempty"` // Firewalld configuration Firewall *FirewallCustomization `json:"firewall,omitempty"` // List of groups to create Groups *[]Group `json:"groups,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"` Installer *Installer `json:"installer,omitempty"` Kernel *Kernel `json:"kernel,omitempty"` // Locale configuration Locale *Locale `json:"locale,omitempty"` Openscap *OpenSCAP `json:"openscap,omitempty"` Packages *[]string `json:"packages,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 *CustomizationsPartitioningMode `json:"partitioning_mode,omitempty"` // Extra repositories for packages specified in customizations. These // repositories will only be used to depsolve and retrieve packages // for the OS itself (they will not be available for the build root or // any other part of the build process). The package_sets field for these // repositories is ignored. PayloadRepositories *[]Repository `json:"payload_repositories,omitempty"` Services *Services `json:"services,omitempty"` Subscription *Subscription `json:"subscription,omitempty"` // Timezone configuration Timezone *Timezone `json:"timezone,omitempty"` Users *[]User `json:"users,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 CustomizationsPartitioningMode string // A custom directory to create in the final artifact. type Directory struct { // Ensure that the parent directories exist EnsureParents *bool `json:"ensure_parents,omitempty"` // Group of the directory as a group name or a gid Group *interface{} `json:"group,omitempty"` // Permissions string for the directory in octal format Mode *string `json:"mode,omitempty"` // Path to the directory Path string `json:"path"` // Owner of the directory as a user name or a uid User *interface{} `json:"user,omitempty"` } // Error defines model for Error. type Error struct { // Embedded struct due to allOf(#/components/schemas/ObjectReference) ObjectReference `yaml:",inline"` // Embedded fields due to inline allOf schema Code string `json:"code"` Details *interface{} `json:"details,omitempty"` OperationId string `json:"operation_id"` Reason string `json:"reason"` } // ErrorList defines model for ErrorList. type ErrorList struct { // Embedded struct due to allOf(#/components/schemas/List) List `yaml:",inline"` // Embedded fields due to inline allOf schema Items []Error `json:"items"` } // FIDO device onboard configuration type FDO struct { DiMfgStringTypeMacIface *string `json:"di_mfg_string_type_mac_iface,omitempty"` DiunPubKeyHash *string `json:"diun_pub_key_hash,omitempty"` DiunPubKeyInsecure *string `json:"diun_pub_key_insecure,omitempty"` DiunPubKeyRootCerts *string `json:"diun_pub_key_root_certs,omitempty"` ManufacturingServerUrl *string `json:"manufacturing_server_url,omitempty"` } // System FIPS mode setup type FIPS struct { // Enables the system FIPS mode Enabled *bool `json:"enabled,omitempty"` } // A custom file to create in the final artifact. type File struct { // Contents of the file as plain text Data *string `json:"data,omitempty"` // Ensure that the parent directories exist EnsureParents *bool `json:"ensure_parents,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"` } // Filesystem defines model for Filesystem. type Filesystem struct { // size of the filesystem in bytes MinSize uint64 `json:"min_size"` Mountpoint string `json:"mountpoint"` } // Firewalld configuration type FirewallCustomization 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"` } // 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. type GCPUploadOptions struct { // Name of an existing STANDARD Storage class Bucket. Bucket *string `json:"bucket,omitempty"` // The name to use for the imported and shared Compute Engine image. // The image name must be unique within the GCP project, which is used // for the OS image upload and import. If not specified a random // 'composer-api-' string is used as the image name. ImageName *string `json:"image_name,omitempty"` // The GCP region where the OS image will be imported to and shared from. // The value must be a valid GCP location. See https://cloud.google.com/storage/docs/locations. // If not specified, the multi-region location closest to the source // (source Storage Bucket location) is chosen automatically. Region string `json:"region"` // List of valid Google accounts to share the imported Compute Engine image with. // Each string must contain a specifier of the account type. Valid formats are: // - 'user:{emailid}': An email address that represents a specific // Google account. For example, 'alice@example.com'. // - 'serviceAccount:{emailid}': An email address that represents a // service account. For example, 'my-other-app@appspot.gserviceaccount.com'. // - 'group:{emailid}': An email address that represents a Google group. // For example, 'admins@example.com'. // - 'domain:{domain}': The G Suite domain (primary) that represents all // the users of that domain. For example, 'google.com' or 'example.com'. // If not specified, the imported Compute Engine image is not shared with any // account. ShareWithAccounts *[]string `json:"share_with_accounts,omitempty"` } // GCPUploadStatus defines model for GCPUploadStatus. type GCPUploadStatus struct { ImageName string `json:"image_name"` ProjectId string `json:"project_id"` } // Group defines model for Group. type Group struct { // Group id of the group to create (optional) Gid *int `json:"gid,omitempty"` // Name of the group to create Name string `json:"name"` } // Ignition configuration type Ignition struct { Embedded *IgnitionEmbedded `json:"embedded,omitempty"` Firstboot *IgnitionFirstboot `json:"firstboot,omitempty"` } // IgnitionEmbedded defines model for IgnitionEmbedded. type IgnitionEmbedded struct { Config string `json:"config"` } // IgnitionFirstboot defines model for IgnitionFirstboot. type IgnitionFirstboot struct { // Provisioning URL Url string `json:"url"` } // ImageRequest defines model for ImageRequest. type ImageRequest struct { Architecture string `json:"architecture"` ImageType ImageTypes `json:"image_type"` Ostree *OSTree `json:"ostree,omitempty"` Repositories []Repository `json:"repositories"` // Size of image, in bytes. When set to 0 the image size is a minimum // defined by the image type. Size *uint64 `json:"size,omitempty"` // Options for a given upload destination. // This should really be oneOf but AWSS3UploadOptions is a subset of // AWSEC2UploadOptions. This means that all AWSEC2UploadOptions objects // are also valid AWSS3UploadOptionas objects which violates the oneOf // rules. Therefore, we have to use anyOf here but be aware that it isn't // possible to mix and match more schemas together. UploadOptions *UploadOptions `json:"upload_options,omitempty"` // The type and options for multiple upload targets. Each item defines // a separate upload destination with its own options. Multiple // different targets as well as multiple targets of the same kind are // supported. UploadTargets *[]UploadTarget `json:"upload_targets,omitempty"` } // ImageStatus defines model for ImageStatus. type ImageStatus struct { Error *ComposeStatusError `json:"error,omitempty"` Status ImageStatusValue `json:"status"` UploadStatus *UploadStatus `json:"upload_status,omitempty"` UploadStatuses *[]UploadStatus `json:"upload_statuses,omitempty"` } // ImageStatusValue defines model for ImageStatusValue. type ImageStatusValue string // ImageTypes defines model for ImageTypes. type ImageTypes string // Installer defines model for Installer. type Installer struct { SudoNopasswd *[]string `json:"sudo-nopasswd,omitempty"` Unattended *bool `json:"unattended,omitempty"` } // Kernel defines model for Kernel. type Kernel struct { // Appends arguments to the bootloader kernel command line Append *string `json:"append,omitempty"` // Name of the kernel to use Name *string `json:"name,omitempty"` } // Koji defines model for Koji. type Koji struct { Name string `json:"name"` Release string `json:"release"` Server string `json:"server"` TaskId int `json:"task_id"` Version string `json:"version"` } // KojiLogs defines model for KojiLogs. type KojiLogs struct { Import interface{} `json:"import"` Init interface{} `json:"init"` } // KojiStatus defines model for KojiStatus. type KojiStatus struct { BuildId *int `json:"build_id,omitempty"` } // List defines model for List. type List struct { Kind string `json:"kind"` Page int `json:"page"` Size int `json:"size"` Total int `json:"total"` } // LocalUploadOptions defines model for LocalUploadOptions. type LocalUploadOptions struct { // This is used in combination with the OSBUILD_LOCALSAVE environmental // variable on the server to enable saving the compose locally. This // is for development use only, and is not available to users. LocalSave bool `json:"local_save"` } // Locale configuration type Locale struct { // Sets the keyboard layout Keyboard *string `json:"keyboard,omitempty"` // List of locales to be installed, the first one becomes primary, subsequent ones are secondary Languages *[]string `json:"languages,omitempty"` } // OCIUploadOptions defines model for OCIUploadOptions. type OCIUploadOptions map[string]interface{} // OCIUploadStatus defines model for OCIUploadStatus. type OCIUploadStatus struct { Url string `json:"url"` } // OSTree defines model for OSTree. type OSTree struct { // A URL which, if set, is used for fetching content. Implies that `url` is set as well, // which will be used for metadata only. Contenturl *string `json:"contenturl,omitempty"` // Can be either a commit (example: 02604b2da6e954bd34b8b82a835e5a77d2b60ffa), or a branch-like reference (example: rhel/8/x86_64/edge) Parent *string `json:"parent,omitempty"` Ref *string `json:"ref,omitempty"` // Determines whether a valid subscription manager (candlepin) identity is required to // access this repository. Consumer certificates will be used as client certificates when // fetching metadata and content. Rhsm *bool `json:"rhsm,omitempty"` Url *string `json:"url,omitempty"` } // ObjectReference defines model for ObjectReference. type ObjectReference struct { Href string `json:"href"` Id string `json:"id"` Kind string `json:"kind"` } // OpenSCAP defines model for OpenSCAP. type OpenSCAP struct { JsonTailoring *OpenSCAPJSONTailoring `json:"json_tailoring,omitempty"` ProfileId string `json:"profile_id"` Tailoring *OpenSCAPTailoring `json:"tailoring,omitempty"` } // OpenSCAPJSONTailoring defines model for OpenSCAPJSONTailoring. type OpenSCAPJSONTailoring struct { Filepath string `json:"filepath"` ProfileId string `json:"profile_id"` } // OpenSCAPTailoring defines model for OpenSCAPTailoring. type OpenSCAPTailoring struct { Selected *[]string `json:"selected,omitempty"` 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"` Epoch *string `json:"epoch,omitempty"` Name string `json:"name"` Release string `json:"release"` Sigmd5 string `json:"sigmd5"` Signature *string `json:"signature,omitempty"` Type string `json:"type"` Version string `json:"version"` } // PulpOSTreeUploadOptions defines model for PulpOSTreeUploadOptions. type PulpOSTreeUploadOptions struct { // Basepath for distributing the repository Basepath string `json:"basepath"` // Repository to import the ostree commit to Repository *string `json:"repository,omitempty"` ServerAddress *string `json:"server_address,omitempty"` } // PulpOSTreeUploadStatus defines model for PulpOSTreeUploadStatus. type PulpOSTreeUploadStatus struct { RepoUrl string `json:"repo_url"` } // Repository configuration. // At least one of the 'baseurl', 'mirrorlist', 'metalink' properties must // be specified. If more of them are specified, the order of precedence is // the same as listed above. type Repository struct { Baseurl *string `json:"baseurl,omitempty"` CheckGpg *bool `json:"check_gpg,omitempty"` // Enables gpg verification of the repository metadata CheckRepoGpg *bool `json:"check_repo_gpg,omitempty"` // GPG key used to sign packages in this repository. Gpgkey *string `json:"gpgkey,omitempty"` IgnoreSsl *bool `json:"ignore_ssl,omitempty"` Metalink *string `json:"metalink,omitempty"` Mirrorlist *string `json:"mirrorlist,omitempty"` // Disables modularity filtering for this repository. ModuleHotfixes *bool `json:"module_hotfixes,omitempty"` // Naming package sets for a repository assigns it to a specific part // (pipeline) of the build process. PackageSets *[]string `json:"package_sets,omitempty"` // Determines whether a valid subscription is required to access this repository. 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 Disabled *[]string `json:"disabled,omitempty"` // List of services to enable by default Enabled *[]string `json:"enabled,omitempty"` // List of services to mask by default Masked *[]string `json:"masked,omitempty"` } // Subscription defines model for Subscription. type Subscription struct { ActivationKey string `json:"activation_key"` BaseUrl string `json:"base_url"` Insights bool `json:"insights"` Organization string `json:"organization"` // Optional flag to use rhc to register the system, which also always enables Insights. Rhc *bool `json:"rhc,omitempty"` ServerUrl string `json:"server_url"` } // Timezone configuration type Timezone struct { // List of ntp servers Ntpservers *[]string `json:"ntpservers,omitempty"` // Name of the timezone, defaults to UTC Timezone *string `json:"timezone,omitempty"` } // Options for a given upload destination. // This should really be oneOf but AWSS3UploadOptions is a subset of // AWSEC2UploadOptions. This means that all AWSEC2UploadOptions objects // are also valid AWSS3UploadOptionas objects which violates the oneOf // rules. Therefore, we have to use anyOf here but be aware that it isn't // possible to mix and match more schemas together. type UploadOptions interface{} // UploadStatus defines model for UploadStatus. type UploadStatus struct { Options interface{} `json:"options"` Status UploadStatusValue `json:"status"` Type UploadTypes `json:"type"` } // UploadStatusValue defines model for UploadStatusValue. type UploadStatusValue string // UploadTarget defines model for UploadTarget. type UploadTarget struct { Type UploadTypes `json:"type"` // Options for a given upload destination. // This should really be oneOf but AWSS3UploadOptions is a subset of // AWSEC2UploadOptions. This means that all AWSEC2UploadOptions objects // are also valid AWSS3UploadOptionas objects which violates the oneOf // rules. Therefore, we have to use anyOf here but be aware that it isn't // possible to mix and match more schemas together. UploadOptions UploadOptions `json:"upload_options"` } // UploadTypes defines model for UploadTypes. type UploadTypes string // User defines model for User. type User struct { Groups *[]string `json:"groups,omitempty"` 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"` } // Page defines model for page. type Page string // Size defines model for size. type Size string // PostComposeJSONBody defines parameters for PostCompose. type PostComposeJSONBody ComposeRequest // PostCloneComposeJSONBody defines parameters for PostCloneCompose. type PostCloneComposeJSONBody CloneComposeBody // GetErrorListParams defines parameters for GetErrorList. type GetErrorListParams struct { // Page index Page *Page `json:"page,omitempty"` // Number of items in each page Size *Size `json:"size,omitempty"` } // PostComposeJSONRequestBody defines body for PostCompose for application/json ContentType. type PostComposeJSONRequestBody PostComposeJSONBody // PostCloneComposeJSONRequestBody defines body for PostCloneCompose for application/json ContentType. type PostCloneComposeJSONRequestBody PostCloneComposeJSONBody // ServerInterface represents all server handlers. type ServerInterface interface { // The status of a cloned compose // (GET /clones/{id}) GetCloneStatus(ctx echo.Context, id string) error // Create compose // (POST /compose) PostCompose(ctx echo.Context) error // The status of a compose // (GET /composes/{id}) GetComposeStatus(ctx echo.Context, id string) error // Clone an existing compose // (POST /composes/{id}/clone) PostCloneCompose(ctx echo.Context, id string) error // Get logs for a compose. // (GET /composes/{id}/logs) GetComposeLogs(ctx echo.Context, id string) error // Get the manifests for a compose. // (GET /composes/{id}/manifests) GetComposeManifests(ctx echo.Context, id string) error // Get the metadata for a compose. // (GET /composes/{id}/metadata) GetComposeMetadata(ctx echo.Context, id string) error // Get a list of all possible errors // (GET /errors) GetErrorList(ctx echo.Context, params GetErrorListParams) error // Get error description // (GET /errors/{id}) GetError(ctx echo.Context, id string) error // Get the openapi spec in json format // (GET /openapi) GetOpenapi(ctx echo.Context) error } // ServerInterfaceWrapper converts echo contexts to parameters. type ServerInterfaceWrapper struct { Handler ServerInterface } // GetCloneStatus converts echo context to params. func (w *ServerInterfaceWrapper) GetCloneStatus(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } ctx.Set(BearerScopes, []string{""}) // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetCloneStatus(ctx, id) return err } // PostCompose converts echo context to params. func (w *ServerInterfaceWrapper) PostCompose(ctx echo.Context) error { var err error ctx.Set(BearerScopes, []string{""}) // Invoke the callback with all the unmarshalled arguments err = w.Handler.PostCompose(ctx) return err } // GetComposeStatus converts echo context to params. func (w *ServerInterfaceWrapper) GetComposeStatus(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } ctx.Set(BearerScopes, []string{""}) // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetComposeStatus(ctx, id) return err } // PostCloneCompose converts echo context to params. func (w *ServerInterfaceWrapper) PostCloneCompose(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } // Invoke the callback with all the unmarshalled arguments err = w.Handler.PostCloneCompose(ctx, id) return err } // GetComposeLogs converts echo context to params. func (w *ServerInterfaceWrapper) GetComposeLogs(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetComposeLogs(ctx, id) return err } // GetComposeManifests converts echo context to params. func (w *ServerInterfaceWrapper) GetComposeManifests(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetComposeManifests(ctx, id) return err } // GetComposeMetadata converts echo context to params. func (w *ServerInterfaceWrapper) GetComposeMetadata(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } ctx.Set(BearerScopes, []string{""}) // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetComposeMetadata(ctx, id) return err } // GetErrorList converts echo context to params. func (w *ServerInterfaceWrapper) GetErrorList(ctx echo.Context) error { var err error ctx.Set(BearerScopes, []string{""}) // Parameter object where we will unmarshal all parameters from the context var params GetErrorListParams // ------------- Optional query parameter "page" ------------- err = runtime.BindQueryParameter("form", true, false, "page", ctx.QueryParams(), ¶ms.Page) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter page: %s", err)) } // ------------- Optional query parameter "size" ------------- err = runtime.BindQueryParameter("form", true, false, "size", ctx.QueryParams(), ¶ms.Size) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter size: %s", err)) } // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetErrorList(ctx, params) return err } // GetError converts echo context to params. func (w *ServerInterfaceWrapper) GetError(ctx echo.Context) error { var err error // ------------- Path parameter "id" ------------- var id string err = runtime.BindStyledParameterWithLocation("simple", false, "id", runtime.ParamLocationPath, ctx.Param("id"), &id) if err != nil { return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter id: %s", err)) } ctx.Set(BearerScopes, []string{""}) // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetError(ctx, id) return err } // GetOpenapi converts echo context to params. func (w *ServerInterfaceWrapper) GetOpenapi(ctx echo.Context) error { var err error ctx.Set(BearerScopes, []string{""}) // Invoke the callback with all the unmarshalled arguments err = w.Handler.GetOpenapi(ctx) return err } // This is a simple interface which specifies echo.Route addition functions which // are present on both echo.Echo and echo.Group, since we want to allow using // either of them for path registration type EchoRouter interface { CONNECT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route DELETE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route GET(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route HEAD(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route OPTIONS(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route PATCH(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route POST(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route PUT(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route TRACE(path string, h echo.HandlerFunc, m ...echo.MiddlewareFunc) *echo.Route } // RegisterHandlers adds each server route to the EchoRouter. func RegisterHandlers(router EchoRouter, si ServerInterface) { RegisterHandlersWithBaseURL(router, si, "") } // Registers handlers, and prepends BaseURL to the paths, so that the paths // can be served under a prefix. func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL string) { wrapper := ServerInterfaceWrapper{ Handler: si, } router.GET(baseURL+"/clones/:id", wrapper.GetCloneStatus) router.POST(baseURL+"/compose", wrapper.PostCompose) router.GET(baseURL+"/composes/:id", wrapper.GetComposeStatus) router.POST(baseURL+"/composes/:id/clone", wrapper.PostCloneCompose) router.GET(baseURL+"/composes/:id/logs", wrapper.GetComposeLogs) router.GET(baseURL+"/composes/:id/manifests", wrapper.GetComposeManifests) router.GET(baseURL+"/composes/:id/metadata", wrapper.GetComposeMetadata) router.GET(baseURL+"/errors", wrapper.GetErrorList) router.GET(baseURL+"/errors/:id", wrapper.GetError) router.GET(baseURL+"/openapi", wrapper.GetOpenapi) } // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ "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", } // GetSwagger returns the content of the embedded swagger specification file // or error if failed to decode func decodeSpec() ([]byte, error) { zipped, err := base64.StdEncoding.DecodeString(strings.Join(swaggerSpec, "")) if err != nil { return nil, fmt.Errorf("error base64 decoding spec: %s", err) } zr, err := gzip.NewReader(bytes.NewReader(zipped)) if err != nil { return nil, fmt.Errorf("error decompressing spec: %s", err) } var buf bytes.Buffer _, err = buf.ReadFrom(zr) if err != nil { return nil, fmt.Errorf("error decompressing spec: %s", err) } return buf.Bytes(), nil } var rawSpec = decodeSpecCached() // a naive cached of a decoded swagger spec func decodeSpecCached() func() ([]byte, error) { data, err := decodeSpec() return func() ([]byte, error) { return data, err } } // Constructs a synthetic filesystem for resolving external references when loading openapi specifications. func PathToRawSpec(pathToFile string) map[string]func() ([]byte, error) { var res = make(map[string]func() ([]byte, error)) if len(pathToFile) > 0 { res[pathToFile] = rawSpec } return res } // GetSwagger returns the Swagger specification corresponding to the generated code // in this file. The external references of Swagger specification are resolved. // The logic of resolving external references is tightly connected to "import-mapping" feature. // Externally referenced files must be embedded in the corresponding golang packages. // Urls can be supported but this task was out of the scope. func GetSwagger() (swagger *openapi3.T, err error) { var resolvePath = PathToRawSpec("") loader := openapi3.NewLoader() loader.IsExternalRefsAllowed = true loader.ReadFromURIFunc = func(loader *openapi3.Loader, url *url.URL) ([]byte, error) { var pathToFile = url.String() pathToFile = path.Clean(pathToFile) getSpec, ok := resolvePath[pathToFile] if !ok { err1 := fmt.Errorf("path not found: %s", pathToFile) return nil, err1 } return getSpec() } var specData []byte specData, err = rawSpec() if err != nil { return } swagger, err = loader.LoadFromData(specData) if err != nil { return } return }