option app_label = "kubernetes";
option name = "kubernetes";

message KubernetesService (Service){
    option verbose_name = "Kubernetes Service";

}

message KubernetesResourceInstance (ServiceInstance){
     option verbose_name = "Kubernetes Resource Instance";
     optional string resource_definition = 3 [help_text = "yaml blob"];
     optional string kubectl_state = 4 [max_length=32, db_index = False, choices = "(('created', 'CREATED'), ('updated', 'UPDATED'), ('deleted', 'DELETED'))", help_text = "Most recent state of kubectl"];
}

message KubernetesServiceInstance (ComputeServiceInstance){
     option verbose_name = "Kubernetes Service Instance";
     optional string pod_ip = 1 [max_length=32, db_index = False, null = True, blank = True, help_text = "IP address of pod"];
     required bool need_event = 2 [default = False, blank = True, help_text = "True if a kafka event needs to be sent by the pull step"];
     optional string last_event_sent = 3 [max_length=32, db_index = False, null = True, blank = True, choices = "(('created', 'CREATED'), ('updated', 'UPDATED'), ('deleted', 'DELETED'))", help_text = "Type of last event sent"];
}

message KubernetesData (XOSBase) {
    optional string name = 1 [max_length=256, db_index = False, null = False, blank = False, help_text = "Name of this data store" ];
    optional string data = 2 [db_index = False, null = True, blank = True, help_text = "Set of key,value pairs encoded as a json dictionary"];
    required manytoone trust_domain->TrustDomain:kubernetes_configmaps = 3:1003 [db_index = True, null = False, blank = False, help_text = "Trust domain this data resides in"];
}

message KubernetesConfigMap (KubernetesData) {
}

message KubernetesSecret (KubernetesData) {
}

message KubernetesSecretVolumeMount (XOSBase) {
    required manytoone secret->KubernetesSecret:kubernetes_secret_volume_mounts = 1:1001 [db_index = True, null = False, blank = False, help_text = "Secret to mount"];
    required manytoone service_instance->KubernetesServiceInstance:kubernetes_secret_volume_mounts = 2 [db_index = True, null = False, blank = False, help_text = "Service instance in which to mount secret"];
    optional string mount_path = 3 [max_length=256, db_index = False, null = False, blank = False, help_text = "Path to mount secret"];
    optional string sub_path = 4 [max_length=1024, db_index = False, null = True, blank = True, help_text = "Subpath within secret to mount"];
}

message KubernetesConfigVolumeMount (XOSBase) {
    required manytoone config->KubernetesConfigMap:kubernetes_config_voume_mounts = 1:1001 [db_index = True, null = False, blank = False, help_text = "Config to mount"];
    required manytoone service_instance->KubernetesServiceInstance:kubernetes_config_volume_mounts = 2:1001 [db_index = True, null = False, blank = False, help_text = "Service instance in which to mount config"];
    optional string mount_path = 3 [max_length=1024, db_index = False, null = False, blank = False, help_text = "Path to mount secret"];
    optional string sub_path = 4 [max_length=1024, db_index = False, null = True, blank = True, help_text = "Subpath within secret to mount"];
}

