in pkg/cmd/promote.go [226:361]
func (o *promoteCmdOptions) validateDestResources(c client.Client, it *v1.Integration) error {
var configmaps []string
var secrets []string
var pvcs []string
var kamelets []string
// Mount trait
mount, err := toPropertyMap(it.Spec.Traits.Mount)
if err != nil {
return err
}
for t, v := range mount {
switch t {
case "configs":
list, ok := v.([]interface{})
if !ok {
return fmt.Errorf("invalid %s type: %s, value: %s", t, reflect.TypeOf(v), v)
}
for _, cn := range list {
s, ok := cn.(string)
if !ok {
return fmt.Errorf("invalid %s type: %s, value: %s", t, reflect.TypeOf(cn), cn)
}
if conf, parseErr := resource.ParseConfig(s); parseErr == nil {
if conf.StorageType() == resource.StorageTypeConfigmap {
configmaps = append(configmaps, conf.Name())
} else if conf.StorageType() == resource.StorageTypeSecret {
secrets = append(secrets, conf.Name())
}
} else {
return parseErr
}
}
case "resources":
list, ok := v.([]interface{})
if !ok {
return fmt.Errorf("invalid %s type: %s, value: %s", t, reflect.TypeOf(v), v)
}
for _, cn := range list {
s, ok := cn.(string)
if !ok {
return fmt.Errorf("invalid %s type: %s, value: %s", t, reflect.TypeOf(cn), cn)
}
if conf, parseErr := resource.ParseResource(s); parseErr == nil {
if conf.StorageType() == resource.StorageTypeConfigmap {
configmaps = append(configmaps, conf.Name())
} else if conf.StorageType() == resource.StorageTypeSecret {
secrets = append(secrets, conf.Name())
}
} else {
return parseErr
}
}
case "volumes":
list, ok := v.([]interface{})
if !ok {
return fmt.Errorf("invalid %s type: %s, value: %s", t, reflect.TypeOf(v), v)
}
for _, cn := range list {
s, ok := cn.(string)
if !ok {
return fmt.Errorf("invalid %s type: %s, value: %s", t, reflect.TypeOf(cn), cn)
}
if conf, parseErr := resource.ParseVolume(s); parseErr == nil {
if conf.StorageType() == resource.StorageTypePVC {
pvcs = append(pvcs, conf.Name())
}
} else {
return parseErr
}
}
}
}
// OpenAPI trait
openapi, err := toPropertyMap(it.Spec.Traits.OpenAPI)
if err != nil {
return err
}
for k, v := range openapi {
if k != "configmaps" {
continue
}
if list, ok := v.([]string); ok {
configmaps = append(configmaps, list...)
break
}
}
// Kamelets trait
kamelet, err := toPropertyMap(it.Spec.Traits.Kamelets)
if err != nil {
return err
}
if list, ok := kamelet["list"].(string); ok {
kamelets = strings.Split(list, ",")
}
sourceKamelets, err := o.listKamelets(c, it)
if err != nil {
return err
}
kamelets = append(kamelets, sourceKamelets...)
anyError := false
var errorTrace string
for _, name := range configmaps {
if !existsCm(o.Context, c, name, o.To) {
anyError = true
errorTrace += fmt.Sprintf("\n\tConfigmap %s is missing from %s namespace", name, o.To)
}
}
for _, name := range secrets {
if !existsSecret(o.Context, c, name, o.To) {
anyError = true
errorTrace += fmt.Sprintf("\n\tSecret %s is missing from %s namespace", name, o.To)
}
}
for _, name := range pvcs {
if !existsPv(o.Context, c, name, o.To) {
anyError = true
errorTrace += fmt.Sprintf("\n\tPersistentVolume %s is missing from %s namespace", name, o.To)
}
}
for _, name := range kamelets {
if !existsKamelet(o.Context, c, name, o.To) {
anyError = true
errorTrace += fmt.Sprintf("\n\tKamelet %s is missing from %s namespace", name, o.To)
}
}
if anyError {
return fmt.Errorf(errorTrace)
}
return nil
}