From 42e25c34f84d0e84f169bfb0977a99ffe2b191d6 Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Wed, 10 Jan 2018 16:32:48 +0100 Subject: [PATCH] Initial version --- .gitignore | 1 + main.go | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 .gitignore create mode 100644 main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bde21e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +ansible-role-version diff --git a/main.go b/main.go new file mode 100644 index 0000000..2ad15ad --- /dev/null +++ b/main.go @@ -0,0 +1,83 @@ +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + "os" + + yaml "gopkg.in/yaml.v2" + + "github.com/Luzifer/rconfig" + log "github.com/sirupsen/logrus" +) + +var ( + cfg = struct { + RolesFile string `flag:"roles-file,f" default:"requirements.yml" description:"File containing the requirements"` + VersionAndExit bool `flag:"version" default:"false" description:"Prints current version and exits"` + }{} + + version = "dev" +) + +type ansibleRoleDefinition struct { + Name string `yaml:"name"` + Src string `yaml:"src"` + Version string `yaml:"version"` +} + +func init() { + if err := rconfig.Parse(&cfg); err != nil { + log.Fatalf("Unable to parse commandline options: %s", err) + } + + if cfg.VersionAndExit { + fmt.Printf("ansible-role-version %s\n", version) + os.Exit(0) + } +} + +func main() { + args := rconfig.Args()[1:] + if len(args) != 2 { + log.Fatalf("Usage: ansible-role-version ") + } + + roleName := args[0] + roleVersion := args[1] + + var ( + inFileContent []byte + err error + ) + if inFileContent, err = ioutil.ReadFile(cfg.RolesFile); err != nil { + log.WithError(err).Fatalf("Roles file not found") + } + + in := []ansibleRoleDefinition{} + if err = yaml.Unmarshal(inFileContent, &in); err != nil { + log.WithError(err).Fatal("Unable to parse roles file") + } + + for i := range in { + if in[i].Name == roleName { + in[i].Version = roleVersion + } + } + + if inFileContent, err = yaml.Marshal(in); err != nil { + log.WithError(err).Fatal("Unable to marshal roles file") + } + + buf := new(bytes.Buffer) + buf.Write([]byte("---\n\n")) + buf.Write(inFileContent) + buf.Write([]byte("\n...\n")) + + if err = ioutil.WriteFile(cfg.RolesFile, buf.Bytes(), 0644); err != nil { + log.WithError(err).Fatal("Unable to write roles file") + } + + log.Info("Roles file written successfully") +}