Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions docs/cosmos-app/app/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package app

import (
"fmt"

v2 "golang-appnet.eng.vmware.com/cosmos-datamodel/apis/global.cosmos.tanzu.vmware.org/v1"
nexus_client "golang-appnet.eng.vmware.com/cosmos-datamodel/nexus-client"
)

func App(nexusClient *nexus_client.Clientset) {
fmt.Println("My APP")
// Subscribe Org
nexusClient.GlobalOrg("*").Subscribe()
// Org: -> RegisterAddCallback
nexusClient.GlobalOrg("*").RegisterAddCallback(onAddOrg)
// Org: -> RegisterUpdateCallback
nexusClient.GlobalOrg("*").RegisterUpdateCallback(onUpdateOrg)
// Org: -> RegisterDeleteCallback
nexusClient.GlobalOrg("*").RegisterDeleteCallback(onDeleteOrg)
// Project: -> RegisterAddCallback
nexusClient.GlobalOrg("*").Project("*").RegisterAddCallback(onAddProject)
// GlobalNamespace: -> RegisterAddCallback
nexusClient.GlobalOrg("*").Project("*").Config().GlobalNamespace("*").RegisterAddCallback(onAddGNS)

}

// onAdd is the function executed when the kubernetes informer notified the
// presence of a new kubernetes node in the cluster
func onAddOrg(obj *v2.Org) {
// Cast the obj as node
fmt.Printf("ORG =====>>>>>>>>>>>ON ADD EVENT!: %s\n", obj.Name)
}

func onUpdateOrg(oldObj, newObj *v2.Org) {
// Cast the obj as node
fmt.Printf("ORG: ===> UPDATE EVENT! OLD:>>> %s \n SPEC: NAME >>> %s\n", oldObj.Name, oldObj.Spec.Name)
fmt.Printf("ORG: ===> UPDATE EVENT! New:>>> %s \n SPEC: NAME >>> %s\n", newObj.Name, newObj.Spec.Name)
}

func onDeleteOrg(obj *v2.Org) {
// Cast the obj as node
fmt.Printf("ORG: ===> DELETE EVENT! :%s\n", obj.Name)
}

func onAddProject(obj *v2.Project) {
// Cast the obj as node
fmt.Printf("PROJECT =====>>>>>>>>>>>ADD EVENT!: %s\n\n", obj.Name)
}

func onAddGNS(obj *v2.GlobalNamespace) {
// Cast the obj as node
fmt.Printf("GNS =====>>>>>>>>>>>ADD EVENT!: %s\n\n", obj.Name)
}
294 changes: 294 additions & 0 deletions docs/cosmos-app/crds/global_config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
nexus: |
{"name":"global.Config","hierarchy":["orgs.global.cosmos.tanzu.vmware.org","projects.global.cosmos.tanzu.vmware.org"],"children":{"accesscontrolpolicies.global.cosmos.tanzu.vmware.org":{"fieldName":"Policy","fieldNameGvk":"policyGvk","isNamed":false},"autoscalerfolders.global.cosmos.tanzu.vmware.org":{"fieldName":"AutoscalerFolder","fieldNameGvk":"autoscalerFolderGvk","isNamed":false},"certificateconfigns.global.cosmos.tanzu.vmware.org":{"fieldName":"Certificates","fieldNameGvk":"certificatesGvk","isNamed":true},"clusterconfigfolders.global.cosmos.tanzu.vmware.org":{"fieldName":"Clusters","fieldNameGvk":"clustersGvk","isNamed":false},"externalaccountconfigns.global.cosmos.tanzu.vmware.org":{"fieldName":"ExternalAccounts","fieldNameGvk":"externalAccountsGvk","isNamed":true},"externalauditstorages.global.cosmos.tanzu.vmware.org":{"fieldName":"ExternalAuditStorage","fieldNameGvk":"externalAuditStorageGvk","isNamed":false},"externaldnsconfigns.global.cosmos.tanzu.vmware.org":{"fieldName":"ExternalDNS","fieldNameGvk":"externalDNSGvk","isNamed":true},"externallbconfigns.global.cosmos.tanzu.vmware.org":{"fieldName":"ExternalLB","fieldNameGvk":"externalLBGvk","isNamed":true},"externalpluginconfigfolders.global.cosmos.tanzu.vmware.org":{"fieldName":"ExternalPlugins","fieldNameGvk":"externalPluginsGvk","isNamed":false},"featureflags.global.cosmos.tanzu.vmware.org":{"fieldName":"FeatureFlags","fieldNameGvk":"featureFlagsGvk","isNamed":true},"globalnamespaces.global.cosmos.tanzu.vmware.org":{"fieldName":"GlobalNamespace","fieldNameGvk":"globalNamespaceGvk","isNamed":false},"progressiveupgrades.global.cosmos.tanzu.vmware.org":{"fieldName":"ProgressiveUpgrade","fieldNameGvk":"progressiveUpgradeGvk","isNamed":false},"resourcegroups.global.cosmos.tanzu.vmware.org":{"fieldName":"ResourceGroups","fieldNameGvk":"resourceGroupsGvk","isNamed":false},"servicedirectoryns.global.cosmos.tanzu.vmware.org":{"fieldName":"ServiceDirectory","fieldNameGvk":"serviceDirectoryGvk","isNamed":true},"servicelevelobjectivefolders.global.cosmos.tanzu.vmware.org":{"fieldName":"ServiceLevelObjective","fieldNameGvk":"serviceLevelObjectiveGvk","isNamed":false},"templates.global.cosmos.tanzu.vmware.org":{"fieldName":"Templates","fieldNameGvk":"templatesGvk","isNamed":false}},"is_singleton":true,"nexus-rest-api-gen":{"uris":null}}
creationTimestamp: null
name: configs.global.cosmos.tanzu.vmware.org
spec:
conversion:
strategy: None
group: global.cosmos.tanzu.vmware.org
names:
kind: Config
listKind: ConfigList
plural: configs
shortNames:
- config
singular: config
scope: Cluster
versions:
- name: v1
schema:
openAPIV3Schema:
properties:
apiVersion:
description: 'APIVersion defines the versioned schema of this representation
of an object. Servers should convert recognized schemas to the latest
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
type: string
kind:
description: 'Kind is a string value representing the REST resource this
object represents. Servers may infer this from the endpoint the client
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
type: string
metadata:
type: object
spec:
properties:
autoscalerFolderGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
certificatesGvk:
additionalProperties:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
clustersGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
externalAccountsGvk:
additionalProperties:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
externalAuditStorageGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
externalDNSGvk:
additionalProperties:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
externalLBGvk:
additionalProperties:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
externalPluginsGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
featureFlagsGvk:
additionalProperties:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
globalNamespaceGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
policyGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
progressiveUpgradeGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
resourceGroupsGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
serviceDirectoryGvk:
additionalProperties:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
serviceLevelObjectiveGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
templatesGvk:
properties:
group:
type: string
kind:
type: string
name:
type: string
required:
- group
- kind
- name
type: object
type: object
status:
properties:
nexus:
properties:
remoteGeneration:
format: int64
type: integer
sourceGeneration:
format: int64
type: integer
syncerStatus:
properties:
cRGenerationId:
format: int64
type: integer
etcdVersion:
format: int64
type: integer
type: object
type: object
type: object
type: object
served: true
storage: true
subresources:
status: {}
status:
acceptedNames:
kind: ""
plural: ""
conditions: null
storedVersions:
- v1
Loading