upload-env 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/bin/sh
  2. set -e
  3. # ##### Basic functions
  4. log() {
  5. echo "$@" >&2
  6. }
  7. die() {
  8. echo "$1" >&2
  9. exit "$2"
  10. }
  11. # Check that a value matched a given regex.
  12. # Usage: validate '^[a-zA-Z][-a-zA-Z0-9_]$' foo
  13. validate_grep() {
  14. local value
  15. local pattern
  16. pattern="$1"
  17. value="$2"
  18. printf '%s\n' "$value" | wc -l | grep ^1$ > /dev/null || return 1
  19. printf '%s\n' "$value" | grep -- "$pattern" > /dev/null || return 1
  20. return 0
  21. }
  22. # ##### Argument processing
  23. if [ "$1" = "--help" ]; then
  24. cat <<EOF
  25. Upload the working directory as an environment in the puppet server
  26. Usage: ./script upload-env my_environment
  27. EOF
  28. exit 0
  29. fi
  30. env="$1"
  31. validate_grep '^[a-zA-Z][-a-zA-Z0-9_]*$' "$env" || die "Invalid environment name" 1
  32. test "$env" != "production" || die "Please, do not use with the production environment." 1
  33. # ##### Upload the stuff on the server
  34. sources="Gemfile Gemfile.lock modules environment.conf manifests"
  35. path=/srv/puppet/$env/
  36. rsync_opt="-rl --perms --chmod=u+rwX,go+rX --delete --exclude .git*"
  37. puppet_host=zoidberg.newldn
  38. log "Create env on puppet server ($path)"
  39. ssh "$puppet_host" sudo mkdir -p "$path"
  40. ssh $puppet_host 'user=$(whoami) && group=$(id -gn) && sudo chown $user:$group' $path
  41. rsync $rsync_opt $sources "$puppet_host:${path}$dest"