// Copyright 2018 Bull S.A.S. Atos Technologies - Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois, France. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package workflow import ( "github.com/hashicorp/consul/api" "github.com/ystia/yorc/deployments" "github.com/ystia/yorc/prov" "github.com/ystia/yorc/registry" ) func getOperationExecutor(kv *api.KV, deploymentID, artifact string) (prov.OperationExecutor, error) { reg := registry.GetRegistry() exec, originalErr := reg.GetOperationExecutor(artifact) if originalErr == nil { return exec, nil } // Try to get an executor for artifact parent type but return the original error if we do not found any executors parentArt, err := deployments.GetParentType(kv, deploymentID, artifact) if err != nil { return nil, err } if parentArt != "" { exec, err := getOperationExecutor(kv, deploymentID, parentArt) if err == nil { return exec, nil } } return nil, originalErr }