Add more flexibility around the prefixes available

This allows you to specify a custom prefix, or a tmp prefix which is
chosen automatically.
This commit is contained in:
James Shubin
2016-08-29 02:54:04 -04:00
parent d429795737
commit db4de12767
9 changed files with 48 additions and 13 deletions

View File

@@ -249,6 +249,24 @@ Point to a graph file to run on the remote host specified within. This parameter
can be used multiple times if you'd like to remotely run on multiple hosts in can be used multiple times if you'd like to remotely run on multiple hosts in
parallel. parallel.
####`--prefix <path>`
Specify a path to a custom working directory prefix. This directory will get
created if it does not exist. This usually defaults to `/var/lib/mgmt/`. This
can't be combined with the `--tmp-prefix` option. It can be combined with the
`--allow-tmp-prefix` option.
####`--tmp-prefix`
If this option is specified, a temporary prefix will be used instead of the
default prefix. This can't be combined with the `--prefix` option.
####`--allow-tmp-prefix`
If this option is specified, we will attempt to fall back to a temporary prefix
if the primary prefix couldn't be created. This is useful for avoiding failures
in environments where the primary prefix may or may not be available, but you'd
like to try. The canonical example is when running `mgmt` with `--remote` there
might be a cached copy of the binary in the primary prefix, but in case there's
no binary available continue working in a temporary directory to avoid failure.
##Examples ##Examples
For example configurations, please consult the [examples/](https://github.com/purpleidea/mgmt/tree/master/examples) directory in the git For example configurations, please consult the [examples/](https://github.com/purpleidea/mgmt/tree/master/examples) directory in the git
source repository. It is available from: source repository. It is available from:

23
main.go
View File

@@ -122,10 +122,18 @@ func run(c *cli.Context) error {
return cli.NewExitError("", 1) return cli.NewExitError("", 1)
} }
if c.IsSet("prefix") && c.Bool("tmp-prefix") {
log.Println("Main: Error: combining --prefix and the request for a tmp prefix is illogical!")
return cli.NewExitError("", 1)
}
if s := c.String("prefix"); c.IsSet("prefix") && s != "" {
prefix = s
}
// make sure the working directory prefix exists // make sure the working directory prefix exists
if err := os.MkdirAll(prefix, 0770); err != nil { if c.Bool("tmp-prefix") || os.MkdirAll(prefix, 0770) != nil {
if c.Bool("allow-tmp-prefix") { if c.Bool("tmp-prefix") || c.Bool("allow-tmp-prefix") {
if prefix, err = ioutil.TempDir("", program); err != nil { if prefix, err = ioutil.TempDir("", program+"-"); err != nil {
log.Printf("Main: Error: Can't create temporary prefix!") log.Printf("Main: Error: Can't create temporary prefix!")
return cli.NewExitError("", 1) return cli.NewExitError("", 1)
} }
@@ -487,6 +495,15 @@ func main() {
Name: "no-caching", Name: "no-caching",
Usage: "don't allow remote caching of remote execution binary", Usage: "don't allow remote caching of remote execution binary",
}, },
cli.StringFlag{
Name: "prefix",
Usage: "specify a path to the working prefix directory",
EnvVar: "MGMT_PREFIX",
},
cli.BoolFlag{
Name: "tmp-prefix",
Usage: "request a pseudo-random, temporary prefix to be used",
},
cli.BoolFlag{ cli.BoolFlag{
Name: "allow-tmp-prefix", Name: "allow-tmp-prefix",
Usage: "allow creation of a new temporary prefix if main prefix is unavailable", Usage: "allow creation of a new temporary prefix if main prefix is unavailable",

View File

@@ -7,7 +7,7 @@ if env | grep -q -e '^TRAVIS=true$'; then
fi fi
# run till completion # run till completion
timeout --kill-after=15s 10s ./mgmt run --file t2.yaml --converged-timeout=5 --no-watch --allow-tmp-prefix & timeout --kill-after=15s 10s ./mgmt run --file t2.yaml --converged-timeout=5 --no-watch --tmp-prefix &
pid=$! pid=$!
wait $pid # get exit status wait $pid # get exit status
e=$? e=$?

View File

@@ -10,11 +10,11 @@ fi
mkdir -p "${MGMT_TMPDIR}"mgmt{A..C} mkdir -p "${MGMT_TMPDIR}"mgmt{A..C}
# run till completion # run till completion
timeout --kill-after=15s 10s ./mgmt run --file t3-a.yaml --converged-timeout=5 --no-watch --allow-tmp-prefix & timeout --kill-after=15s 10s ./mgmt run --file t3-a.yaml --converged-timeout=5 --no-watch --tmp-prefix &
pid1=$! pid1=$!
timeout --kill-after=15s 10s ./mgmt run --file t3-b.yaml --converged-timeout=5 --no-watch --allow-tmp-prefix & timeout --kill-after=15s 10s ./mgmt run --file t3-b.yaml --converged-timeout=5 --no-watch --tmp-prefix &
pid2=$! pid2=$!
timeout --kill-after=15s 10s ./mgmt run --file t3-c.yaml --converged-timeout=5 --no-watch --allow-tmp-prefix & timeout --kill-after=15s 10s ./mgmt run --file t3-c.yaml --converged-timeout=5 --no-watch --tmp-prefix &
pid3=$! pid3=$!
wait $pid1 # get exit status wait $pid1 # get exit status

View File

@@ -1,7 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
# should take slightly more than 25s, but fail if we take 35s) # should take slightly more than 25s, but fail if we take 35s)
timeout --kill-after=35s 30s ./mgmt run --file t4.yaml --converged-timeout=5 --no-watch --allow-tmp-prefix & timeout --kill-after=35s 30s ./mgmt run --file t4.yaml --converged-timeout=5 --no-watch --tmp-prefix &
pid=$! pid=$!
wait $pid # get exit status wait $pid # get exit status
exit $? exit $?

View File

@@ -1,7 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
# should take slightly more than 35s, but fail if we take 45s) # should take slightly more than 35s, but fail if we take 45s)
timeout --kill-after=45s 40s ./mgmt run --file t5.yaml --converged-timeout=5 --no-watch --allow-tmp-prefix & timeout --kill-after=45s 40s ./mgmt run --file t5.yaml --converged-timeout=5 --no-watch --tmp-prefix &
pid=$! pid=$!
wait $pid # get exit status wait $pid # get exit status
exit $? exit $?

View File

@@ -7,7 +7,7 @@ if env | grep -q -e '^TRAVIS=true$'; then
fi fi
# run till completion # run till completion
timeout --kill-after=20s 15s ./mgmt run --file t6.yaml --no-watch --allow-tmp-prefix & timeout --kill-after=20s 15s ./mgmt run --file t6.yaml --no-watch --tmp-prefix &
pid=$! pid=$!
sleep 1s # let it converge sleep 1s # let it converge
test -e /tmp/mgmt/f1 test -e /tmp/mgmt/f1

View File

@@ -1,7 +1,7 @@
#!/bin/bash -e #!/bin/bash -e
# run empty graph # run empty graph
timeout --kill-after=20s 15s ./mgmt run --allow-tmp-prefix & timeout --kill-after=20s 15s ./mgmt run --tmp-prefix &
pid=$! pid=$!
sleep 5s # let it converge sleep 5s # let it converge
$(sleep 3s && killall -SIGINT mgmt)& # send ^C to exit mgmt $(sleep 3s && killall -SIGINT mgmt)& # send ^C to exit mgmt

View File

@@ -1,11 +1,11 @@
#!/bin/bash -e #!/bin/bash -e
# run empty graphs, we're just testing etcd clustering # run empty graphs, we're just testing etcd clustering
timeout --kill-after=120s 90s ./mgmt run --hostname h1 --allow-tmp-prefix & timeout --kill-after=120s 90s ./mgmt run --hostname h1 --tmp-prefix &
pid1=$! pid1=$!
sleep 5s # let it startup sleep 5s # let it startup
timeout --kill-after=120s 90s ./mgmt run --hostname h2 --seeds http://127.0.0.1:2379 --client-urls http://127.0.0.1:2381 --server-urls http://127.0.0.1:2382 --allow-tmp-prefix & timeout --kill-after=120s 90s ./mgmt run --hostname h2 --seeds http://127.0.0.1:2379 --client-urls http://127.0.0.1:2381 --server-urls http://127.0.0.1:2382 --tmp-prefix &
pid2=$! pid2=$!
sleep 5s sleep 5s