2023-03-16 22:50:02 +02:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
|
|
|
"log"
|
|
|
|
"os/exec"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
2023-03-25 00:37:01 +02:00
|
|
|
var (
|
2023-03-25 14:46:45 +02:00
|
|
|
rolesPath string
|
|
|
|
requirementsPath string
|
|
|
|
updateRequirementsFile bool
|
2023-03-25 16:43:50 +02:00
|
|
|
verbose bool
|
2023-03-28 17:37:19 +03:00
|
|
|
cleanup bool
|
2023-03-25 00:37:01 +02:00
|
|
|
)
|
|
|
|
|
2023-03-16 22:50:02 +02:00
|
|
|
func main() {
|
|
|
|
flag.StringVar(&requirementsPath, "r", "requirements.yml", "ansible-galaxy requirements file")
|
2023-03-25 00:37:01 +02:00
|
|
|
flag.StringVar(&rolesPath, "p", "roles/galaxy/", "path to install roles")
|
2023-03-25 14:46:45 +02:00
|
|
|
flag.BoolVar(&updateRequirementsFile, "u", false, "update requirements file if newer versions are available")
|
2023-03-28 17:37:19 +03:00
|
|
|
flag.BoolVar(&cleanup, "c", true, "cleanup temporary files")
|
2023-03-25 16:43:50 +02:00
|
|
|
flag.BoolVar(&verbose, "v", false, "verbose output")
|
2023-03-16 22:50:02 +02:00
|
|
|
flag.Parse()
|
|
|
|
|
2023-03-25 14:46:45 +02:00
|
|
|
log.Println("parsing", requirementsPath)
|
|
|
|
entries, installOnly := parseRequirements(requirementsPath)
|
|
|
|
if updateRequirementsFile {
|
|
|
|
log.Println("updating", requirementsPath)
|
|
|
|
updateRequirements(entries)
|
2023-03-16 22:50:02 +02:00
|
|
|
}
|
|
|
|
|
2023-03-25 14:46:45 +02:00
|
|
|
log.Println("installing/updating roles (if any)")
|
2023-03-31 16:23:47 +03:00
|
|
|
installMissingRoles(mergeRequirementsEntries(entries, installOnly))
|
2023-03-25 00:37:01 +02:00
|
|
|
|
2023-03-25 14:46:45 +02:00
|
|
|
log.Println("done")
|
2023-03-16 22:50:02 +02:00
|
|
|
}
|
|
|
|
|
2023-03-25 00:37:01 +02:00
|
|
|
func execute(command string, dir string) (string, error) {
|
2023-03-16 22:50:02 +02:00
|
|
|
slice := strings.Split(command, " ")
|
2023-03-25 00:37:01 +02:00
|
|
|
cmd := exec.Command(slice[0], slice[1:]...)
|
|
|
|
cmd.Dir = dir
|
|
|
|
out, err := cmd.CombinedOutput()
|
2023-03-25 16:43:50 +02:00
|
|
|
if verbose {
|
|
|
|
log.Println("DEBUG: execute")
|
|
|
|
log.Println(" command:", command)
|
|
|
|
log.Println(" chdir:", dir)
|
|
|
|
if out != nil {
|
|
|
|
log.Println(" output:", strings.TrimSuffix(string(out), "\n"))
|
|
|
|
}
|
|
|
|
}
|
2023-03-16 22:50:02 +02:00
|
|
|
if out == nil {
|
|
|
|
return "", err
|
|
|
|
}
|
2023-03-16 23:29:28 +02:00
|
|
|
|
2023-03-16 22:50:02 +02:00
|
|
|
return strings.TrimSuffix(string(out), "\n"), err
|
|
|
|
}
|