run_policy.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #!/usr/bin/env bash
  2. # @getoptions
  3. parser_definition() {
  4. setup REST help:usage -- "Usage: run_policy [options]... [arguments]" ''
  5. msg -- 'Options:'
  6. flag FLAG_D -d --debug init:=0 -- "displays debug information"
  7. flag DRY_RUN -n --dry-run init:=0 -- "run a dry run"
  8. param POLICY -p --policy base:"default" -- "Policy to run (default: 'base')"
  9. disp :usage -h --help
  10. }
  11. # @gengetoptions parser -i parser_definition parse
  12. # Generated by getoptions (BEGIN)
  13. # URL: https://github.com/ko1nksm/getoptions (v3.3.0)
  14. FLAG_D='0'
  15. DRY_RUN='0'
  16. POLICY=''
  17. REST=''
  18. parse() {
  19. OPTIND=$(($#+1))
  20. while OPTARG= && [ $# -gt 0 ]; do
  21. case $1 in
  22. --?*=*) OPTARG=$1; shift
  23. eval 'set -- "${OPTARG%%\=*}" "${OPTARG#*\=}"' ${1+'"$@"'}
  24. ;;
  25. --no-*|--without-*) unset OPTARG ;;
  26. -[p]?*) OPTARG=$1; shift
  27. eval 'set -- "${OPTARG%"${OPTARG#??}"}" "${OPTARG#??}"' ${1+'"$@"'}
  28. ;;
  29. -[dnh]?*) OPTARG=$1; shift
  30. eval 'set -- "${OPTARG%"${OPTARG#??}"}" -"${OPTARG#??}"' ${1+'"$@"'}
  31. OPTARG= ;;
  32. esac
  33. case $1 in
  34. '-d'|'--debug')
  35. [ "${OPTARG:-}" ] && OPTARG=${OPTARG#*\=} && set "noarg" "$1" && break
  36. eval '[ ${OPTARG+x} ] &&:' && OPTARG='1' || OPTARG=''
  37. FLAG_D="$OPTARG"
  38. ;;
  39. '-n'|'--dry-run')
  40. [ "${OPTARG:-}" ] && OPTARG=${OPTARG#*\=} && set "noarg" "$1" && break
  41. eval '[ ${OPTARG+x} ] &&:' && OPTARG='1' || OPTARG=''
  42. DRY_RUN="$OPTARG"
  43. ;;
  44. '-p'|'--policy')
  45. [ $# -le 1 ] && set "required" "$1" && break
  46. OPTARG=$2
  47. POLICY="$OPTARG"
  48. shift ;;
  49. '-h'|'--help')
  50. usage
  51. exit 0 ;;
  52. --)
  53. shift
  54. while [ $# -gt 0 ]; do
  55. REST="${REST} \"\${$(($OPTIND-$#))}\""
  56. shift
  57. done
  58. break ;;
  59. [-]?*) set "unknown" "$1"; break ;;
  60. *)
  61. REST="${REST} \"\${$(($OPTIND-$#))}\""
  62. esac
  63. shift
  64. done
  65. [ $# -eq 0 ] && { OPTIND=1; unset OPTARG; return 0; }
  66. case $1 in
  67. unknown) set "Unrecognized option: $2" "$@" ;;
  68. noarg) set "Does not allow an argument: $2" "$@" ;;
  69. required) set "Requires an argument: $2" "$@" ;;
  70. pattern:*) set "Does not match the pattern (${1#*:}): $2" "$@" ;;
  71. notcmd) set "Not a command: $2" "$@" ;;
  72. *) set "Validation error ($1): $2" "$@"
  73. esac
  74. echo "$1" >&2
  75. exit 1
  76. }
  77. usage() {
  78. cat<<'GETOPTIONSHERE'
  79. Usage: run_policy [options]... [arguments]
  80. Options:
  81. -d, --debug displays debug information
  82. -n, --dry-run run a dry run
  83. -p, --policy POLICY Policy to run (default: 'base')
  84. -h, --help
  85. GETOPTIONSHERE
  86. }
  87. # Generated by getoptions (END)
  88. # @end
  89. parse "$@"
  90. eval "set -- ${REST}"
  91. # Ref:
  92. # https://medium.com/@emachnic/using-policyfiles-with-chef-client-local-mode-4f47477b24db
  93. ./scripts/export_policy.sh ${POLICY}
  94. pushd policy-export > /dev/null
  95. if [ ${DRY_RUN} -eq 1 ]; then
  96. OPT="--why-run"
  97. fi
  98. if [ ${FLAG_D} -eq 1 ]; then
  99. OPT="${OPT} --log_level debug"
  100. fi
  101. bundle exec chef-client --chef-license 'accept' -z ${OPT}
  102. popd > /dev/null
  103. ./scripts/end_run.sh