github.com/jdhenke/godel@v0.0.0-20161213181855-abeb3861bf0d/apps/distgo/config/example_test.go (about) 1 // Copyright 2016 Palantir Technologies, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package config_test 16 17 import ( 18 "fmt" 19 20 "gopkg.in/yaml.v2" 21 22 "github.com/palantir/godel/apps/distgo/config" 23 ) 24 25 func Example_sls() { 26 yml := ` 27 products: 28 cache-service: 29 build: 30 main-pkg: ./main/cache 31 os-archs: 32 - os: linux 33 arch: amd64 34 version-var: main.Version 35 dist: 36 input-dir: cache/dist/sls 37 output-dir: cache/build/distributions 38 dist-type: 39 type: sls 40 info: 41 service-args: "--config var/conf/cache.yml server" 42 manifest-extensions: 43 cache: true 44 group-id: com.palantir.cache` 45 46 cfg := configFromYML(yml) 47 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 48 // Output: "{Products:map[cache-service:{Build:{Script: MainPkg:./main/cache OutputDir: BuildArgsScript: VersionVar:main.Version Environment:map[] OSArchs:[linux-amd64]} Run:{Args:[]} Dist:[{OutputDir:cache/build/distributions InputDir:cache/dist/sls InputProducts:[] Script: DistType:{Type:sls Info:{InitShTemplateFile: ManifestTemplateFile: ServiceArgs:--config var/conf/cache.yml server ProductType: ManifestExtensions:map[cache:true] YMLValidationExclude:{Names:[] Paths:[]}}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.cache Exclude:{Names:[] Paths:[]}}" 49 } 50 51 func Example_bin() { 52 yml := ` 53 products: 54 godel: 55 build: 56 main-pkg: ./cmd/godel 57 environment: 58 CGO_ENABLED: "0" 59 os-archs: 60 - os: darwin 61 arch: amd64 62 - os: linux 63 arch: amd64 64 version-var: main.Version 65 dist: 66 dist-type: 67 type: bin 68 info: 69 omit-init-sh: true 70 script: | 71 function setup_wrapper { 72 # logic for function (omitted for brevity) 73 } 74 75 # copy contents of resources directory 76 mkdir -p "$DIST_DIR/wrapper" 77 setup_wrapper "$DIST_DIR/wrapper" 78 group-id: com.palantir.godel` 79 80 cfg := configFromYML(yml) 81 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 82 // Output: "{Products:map[godel:{Build:{Script: MainPkg:./cmd/godel OutputDir: BuildArgsScript: VersionVar:main.Version Environment:map[CGO_ENABLED:0] OSArchs:[darwin-amd64 linux-amd64]} Run:{Args:[]} Dist:[{OutputDir: InputDir: InputProducts:[] Script:function setup_wrapper {\n # logic for function (omitted for brevity)\n}\n\n# copy contents of resources directory\nmkdir -p \"$DIST_DIR/wrapper\"\nsetup_wrapper \"$DIST_DIR/wrapper\"\n DistType:{Type:bin Info:{OmitInitSh:true InitShTemplateFile:}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.godel Exclude:{Names:[] Paths:[]}}" 83 } 84 85 func Example_rpm() { 86 yml := ` 87 products: 88 orchestrator: 89 dist: 90 input-dir: ./rpm 91 dist-type: 92 type: rpm 93 info: 94 config-files: 95 - /usr/lib/systemd/system/orchestrator.service 96 before-install-script: | 97 /usr/bin/getent group orchestrator || /usr/sbin/groupadd \ 98 -g 380 orchestrator 99 /usr/bin/getent passwd orchestrator || /usr/sbin/useradd -r \ 100 -d /var/lib/orchestrator -g orchestrator -u 380 -m \ 101 -s /sbin/nologin orchestrator 102 after-install-script: | 103 systemctl daemon-reload 104 after-remove-script: | 105 systemctl daemon-reload 106 script: | 107 mkdir "$DIST_DIR"/usr/libexec/orchestrator 108 cp build/linux-amd64/orchestrator "$DIST_DIR"/usr/libexec/orchestrator 109 group-id: com.palantir.pcloud` 110 111 cfg := configFromYML(yml) 112 fmt.Printf("%q", fmt.Sprintf("%+v", cfg)) 113 // Output: "{Products:map[orchestrator:{Build:{Script: MainPkg: OutputDir: BuildArgsScript: VersionVar: Environment:map[] OSArchs:[]} Run:{Args:[]} Dist:[{OutputDir: InputDir:./rpm InputProducts:[] Script:mkdir \"$DIST_DIR\"/usr/libexec/orchestrator\ncp build/linux-amd64/orchestrator \"$DIST_DIR\"/usr/libexec/orchestrator\n DistType:{Type:rpm Info:{Release: ConfigFiles:[/usr/lib/systemd/system/orchestrator.service] BeforeInstallScript:/usr/bin/getent group orchestrator || /usr/sbin/groupadd \\\n -g 380 orchestrator\n/usr/bin/getent passwd orchestrator || /usr/sbin/useradd -r \\\n -d /var/lib/orchestrator -g orchestrator -u 380 -m \\\n -s /sbin/nologin orchestrator\n AfterInstallScript:systemctl daemon-reload\n AfterRemoveScript:systemctl daemon-reload\n}} Publish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] DefaultPublish:{GroupID: Almanac:{Metadata:map[] Tags:[]}}}] BuildOutputDir: DistOutputDir: DistScriptInclude: GroupID:com.palantir.pcloud Exclude:{Names:[] Paths:[]}}" 114 } 115 116 func configFromYML(yml string) config.Project { 117 cfg := config.Project{} 118 if err := yaml.Unmarshal([]byte(yml), &cfg); err != nil { 119 panic(err) 120 } 121 if _, err := cfg.ToParams(); err != nil { 122 panic(err) 123 } 124 return cfg 125 }