|
60 | 60 |
|
61 | 61 | [ "${#}" -gt 1 ] && log 'error' 'usage: tfenv use [<version>]'; |
62 | 62 |
|
63 | | -[ -d "${TFENV_CONFIG_DIR}/versions" ] \ |
64 | | - || log 'error' 'No versions of terraform installed. Please install one with: tfenv install'; |
| 63 | +declare auto_install="${TFENV_AUTO_INSTALL:-true}"; |
| 64 | + |
| 65 | +if [ "${auto_install}" != 'true' ]; then |
| 66 | + [ -d "${TFENV_CONFIG_DIR}/versions" ] \ |
| 67 | + || log 'error' 'No versions of terraform installed. Please install one with: tfenv install'; |
| 68 | +fi; |
65 | 69 |
|
66 | 70 | declare requested_arg="${1:-""}"; |
67 | 71 | declare version_source_suffix=""; |
@@ -89,30 +93,53 @@ log debug "Resolved to: ${resolved}"; |
89 | 93 |
|
90 | 94 | declare version="${resolved%%\:*}"; |
91 | 95 | declare regex="${resolved##*\:}"; |
| 96 | +declare installed_version=''; |
92 | 97 |
|
93 | 98 | log 'debug' "Searching ${TFENV_CONFIG_DIR}/versions/ for latest version matching ${regex}"; |
94 | | -declare version="$(\find "${TFENV_CONFIG_DIR}/versions/" -type d -exec basename {} \; \ |
95 | | - | tail -n +2 \ |
96 | | - | sort -t'.' -k 1nr,1 -k 2nr,2 -k 3nr,3 \ |
97 | | - | grep -e "${regex}" \ |
98 | | - | head -n 1 |
99 | | -)"; |
100 | | - |
101 | | -[ -n "${version}" ] \ |
102 | | - && log 'debug' "Found version: ${version}" \ |
103 | | - || log 'error' "No installed versions of terraform matched '${requested}'${version_source_suffix}"; |
104 | | - |
105 | | -target_path="${TFENV_CONFIG_DIR}/versions/${version}"; |
| 99 | + |
| 100 | +if [ -d "${TFENV_CONFIG_DIR}/versions" ]; then |
| 101 | + installed_version="$(\find "${TFENV_CONFIG_DIR}/versions/" -type d -exec basename {} \; \ |
| 102 | + | tail -n +2 \ |
| 103 | + | sort -t'.' -k 1nr,1 -k 2nr,2 -k 3nr,3 \ |
| 104 | + | grep -e "${regex}" \ |
| 105 | + | head -n 1 |
| 106 | + )"; |
| 107 | +fi; |
| 108 | + |
| 109 | +if [ -n "${installed_version}" ]; then |
| 110 | + log 'debug' "Found version: ${installed_version}"; |
| 111 | +else |
| 112 | + if [ "${auto_install}" == 'true' ]; then |
| 113 | + log 'info' "No installed versions of terraform matched '${resolved}'. Trying to install a matching version since TFENV_AUTO_INSTALL=true"; |
| 114 | + tfenv-install "${resolved}" || log 'error' 'Installing a matching version failed'; |
| 115 | + |
| 116 | + installed_version="$(\find "${TFENV_CONFIG_DIR}/versions/" -type d -exec basename {} \; \ |
| 117 | + | tail -n +2 \ |
| 118 | + | sort -t'.' -k 1nr,1 -k 2nr,2 -k 3nr,3 \ |
| 119 | + | grep -e "${regex}" \ |
| 120 | + | head -n 1 |
| 121 | + )"; |
| 122 | + |
| 123 | + [ -n "${installed_version}" ] \ |
| 124 | + || log 'error' "Despite successfully installing a version matching '${resolved}', a matching version could not be found in '${TFENV_CONFIG_DIR}/versions/' - This should be pretty much impossible"; |
| 125 | + fi; |
| 126 | +fi; |
| 127 | + |
| 128 | +target_path="${TFENV_CONFIG_DIR}/versions/${installed_version}"; |
| 129 | +log 'debug' "target_path is ${TFENV_CONFIG_DIR}/versions/${installed_version}"; |
| 130 | + |
| 131 | +[ -d "${target_path}" ] \ |
| 132 | + || log 'error' "Version directory for ${installed_version} (${target_path}) is not present! Manual intervention required."; |
106 | 133 | [ -f "${target_path}/terraform" ] \ |
107 | | - || log 'error' "Version directory for ${version} is present, but the terraform binary is not! Manual intervention required."; |
| 134 | + || log 'error' "Version directory for ${installed_version} is present, but the terraform binary is not! Manual intervention required."; |
108 | 135 | [ -x "${target_path}/terraform" ] \ |
109 | | - || log 'error' "Version directory for ${version} is present, but the terraform binary is not executable! Manual intervention required."; |
| 136 | + || log 'error' "Version directory for ${installed_version} is present, but the terraform binary is not executable! Manual intervention required."; |
110 | 137 |
|
111 | | -log 'info' "Switching default version to v${version}"; |
| 138 | +log 'info' "Switching default version to v${installed_version}"; |
112 | 139 | version_file="${TFENV_CONFIG_DIR}/version"; |
113 | | -log 'debug' "Writing \"${version}\" to \"${version_file}\""; |
114 | | -echo "${version}" > "${version_file}" \ |
115 | | - || log 'error' "Switch to v${version} failed"; |
| 140 | +log 'debug' "Writing \"${installed_version}\" to \"${version_file}\""; |
| 141 | +echo "${installed_version}" > "${version_file}" \ |
| 142 | + || log 'error' "Switch to v${installed_version} failed"; |
116 | 143 |
|
117 | 144 | if [ "${version_file}" != "${loaded_version_file}" ]; then |
118 | 145 | log 'warn' "Default version file overridden by ${loaded_version_file}, changing the default version has no effect"; |
|
0 commit comments