Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
196 lines (165 sloc) 6.57 KB
syntax = "proto3";
package hub.solo.io;
option go_package = "v1";
import "gogoproto/gogo.proto";
option (gogoproto.equal_all) = true;
import "google/protobuf/timestamp.proto";
import "github.com/solo-io/solo-kit/api/v1/ref.proto";
// This is static content for an application. It includes basic metadata that is common to every version of an
// application, and a list of versions. For each version, there is information about how to install the application
// (for example, a Helm chart location), and the requirements for installation.
message ApplicationSpec {
ApplicationType type = 1;
string name = 2;
string logo_url = 3;
string short_description = 4;
// Note that long description will be overwritten by the content of description.md if provided.
string long_description = 5;
string documentation_url = 6;
string repository_url = 7;
string application_creator = 8;
string application_provider = 9;
string application_maintainer = 10;
google.protobuf.Timestamp date_created = 11 [(gogoproto.stdtime) = true];
repeated VersionedApplicationSpec versions = 12;
}
message ApplicationSpecs {
repeated ApplicationSpec specs = 1;
}
// Represents a specific version of an extension.
message VersionedApplicationSpec {
// The version of the application
string version = 1;
// The date this version of the application was published
google.protobuf.Timestamp date_published = 2 [(gogoproto.stdtime) = true];
// Location of the Helm chart that will be used to install this application
oneof installation_spec {
// A github directory containing a helm chart
GithubRepositoryLocation github_chart = 13;
// A location of a tgz containing a helm chart
TgzLocation helm_archive = 14;
// A location of a tgz containing one or more yaml manifests
TgzLocation manifests_archive = 15;
// a series of installation manifests or charts
InstallationSteps installation_steps = 16;
}
// Optional default values yaml; if none provided, chart default will be used
string values_yaml = 30;
// Optional filter on the resources that should be considered part of the install, to handle cases
// where a single chart can be used to deploy many applications (i.e. Istio chart deploys Kiali)
map<string, string> required_labels = 31;
// Mesh-specific modifications to the extension installation manifest.
repeated Flavor flavors = 40;
}
// InstallationSteps specify an installation procedure for Applications composed of multiple manifests.
// It may be desirable or necessary for an Application to be installed in stages, e.g. to run a pre-installation
// job or container before deploying other components.
// Resources will be applied to the Kubernetes cluster in the order they appear in the installation steps.
// Resources created from each step will be labeled with the step from which they were created.
// Finally, after each step is applied, any resources created by Flavor customizations will be created last.
message InstallationSteps {
message Step {
// name of the installation step
// each step must be uniquely named
string name = 4;
oneof step {
// A github directory containing a helm chart
GithubRepositoryLocation github_chart = 1;
// A location of a tgz containing a helm chart
TgzLocation helm_archive = 2;
// A location of a tgz containing one or more yaml manifests
TgzLocation manifests_archive = 3;
}
}
// an ordered list of installation steps
repeated Step steps = 1;
}
// A flavor represents a particular variant of an extension.
message Flavor {
// Identifier of the flavor
string name = 1;
// This field should contain a clear description of what this flavor is intended to accomplish.
string description = 2;
// Optional customizations that are to be applied to the installation manifest.
repeated Layer customization_layers = 3;
// The flavor is considered applicable if any of the specified requirement sets is satisfied.
repeated RequirementSet requirement_sets = 4;
// Optional set of parameters to be used during installation.
repeated Parameter parameters = 5;
}
// Parameters represent values that are used to configure the installation of an extension.
message Parameter {
// Identifier of the parameter
string name = 1;
// Description of what the effects of the parameter are.
string description = 2;
// Value of the parameter
string value = 3;
// Default value of the parameter
string default = 4;
// Indicates whether a value for the parameter is required for the installation of the extension to be performed.
bool required = 5;
}
// A layer represent optional processing steps that can be executed to apply mesh-specific transformations to
// the rendered extension installation manifest.
message Layer {
// The actual implementation of the layer
oneof type {
Kustomize kustomize = 1;
}
}
// Represents a layer implemented via [kustomize](https://github.com/kubernetes-sigs/kustomize)
message Kustomize {
// Location of the root of the kustomize directory structure
oneof location {
GithubRepositoryLocation github = 1;
TgzLocation tgz_archive = 2;
}
// Path to the overlay overlay that will be applied to the base (the rendered installation manifest).
string overlay_path = 3;
}
// Wraps a collection of FlavorCompatibilityInfo
message FlavorCompatibility {
repeated CompatibleFlavorMeshPair compatible_pairs = 1;
}
// Represents a Flavor and a Mesh instance that are compatible with one another.
message CompatibleFlavorMeshPair {
Flavor flavor = 1;
core.solo.io.ResourceRef mesh = 2;
}
// Represents a set of requirements that all need to be satisfied.
message RequirementSet {
MeshRequirement mesh_requirement = 1;
}
// Represents the requirement for a mesh to be installed.
message MeshRequirement {
// Type of mesh
MeshType mesh_type = 1;
// Range of allowed versions. If empty, any version is allowed.
AllowedVersions versions = 2;
}
enum ApplicationType {
EXTENSION = 0;
DEMO = 1;
MESH = 2;
}
enum MeshType {
ISTIO = 0;
LINKERD = 1;
AWS_APP_MESH = 2;
}
// A directory inside of a github repo
message GithubRepositoryLocation {
string org = 1;
string repo = 2;
string ref = 3;
string directory = 4;
}
// Location of a gzipped tar file
message TgzLocation {
string uri = 1;
}
message AllowedVersions {
string min_version = 2;
string max_version = 3;
}
You can’t perform that action at this time.