github.com/profzone/eden-framework@v1.0.10/internal/k8s/maker.go (about) 1 package k8s 2 3 import ( 4 "bytes" 5 "fmt" 6 "github.com/pkg/errors" 7 "github.com/profzone/eden-framework/pkg/executil" 8 "io/ioutil" 9 appsv1 "k8s.io/api/apps/v1" 10 apiv1 "k8s.io/api/core/v1" 11 "k8s.io/apimachinery/pkg/util/yaml" 12 "os" 13 "path/filepath" 14 ) 15 16 func MakeDeployment(pathToYaml string) (*appsv1.Deployment, map[string]interface{}, error) { 17 manifest, err := PathToOSFile(pathToYaml) 18 if err != nil { 19 return nil, nil, err 20 } 21 manifestData, err := ioutil.ReadAll(manifest) 22 if err != nil { 23 return nil, nil, err 24 } 25 26 envVars := executil.EnvVars{} 27 envVars.LoadFromEnviron() 28 manifestData = []byte(envVars.Parse(string(manifestData))) 29 reader := bytes.NewReader(manifestData) 30 31 deployment := appsv1.Deployment{} 32 if err := yaml.NewYAMLOrJSONDecoder(reader, 100).Decode(&deployment); err != nil { 33 return nil, nil, errors.Wrap(err, fmt.Sprintf("failed to decode file %s into Deployment", pathToYaml)) 34 } 35 36 reader.Reset(manifestData) 37 38 patch := make(map[string]interface{}) 39 if err := yaml.NewYAMLOrJSONDecoder(reader, 100).Decode(&patch); err != nil { 40 return nil, nil, errors.Wrap(err, fmt.Sprintf("failed to decode file %s into patch", pathToYaml)) 41 } 42 43 return &deployment, patch, nil 44 } 45 46 func MakeService(pathToYaml string) (*apiv1.Service, map[string]interface{}, error) { 47 manifest, err := PathToOSFile(pathToYaml) 48 if err != nil { 49 return nil, nil, err 50 } 51 manifestData, err := ioutil.ReadAll(manifest) 52 if err != nil { 53 return nil, nil, err 54 } 55 56 envVars := executil.EnvVars{} 57 envVars.LoadFromEnviron() 58 manifestData = []byte(envVars.Parse(string(manifestData))) 59 reader := bytes.NewReader(manifestData) 60 61 resource := apiv1.Service{} 62 if err := yaml.NewYAMLOrJSONDecoder(reader, 100).Decode(&resource); err != nil { 63 return nil, nil, errors.Wrap(err, fmt.Sprintf("failed to decode file %s into Service", pathToYaml)) 64 } 65 reader.Reset(manifestData) 66 67 patch := make(map[string]interface{}) 68 if err := yaml.NewYAMLOrJSONDecoder(reader, 100).Decode(&patch); err != nil { 69 return nil, nil, errors.Wrap(err, fmt.Sprintf("failed to decode file %s into patch", pathToYaml)) 70 } 71 72 return &resource, patch, nil 73 } 74 75 func PathToOSFile(relativPath string) (*os.File, error) { 76 path, err := filepath.Abs(relativPath) 77 if err != nil { 78 return nil, errors.Wrap(err, fmt.Sprintf("failed generate absolut file path of %s", relativPath)) 79 } 80 81 manifest, err := os.Open(path) 82 if err != nil { 83 return nil, errors.Wrap(err, fmt.Sprintf("failed to open file %s", path)) 84 } 85 86 return manifest, nil 87 }