diff --git a/Dockerfile b/Dockerfile index b621ec90edbce589ae82b51946b1da2cf2a88086..8f44a426deeb6b7e664fca4bcfb0a967a9fe9960 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,8 @@ ENV GOPATH /srv/ ENV SERVER_OUT "bin/server" ENV SERVER_PKG_BUILD ${PKG} +ENV PATH "$PATH:/srv/bin/" + ARG CI_JOB_TOKEN ARG CI_PROJECT_NAME ARG CI_COMMIT_REF_NAME @@ -24,6 +26,8 @@ RUN cd /srv/src/code.vereign.com/code/$CI_PROJECT_NAME && \ git config --global credential.helper "store --file /tmp/store" && \ echo https://gitlab-ci-token:$CI_JOB_TOKEN@code.vereign.com > /tmp/store && cat /tmp/store && \ export PKG=code.vereign.com/code/$CI_PROJECT_NAME && \ + go get -u github.com/ugorji/go/codec/codecgen && \ + echo PATH $PATH && \ make && rm /tmp/store #FROM debian:stretch diff --git a/Makefile b/Makefile index d005b54a8455bc6c484a39014cb90c0ef6aefe8f..d3f20a2a11aba46c61c20b622d24adfffa4f6d06 100644 --- a/Makefile +++ b/Makefile @@ -11,6 +11,7 @@ all: server dep: ## Get the dependencies dep ensure server: dep ## Build the binary file for server + go generate vendor/github.com/coreos/etcd/client/keys.go @go build -ldflags="-X code.vereign.com/code/key-storage-agent/handler.version=$(VER)" -i -v -o $(SERVER_OUT) $(SERVER_PKG_BUILD) clean: ## Remove previous builds diff --git a/config/configs.go b/config/configs.go index a2d37733bf31f40b6cdd895593b3cb2f54abacb1..c2df7c35160cbd61d25abbc917f28f9465de1743 100644 --- a/config/configs.go +++ b/config/configs.go @@ -2,11 +2,16 @@ package config import ( "log" + "os" + "path/filepath" + "strings" "code.vereign.com/code/viam-apis/authentication" "github.com/spf13/viper" ) +import _ "github.com/spf13/viper/remote" + var SystemAuth = &authentication.Authentication{ Uuid: "undefined", Session: "undefined", @@ -27,7 +32,7 @@ var RestListenAddress string var DataStorageUrl string var CertDir string -func SetConfigValues() { +func SetConfigValues(configFile, etcdURL string) { // Set Default Values For Config Variables // Vereign API Related @@ -66,10 +71,22 @@ func SetConfigValues() { */ // Read Config File - viper.SetConfigName("config") - viper.AddConfigPath(".") - if err := viper.ReadInConfig(); err != nil { - log.Printf("can't read config: %s, will use default values", err) + if configFile != "" { + configName := strings.Split(filepath.Base(configFile), ".")[0] + configDir := filepath.Dir(configFile) + viper.SetConfigName(configName) + viper.AddConfigPath(configDir) + if err := viper.ReadInConfig(); err != nil { + log.Printf("can't read config: %v, will use default values", err) + } + } else { + log.Printf("requesting config at "+etcdURL, "/"+os.Getenv("ENV_NAME")+"/"+os.Getenv("CI_PROJECT_NAME")+".json") + viper.AddRemoteProvider("etcd", etcdURL, "/"+os.Getenv("ENV_NAME")+"/"+os.Getenv("CI_PROJECT_NAME")+".json") + viper.SetConfigType("json") + + if err := viper.ReadRemoteConfig(); err != nil { + log.Printf("can't read config: %v, will use default values", err) + } } CertificationMethod = viper.GetString("certificationMethod") diff --git a/main.go b/main.go index ff6754ee7753081f4d0ddcd9a86c2502743b99fe..64819c2ccf74c45e737c6fc38fe825a582a027ce 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. package main import ( + "flag" "log" "code.vereign.com/code/key-storage-agent/config" @@ -26,7 +27,16 @@ import ( // main start a gRPC server and waits for connection func main() { - config.SetConfigValues() + configFile := flag.String("config-file", "", "path to configuration file") + etcdURL := flag.String("etcd-url", "", "etcd URL") + flag.Parse() + + if *configFile == "" && *etcdURL == "" { + log.Fatalln("Config file path or etcd URL not specified") + return + } + + config.SetConfigValues(*configFile, *etcdURL) grpcAddress := config.GrpcListenAddress restAddress := config.RestListenAddress