mirror of
https://github.com/holos-run/holos.git
synced 2026-04-07 18:15:00 +00:00
Split holos render into component and platform.
This patch splits the previous `holos render` command into subcommands.
`holos render component ./path/to/component/` behaves as the previous
`holos render` command and renders an individual component.
The new `holos render platform ./path/to/platform/` subcommand makes
space to render the entire platform using the platform model pulled from
the PlatformService.
Starting with an empty directory:
```sh
holos register user
holos generate platform bare
holos pull platform config .
holos render platform ./platform/
```
```txt
10:01AM INF platform.go:29 ok render component version=0.80.2 path=components/configmap cluster=k1 num=1 total=1 duration=448.133038ms
```
The bare platform has a single component which refers to the platform
model pulled from the PlatformService:
```sh
cat deploy/clusters/mycluster/components/platform-configmap/platform-configmap.gen.yaml
```
```yaml
---
kind: ConfigMap
apiVersion: v1
metadata:
name: platform
namespace: default
data:
platform: |
spec:
model:
cloud:
providers:
- cloudflare
cloudflare:
email: platform@openinfrastructure.co
org:
displayName: Open Infrastructure Services
name: ois
```
33 lines
1.4 KiB
Go
33 lines
1.4 KiB
Go
package v1alpha1
|
|
|
|
import "google.golang.org/protobuf/types/known/structpb"
|
|
|
|
// Platform represents a platform to manage. A Platform resource informs holos
|
|
// which components to build. The platform resource also acts as a container
|
|
// for the platform model form values provided by the PlatformService. The
|
|
// primary use case is to collect the cluster names, cluster types, platform
|
|
// model, and holos components to build into one resource.
|
|
type Platform struct {
|
|
TypeMeta `json:",inline" yaml:",inline"`
|
|
Metadata ObjectMeta `json:"metadata" yaml:"metadata"`
|
|
Spec PlatformSpec `json:"spec" yaml:"spec"`
|
|
}
|
|
|
|
// PlatformSpec represents the platform build plan specification.
|
|
type PlatformSpec struct {
|
|
// Model represents the platform model holos gets from from the
|
|
// holos.platform.v1alpha1.PlatformService.GetPlatform method and provides to
|
|
// CUE using a tag.
|
|
Model structpb.Struct `json:"model" yaml:"model"`
|
|
Components []PlatformSpecComponent `json:"components" yaml:"components"`
|
|
}
|
|
|
|
// PlatformSpecComponent represents a component to build or render with flags to
|
|
// pass, for example the cluster name.
|
|
type PlatformSpecComponent struct {
|
|
// Path is the path of the component relative to the platform root.
|
|
Path string `json:"path" yaml:"path"`
|
|
// Cluster is the cluster name to use when building the component.
|
|
Cluster string `json:"cluster" yaml:"cluster"`
|
|
}
|