From c448704fd3b63c0dbc402a8f8119d99ec925d9e1 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:25:12 +0530 Subject: [PATCH 01/22] adding setup helper script --- setup.sh | 227 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 227 insertions(+) create mode 100644 setup.sh diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..3fb1516 --- /dev/null +++ b/setup.sh @@ -0,0 +1,227 @@ +set -e +set -o pipefail + +DOC=" +Starting setup for devstack +Will do the following +- Print this message and wait for confirmation +- Install the following tools if not already installed + - brew + - kubectl (Kubernetes Cli) + - werf + - gh (Github Cli) + - helmfile (https://github.com/razorpay/helmfile) + - devspace (v5.18.5 not latest) + - python3 + - pbincli (cli for privatebin) + - go + - k8s-oidc-helper (https://github.com/micahhausler/k8s-oidc-helper) +- [Needs VPN] [OIDC Login] Configure the tools to use your razorpay email to login to the kubernetes cluster +- Configure the tools with kubernetes cluster info +- [Needs VPN] [Spinnaker Pipeline Trigger] Provision access to the kubernetes cluster for your razorpay email + +Make sure you're connected to the VPN before continuing. + +Continue..? [y/n] +" + +SHELL_TYPE="$(printf '%s' "$SHELL" | rev | cut -d'/' -f1 | rev)" +SHRC_FILE="${HOME}/.${SHELL_TYPE}rc" + +append_line_to_file() { + declare line="$1" + declare file="$2" + + [[ -e $file ]] || touch "$file" + + echo "$line" >> "$file" +} + +refresh_shrc_binding() { + source "$SHRC_FILE" +} + +add_cmd_to_shrc() { + declare cmd="$1" + grep -qsxF -- "$cmd" "$SHRC_FILE" || append_line_to_file "$cmd" "$SHRC_FILE" + refresh_shrc_binding +} + +check_path_contains() { + declare dir="$1" + [[ "$PATH" = *":$dir:"* ]] || [[ "$PATH" = *":$dir" ]] || [[ "$PATH" = "$dir:"* ]] +} + +add_dir_to_path() { + declare pathExpression="$1" + declare exepectedPathComponent="$2" + declare pathAppendCmd="export PATH=\"${pathExpression}:\${PATH}\"" + + check_path_contains "$exepectedPathComponent" || add_cmd_to_shrc "$pathAppendCmd" +} + +brew_install_from_url() { + declare formula="$1" + declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2F%242" + + # command || true allows us to suppress errors in command + brew unpin $formula || true + brew uninstall $formula || true + + formulaPath="$(find $(brew --repository)/Library -name $formula.rb)" + + curl $url > $formulaPath && brew reinstall $formula + + pwdBefore=$(pwd) && cd "$(dirname $formulaPath)" && git checkout . && cd "$pwdBefore" +} + +install_devspace() { + sourceCommit="eefcf5566171216e59c89a8c9cf88d38b97f4c74" + sourceUrl="iframe.php?url=https%3A%2F%2Fraw.githubusercontent.com%2FHomebrew%2Fhomebrew-core%2F%24sourceCommit%2FFormula%2Fdevspace.rb" + brew_install_from_url "devspace" $sourceUrl +} + +install() { + declare cmdName="$1" + declare installCmd="$2" + declare versionCmd="$3" + + echo "looking for $cmdName" + path="$(which $cmdName)" || true + if [[ -z "$path" ]]; then + echo "couldn't find $cmdName. installing..." + if [[ -z "$installCmd" ]]; then + brew install "$installCmd" + else + "$installCmd" + fi + else + echo "found $cmdName at $path" + fi + if [[ -z "$versionCmd" ]]; then + $cmdName --version + else + "$versionCmd" + fi +} + +install_brew() { + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +} + +version_brew() { + brew config +} + +version_kubectl() { + kubectl version --output yaml +} + +install_helmfile() { + repo="razorpay/helmfile" + tag="v0.144.0-razorpay" + file="helmfile_$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m)" + + [[ -f "${HOME}/bin/$file" ]] || gh release download -R $repo $tag -p "$file" -D "${HOME}/bin" + chmod +x "${HOME}/bin/$file" + ln -s "${HOME}/bin/$file" "${HOME}/bin/helmfile" +} + +install_werf() { + installer="/tmp/werf-install.sh" + [[ -f "$installer" ]] || curl -sSL https://werf.io/install.sh -o "$installer" + chmod +x "$installer" + "$installer" --version 1.2 --channel stable --no-interactive + source "$($HOME/bin/trdl use werf 1.2 stable)" + rm "$installer" +} + +version_werf() { + echo "werf version: $(werf version)" +} + +install_pbincli() { + pip3 install pbincli +} + +version_pbincli() { + pbincli --help +} + +install_go() { + brew install go + add_dir_to_path "\$(go env GOPATH)/bin" "$(go env GOPATH)/bin" +} + +version_go() { + go version +} + +configure_helmfile_for_werf() { + add_cmd_to_shrc "alias helmfile='helmfile -b werf --runner-skip-prefix --runner-log-level=info'" +} + +install_oidc_helper() { + go install github.com/micahhausler/k8s-oidc-helper@latest +} + +cluster_config() { + declare name="$1" + declare server="$2" + declare user="$3" + + kubectl config set-cluster "$name" --server=$server --insecure-skip-tls-verify=true + kubectl config set-context "$name" --cluster="$name" --user="$user" + kubectl config use-context "$name" + + echo "kubectl config current-context : $(kubectl config current-context)" +} + +welcome() { + declare prompt="$1" + + read -p "$prompt" -n 1 + [[ $REPLY =~ ^[Yy]$ ]] + echo +} + +spinnaker_webhook() { + declare spinnaker="$1" + declare webhook="$2" + declare parameters="$3" + + curl -X POST "https://$spinnaker/webhooks/webhook/$webhook" \ + -H "content-type: application/json" \ + -d "{\"parameters\":$parameters}" +} + +oidc_config() { + declare pasteUrl="iframe.php?url=https%3A%2F%2Fgithub.com%2F%241" + declare pasteFile="$2" + + pbincli get "$pasteUrl" + k8s-oidc-helper -c ./"$pasteFile" --write + rm ./"$pasteFile" +} + +setup_tools() { + add_dir_to_path "\${HOME}/bin" "${HOME}/bin" + install "brew" "install_brew" "version_brew" + install "kubectl" "install_kubectl" "version_kubectl" + install "werf" "install_werf" "version_werf" + install "gh" "install_gh" + install "helmfile" "install_helmfile" + install "devspace" "install_devspace" + install "python3" + install "pbincli" "install_pbincli" "version_pbincli" + install "go" "install_go" "version_go" + install "k8s-oidc-helper" "install_oidc_helper" + configure_helmfile_for_werf + refresh_shrc_binding +} + +oidcExists() { + declare email="$1" + + [[ "$email" == $(kubectl config view -o jsonpath="{.users[?(@.name == \"$email\")].name}") ]] +} From 19b99481e7f8df67365c4bad6035f4ee3c3b8d09 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:25:40 +0530 Subject: [PATCH 02/22] renaming setup helper script --- setup.sh => setup-helper.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename setup.sh => setup-helper.sh (100%) diff --git a/setup.sh b/setup-helper.sh similarity index 100% rename from setup.sh rename to setup-helper.sh From 944f62fd74e7156a8e2fc412005bae382d073392 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:31:33 +0530 Subject: [PATCH 03/22] fixing welcome --- setup-helper.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/setup-helper.sh b/setup-helper.sh index 3fb1516..c921a4d 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -182,7 +182,6 @@ welcome() { read -p "$prompt" -n 1 [[ $REPLY =~ ^[Yy]$ ]] - echo } spinnaker_webhook() { From ad9eebee2e19bc97e26f7f90d4fe16c52877ad00 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:38:12 +0530 Subject: [PATCH 04/22] fixing for zsh compatibility --- setup-helper.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/setup-helper.sh b/setup-helper.sh index c921a4d..97fa805 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -180,8 +180,12 @@ cluster_config() { welcome() { declare prompt="$1" - read -p "$prompt" -n 1 + printf "$prompt" + + read -n 1 [[ $REPLY =~ ^[Yy]$ ]] + + echo } spinnaker_webhook() { From e208587d73af67eee30af030a6d125cb5aef6708 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Thu, 15 Sep 2022 14:48:47 +0530 Subject: [PATCH 05/22] fixing read command --- setup-helper.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 97fa805..0ad3613 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -182,8 +182,8 @@ welcome() { printf "$prompt" - read -n 1 - [[ $REPLY =~ ^[Yy]$ ]] + read + [[ -z $REPLY ]] echo } From e2df1891d9e1aa21daa88f3c23a5115ed01976a0 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Fri, 16 Sep 2022 16:04:02 +0530 Subject: [PATCH 06/22] cleanup --- setup-helper.sh | 51 ++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 0ad3613..6adc68f 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -1,11 +1,12 @@ -set -e -set -o pipefail +set -euo pipefail DOC=" Starting setup for devstack +This expects bash to be available Will do the following - Print this message and wait for confirmation -- Install the following tools if not already installed +- Install the following tools if not already installed. + Note: this adds path related commands and aliases to your profile files (.zshrc, .bashrc, ...) - brew - kubectl (Kubernetes Cli) - werf @@ -21,8 +22,6 @@ Will do the following - [Needs VPN] [Spinnaker Pipeline Trigger] Provision access to the kubernetes cluster for your razorpay email Make sure you're connected to the VPN before continuing. - -Continue..? [y/n] " SHELL_TYPE="$(printf '%s' "$SHELL" | rev | cut -d'/' -f1 | rev)" @@ -76,18 +75,18 @@ brew_install_from_url() { } install_devspace() { - sourceCommit="eefcf5566171216e59c89a8c9cf88d38b97f4c74" - sourceUrl="iframe.php?url=https%3A%2F%2Fraw.githubusercontent.com%2FHomebrew%2Fhomebrew-core%2F%24sourceCommit%2FFormula%2Fdevspace.rb" + declare sourceCommit="eefcf5566171216e59c89a8c9cf88d38b97f4c74" + declare sourceUrl="iframe.php?url=https%3A%2F%2Fraw.githubusercontent.com%2FHomebrew%2Fhomebrew-core%2F%24sourceCommit%2FFormula%2Fdevspace.rb" brew_install_from_url "devspace" $sourceUrl } install() { declare cmdName="$1" - declare installCmd="$2" - declare versionCmd="$3" + declare installCmd="${2-}" + declare versionCmd="${3-}" echo "looking for $cmdName" - path="$(which $cmdName)" || true + declare path="$(which $cmdName)" || true if [[ -z "$path" ]]; then echo "couldn't find $cmdName. installing..." if [[ -z "$installCmd" ]]; then @@ -98,8 +97,9 @@ install() { else echo "found $cmdName at $path" fi + if [[ -z "$versionCmd" ]]; then - $cmdName --version + "$cmdName" --version else "$versionCmd" fi @@ -114,13 +114,13 @@ version_brew() { } version_kubectl() { - kubectl version --output yaml + kubectl version --client --output yaml } install_helmfile() { - repo="razorpay/helmfile" - tag="v0.144.0-razorpay" - file="helmfile_$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m)" + declare repo="razorpay/helmfile" + declare tag="v0.144.0-razorpay" + declare file="helmfile_$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m)" [[ -f "${HOME}/bin/$file" ]] || gh release download -R $repo $tag -p "$file" -D "${HOME}/bin" chmod +x "${HOME}/bin/$file" @@ -128,7 +128,7 @@ install_helmfile() { } install_werf() { - installer="/tmp/werf-install.sh" + declare installer="/tmp/werf-install.sh" [[ -f "$installer" ]] || curl -sSL https://werf.io/install.sh -o "$installer" chmod +x "$installer" "$installer" --version 1.2 --channel stable --no-interactive @@ -179,13 +179,10 @@ cluster_config() { welcome() { declare prompt="$1" + + read -p "${prompt}Press enter to continue. Press any other key to stop." -n 1 - printf "$prompt" - - read [[ -z $REPLY ]] - - echo } spinnaker_webhook() { @@ -199,12 +196,14 @@ spinnaker_webhook() { } oidc_config() { - declare pasteUrl="iframe.php?url=https%3A%2F%2Fgithub.com%2F%241" - declare pasteFile="$2" + declare email="$1" + declare pasteUrl="iframe.php?url=https%3A%2F%2Fgithub.com%2F%242" + declare pasteFile="$3" + oidc_exists "$email" && return 0 pbincli get "$pasteUrl" - k8s-oidc-helper -c ./"$pasteFile" --write - rm ./"$pasteFile" + k8s-oidc-helper -c "./$pasteFile" --write + rm "./$pasteFile" } setup_tools() { @@ -223,7 +222,7 @@ setup_tools() { refresh_shrc_binding } -oidcExists() { +oidc_exists() { declare email="$1" [[ "$email" == $(kubectl config view -o jsonpath="{.users[?(@.name == \"$email\")].name}") ]] From 5eba86cab600db51ed423c42f21f463f24cc64d7 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Fri, 16 Sep 2022 16:58:07 +0530 Subject: [PATCH 07/22] getting rid of missing commands --- setup-helper.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 6adc68f..0aa0d66 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -209,9 +209,9 @@ oidc_config() { setup_tools() { add_dir_to_path "\${HOME}/bin" "${HOME}/bin" install "brew" "install_brew" "version_brew" - install "kubectl" "install_kubectl" "version_kubectl" + install "kubectl" "" "version_kubectl" install "werf" "install_werf" "version_werf" - install "gh" "install_gh" + install "gh" install "helmfile" "install_helmfile" install "devspace" "install_devspace" install "python3" From a8f896457dc14fa462b7178feb1568f64731674b Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Fri, 16 Sep 2022 17:30:55 +0530 Subject: [PATCH 08/22] fixing install --- setup-helper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-helper.sh b/setup-helper.sh index 0aa0d66..47ceb29 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -90,7 +90,7 @@ install() { if [[ -z "$path" ]]; then echo "couldn't find $cmdName. installing..." if [[ -z "$installCmd" ]]; then - brew install "$installCmd" + brew install "$cmdName" else "$installCmd" fi From 9f83e11e5d0c7cf9a29e74269bf1a79319cfdb0a Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 19 Sep 2022 14:51:02 +0530 Subject: [PATCH 09/22] adding email validation --- setup-helper.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/setup-helper.sh b/setup-helper.sh index 47ceb29..beca6a4 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -227,3 +227,15 @@ oidc_exists() { [[ "$email" == $(kubectl config view -o jsonpath="{.users[?(@.name == \"$email\")].name}") ]] } + + +is_email() { + declare input="$1" + + [[ "$input" =~ ^[a-zA-Z0-9.!\#$%\&\'*+/=?^_\`{|}~-]+@razorpay\.com$ ]] +} + +abort() { + echo "$1" + exit 1 +} From 91b27247ae87ae2ddbf0aed6330882b646944c12 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 26 Sep 2022 11:56:09 +0530 Subject: [PATCH 10/22] fixing werf helm compat. GOBIN config for pre-installed go too --- setup-helper.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup-helper.sh b/setup-helper.sh index beca6a4..c1c1fdf 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -150,7 +150,6 @@ version_pbincli() { install_go() { brew install go - add_dir_to_path "\$(go env GOPATH)/bin" "$(go env GOPATH)/bin" } version_go() { @@ -158,6 +157,7 @@ version_go() { } configure_helmfile_for_werf() { + add_cmd_to_shrc "export WERF_HELM3_MODE=1" add_cmd_to_shrc "alias helmfile='helmfile -b werf --runner-skip-prefix --runner-log-level=info'" } @@ -217,6 +217,7 @@ setup_tools() { install "python3" install "pbincli" "install_pbincli" "version_pbincli" install "go" "install_go" "version_go" + add_dir_to_path "\$(go env GOPATH)/bin" "$(go env GOPATH)/bin" install "k8s-oidc-helper" "install_oidc_helper" configure_helmfile_for_werf refresh_shrc_binding From 6136fdaa274907fe4ed1fc46e3e31a7c90746db7 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 26 Sep 2022 12:13:04 +0530 Subject: [PATCH 11/22] commenting out werf --- setup-helper.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index c1c1fdf..1956e2b 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -210,7 +210,7 @@ setup_tools() { add_dir_to_path "\${HOME}/bin" "${HOME}/bin" install "brew" "install_brew" "version_brew" install "kubectl" "" "version_kubectl" - install "werf" "install_werf" "version_werf" + # install "werf" "install_werf" "version_werf" install "gh" install "helmfile" "install_helmfile" install "devspace" "install_devspace" @@ -219,7 +219,7 @@ setup_tools() { install "go" "install_go" "version_go" add_dir_to_path "\$(go env GOPATH)/bin" "$(go env GOPATH)/bin" install "k8s-oidc-helper" "install_oidc_helper" - configure_helmfile_for_werf + # configure_helmfile_for_werf refresh_shrc_binding } From 29ac97efa1729de896feceaab4efd22bfc6dfc98 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Fri, 30 Sep 2022 16:52:04 +0530 Subject: [PATCH 12/22] installing only binaries when necessary. using the latest release of helmfile --- setup-helper.sh | 133 +++++++++++++++++++++++++++--------------------- 1 file changed, 74 insertions(+), 59 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 1956e2b..6b96363 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -1,32 +1,48 @@ set -euo pipefail DOC=" -Starting setup for devstack -This expects bash to be available -Will do the following +Starting setup for devstack. + +It will do the following: - Print this message and wait for confirmation -- Install the following tools if not already installed. - Note: this adds path related commands and aliases to your profile files (.zshrc, .bashrc, ...) - - brew + +- Install the following tools if not already installed (might make changes to .zshrc/.bashrc/...) + - brew (if not available, will need sudo access to install) - kubectl (Kubernetes Cli) - werf - - gh (Github Cli) - - helmfile (https://github.com/razorpay/helmfile) + - helmfile - devspace (v5.18.5 not latest) - python3 - pbincli (cli for privatebin) - go - k8s-oidc-helper (https://github.com/micahhausler/k8s-oidc-helper) + +- Configure these tools with kubernetes cluster info + - [Needs VPN] [OIDC Login] Configure the tools to use your razorpay email to login to the kubernetes cluster -- Configure the tools with kubernetes cluster info + - [Needs VPN] [Spinnaker Pipeline Trigger] Provision access to the kubernetes cluster for your razorpay email -Make sure you're connected to the VPN before continuing. + +Make sure you're connected to the VPN. +Make sure to take admin access if you don't have homebrew installed (Use razorpay self-serve app) " SHELL_TYPE="$(printf '%s' "$SHELL" | rev | cut -d'/' -f1 | rev)" SHRC_FILE="${HOME}/.${SHELL_TYPE}rc" +BIN_DIR="${HOME}/.devstack/bin" +BIN_DIR_EXPR="\${HOME}/.devstack/bin" + +GO_BIN_DIR="$(go env GOPATH)/bin" +GO_BIN_DIR_EXPR="\$(go env GOPATH)/bin" + +PYTHON_BIN_DIR="$(python3 -m site --user-base)/bin" +PYTHON_BIN_DIR_EXPR="\$(python3 -m site --user-base)/bin" + +OS="$(uname | tr '[:upper:]' '[:lower:]')" +ARCH="$(uname -m)" + append_line_to_file() { declare line="$1" declare file="$2" @@ -42,12 +58,14 @@ refresh_shrc_binding() { add_cmd_to_shrc() { declare cmd="$1" + grep -qsxF -- "$cmd" "$SHRC_FILE" || append_line_to_file "$cmd" "$SHRC_FILE" refresh_shrc_binding } check_path_contains() { declare dir="$1" + [[ "$PATH" = *":$dir:"* ]] || [[ "$PATH" = *":$dir" ]] || [[ "$PATH" = "$dir:"* ]] } @@ -59,25 +77,21 @@ add_dir_to_path() { check_path_contains "$exepectedPathComponent" || add_cmd_to_shrc "$pathAppendCmd" } -brew_install_from_url() { - declare formula="$1" - declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2F%242" - - # command || true allows us to suppress errors in command - brew unpin $formula || true - brew uninstall $formula || true +install_binary() { + declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2F%241" + declare dir="$2" + declare bin="$3" - formulaPath="$(find $(brew --repository)/Library -name $formula.rb)" - - curl $url > $formulaPath && brew reinstall $formula - - pwdBefore=$(pwd) && cd "$(dirname $formulaPath)" && git checkout . && cd "$pwdBefore" + curl -L "$url" -o "$dir/$bin" + chmod +x "$dir/$bin" } install_devspace() { - declare sourceCommit="eefcf5566171216e59c89a8c9cf88d38b97f4c74" - declare sourceUrl="iframe.php?url=https%3A%2F%2Fraw.githubusercontent.com%2FHomebrew%2Fhomebrew-core%2F%24sourceCommit%2FFormula%2Fdevspace.rb" - brew_install_from_url "devspace" $sourceUrl + declare tag="${OS}-${ARCH}" + declare version="v5.18.5" + declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2Floft-sh%2Fdevspace%2Freleases%2Fdownload%2F%24version%2Fdevspace-%24tag" + + install_binary "$url" "${BIN_DIR}" "devspace" } install() { @@ -90,6 +104,7 @@ install() { if [[ -z "$path" ]]; then echo "couldn't find $cmdName. installing..." if [[ -z "$installCmd" ]]; then + # default for installation brew install "$cmdName" else "$installCmd" @@ -99,6 +114,7 @@ install() { fi if [[ -z "$versionCmd" ]]; then + # default for version check "$cmdName" --version else "$versionCmd" @@ -117,23 +133,12 @@ version_kubectl() { kubectl version --client --output yaml } -install_helmfile() { - declare repo="razorpay/helmfile" - declare tag="v0.144.0-razorpay" - declare file="helmfile_$(uname | tr '[:upper:]' '[:lower:]')_$(uname -m)" - - [[ -f "${HOME}/bin/$file" ]] || gh release download -R $repo $tag -p "$file" -D "${HOME}/bin" - chmod +x "${HOME}/bin/$file" - ln -s "${HOME}/bin/$file" "${HOME}/bin/helmfile" -} - install_werf() { - declare installer="/tmp/werf-install.sh" - [[ -f "$installer" ]] || curl -sSL https://werf.io/install.sh -o "$installer" - chmod +x "$installer" - "$installer" --version 1.2 --channel stable --no-interactive - source "$($HOME/bin/trdl use werf 1.2 stable)" - rm "$installer" + declare tag="${OS}-${ARCH}" + declare version="1.2.174" + declare url="iframe.php?url=https%3A%2F%2Ftuf.werf.io%2Ftargets%2Freleases%2F%24version%2F%24tag%2Fbin%2Fwerf" + + install_binary "$url" "${BIN_DIR}" "werf" } version_werf() { @@ -148,17 +153,13 @@ version_pbincli() { pbincli --help } -install_go() { - brew install go -} - version_go() { go version } configure_helmfile_for_werf() { add_cmd_to_shrc "export WERF_HELM3_MODE=1" - add_cmd_to_shrc "alias helmfile='helmfile -b werf --runner-skip-prefix --runner-log-level=info'" + add_cmd_to_shrc "alias helmfile='helmfile --enable-live-output -b werf'" } install_oidc_helper() { @@ -177,7 +178,7 @@ cluster_config() { echo "kubectl config current-context : $(kubectl config current-context)" } -welcome() { +confirm() { declare prompt="$1" read -p "${prompt}Press enter to continue. Press any other key to stop." -n 1 @@ -207,36 +208,50 @@ oidc_config() { } setup_tools() { - add_dir_to_path "\${HOME}/bin" "${HOME}/bin" install "brew" "install_brew" "version_brew" install "kubectl" "" "version_kubectl" - # install "werf" "install_werf" "version_werf" - install "gh" - install "helmfile" "install_helmfile" + install "helmfile" + + add_dir_to_path "${BIN_DIR_EXPR}" "${BIN_DIR}" + install "werf" "install_werf" "version_werf" install "devspace" "install_devspace" + + configure_helmfile_for_werf + install "python3" + add_dir_to_path "${PYTHON_BIN_DIR_EXPR}" "${PYTHON_BIN_DIR}" + + install "go" "" "version_go" + add_dir_to_path "${GO_BIN_DIR_EXPR}" "${GO_BIN_DIR}" + install "pbincli" "install_pbincli" "version_pbincli" - install "go" "install_go" "version_go" - add_dir_to_path "\$(go env GOPATH)/bin" "$(go env GOPATH)/bin" install "k8s-oidc-helper" "install_oidc_helper" - # configure_helmfile_for_werf - refresh_shrc_binding } oidc_exists() { declare email="$1" - [[ "$email" == $(kubectl config view -o jsonpath="{.users[?(@.name == \"$email\")].name}") ]] -} + declare template="{{\$res := 0}}{{if .users}}{{range .users}}{{if eq .name \"$email\" }}{{\$res = 1}}{{end}}{{end}}{{end}}{{\$res}}" + [[ $(kubectl config view -o=go-template --template="$template") == 1 ]] +} -is_email() { +is_rzp_email() { declare input="$1" [[ "$input" =~ ^[a-zA-Z0-9.!\#$%\&\'*+/=?^_\`{|}~-]+@razorpay\.com$ ]] } abort() { - echo "$1" + declare message="$1" + + echo "$message" exit 1 } + +read_email() { + declare target="$1" + + read -p "Enter your (razorpay) email address:" "$target" + is_rzp_email ${!target} || abort "Not a valid razorpay email address" +} From a4ce418395f10a3a73f366ceeaed79cbe062f430 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 08:15:52 +0530 Subject: [PATCH 13/22] refactoring --- setup-helper.sh | 108 ++++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 6b96363..dd7d715 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -86,14 +86,6 @@ install_binary() { chmod +x "$dir/$bin" } -install_devspace() { - declare tag="${OS}-${ARCH}" - declare version="v5.18.5" - declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2Floft-sh%2Fdevspace%2Freleases%2Fdownload%2F%24version%2Fdevspace-%24tag" - - install_binary "$url" "${BIN_DIR}" "devspace" -} - install() { declare cmdName="$1" declare installCmd="${2-}" @@ -121,6 +113,60 @@ install() { fi } +abort() { + declare message="$1" + + echo "$message" + exit 1 +} + +read_email() { + declare target="$1" + + read -p "Enter your (razorpay) email address:" "$target" + is_rzp_email ${!target} || abort "Not a valid razorpay email address" +} + +confirm() { + declare prompt="$1" + + read -p "${prompt}Press enter to continue. Press any other key to stop." -n 1 + + [[ -z $REPLY ]] +} + +spinnaker_webhook() { + declare spinnaker="$1" + declare webhook="$2" + declare parameters="$3" + + curl -X POST "https://$spinnaker/webhooks/webhook/$webhook" \ + -H "content-type: application/json" \ + -d "{\"parameters\":$parameters}" +} + +is_rzp_email() { + declare input="$1" + + [[ "$input" =~ ^[a-zA-Z0-9.!\#$%\&\'*+/=?^_\`{|}~-]+@razorpay\.com$ ]] +} + +oidc_exists() { + declare email="$1" + + declare template="{{\$res := 0}}{{if .users}}{{range .users}}{{if eq .name \"$email\" }}{{\$res = 1}}{{end}}{{end}}{{end}}{{\$res}}" + + [[ $(kubectl config view -o=go-template --template="$template") == 1 ]] +} + +install_devspace() { + declare tag="${OS}-${ARCH}" + declare version="v5.18.5" + declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2Floft-sh%2Fdevspace%2Freleases%2Fdownload%2F%24version%2Fdevspace-%24tag" + + install_binary "$url" "${BIN_DIR}" "devspace" +} + install_brew() { /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" } @@ -178,24 +224,6 @@ cluster_config() { echo "kubectl config current-context : $(kubectl config current-context)" } -confirm() { - declare prompt="$1" - - read -p "${prompt}Press enter to continue. Press any other key to stop." -n 1 - - [[ -z $REPLY ]] -} - -spinnaker_webhook() { - declare spinnaker="$1" - declare webhook="$2" - declare parameters="$3" - - curl -X POST "https://$spinnaker/webhooks/webhook/$webhook" \ - -H "content-type: application/json" \ - -d "{\"parameters\":$parameters}" -} - oidc_config() { declare email="$1" declare pasteUrl="iframe.php?url=https%3A%2F%2Fgithub.com%2F%242" @@ -227,31 +255,3 @@ setup_tools() { install "pbincli" "install_pbincli" "version_pbincli" install "k8s-oidc-helper" "install_oidc_helper" } - -oidc_exists() { - declare email="$1" - - declare template="{{\$res := 0}}{{if .users}}{{range .users}}{{if eq .name \"$email\" }}{{\$res = 1}}{{end}}{{end}}{{end}}{{\$res}}" - - [[ $(kubectl config view -o=go-template --template="$template") == 1 ]] -} - -is_rzp_email() { - declare input="$1" - - [[ "$input" =~ ^[a-zA-Z0-9.!\#$%\&\'*+/=?^_\`{|}~-]+@razorpay\.com$ ]] -} - -abort() { - declare message="$1" - - echo "$message" - exit 1 -} - -read_email() { - declare target="$1" - - read -p "Enter your (razorpay) email address:" "$target" - is_rzp_email ${!target} || abort "Not a valid razorpay email address" -} From 02f8ee741aeb6460bac0eb0294bf58ddbd14f7dc Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 08:41:56 +0530 Subject: [PATCH 14/22] fixing missing go command in go bin dir --- setup-helper.sh | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index dd7d715..11fcc2f 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -34,12 +34,6 @@ SHRC_FILE="${HOME}/.${SHELL_TYPE}rc" BIN_DIR="${HOME}/.devstack/bin" BIN_DIR_EXPR="\${HOME}/.devstack/bin" -GO_BIN_DIR="$(go env GOPATH)/bin" -GO_BIN_DIR_EXPR="\$(go env GOPATH)/bin" - -PYTHON_BIN_DIR="$(python3 -m site --user-base)/bin" -PYTHON_BIN_DIR_EXPR="\$(python3 -m site --user-base)/bin" - OS="$(uname | tr '[:upper:]' '[:lower:]')" ARCH="$(uname -m)" @@ -235,6 +229,20 @@ oidc_config() { rm "./$pasteFile" } +setup_go_bin() { + declare goBinDir="$(go env GOPATH)/bin" + declare goBinDirExpr="\$(go env GOPATH)/bin" + + add_dir_to_path "$goBinDir" "$goBinDirExpr" +} + +setup_python_bin() { + declare pythonBinDir="$(python3 -m site --user-base)/bin" + declare pythonBinDirExpr="\$(python3 -m site --user-base)/bin" + + add_dir_to_path "$pythonBinDir" "$pythonBinDirExpr" +} + setup_tools() { install "brew" "install_brew" "version_brew" install "kubectl" "" "version_kubectl" @@ -247,10 +255,10 @@ setup_tools() { configure_helmfile_for_werf install "python3" - add_dir_to_path "${PYTHON_BIN_DIR_EXPR}" "${PYTHON_BIN_DIR}" + setup_python_bin install "go" "" "version_go" - add_dir_to_path "${GO_BIN_DIR_EXPR}" "${GO_BIN_DIR}" + setup_go_bin install "pbincli" "install_pbincli" "version_pbincli" install "k8s-oidc-helper" "install_oidc_helper" From 465a6e06d6ac9632c3beea6018da4b6c60b88a21 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 09:46:01 +0530 Subject: [PATCH 15/22] fixing missing brew --- setup-helper.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/setup-helper.sh b/setup-helper.sh index 11fcc2f..0b1dcea 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -163,6 +163,7 @@ install_devspace() { install_brew() { /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + add_cmd_to_shrc 'eval "$(/opt/homebrew/bin/brew shellenv)"' } version_brew() { From b805e4077b9ff7756cd138821dd3d347707f4aef Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 09:57:06 +0530 Subject: [PATCH 16/22] removing options that weren't working --- setup-helper.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 0b1dcea..e7835b7 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -1,5 +1,3 @@ -set -euo pipefail - DOC=" Starting setup for devstack. From 086c0b20a172283eacb62c102b2cfbcd567a71ad Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:03:59 +0530 Subject: [PATCH 17/22] fixing unable to write file. no such dir --- setup-helper.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup-helper.sh b/setup-helper.sh index e7835b7..2268137 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -74,7 +74,8 @@ install_binary() { declare dir="$2" declare bin="$3" - curl -L "$url" -o "$dir/$bin" + mkdir -p "$dir" + curl -L "$url" > "$dir/$bin" chmod +x "$dir/$bin" } From a7913b5fdf41eceb63b0fef631eb931265205e08 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:43:26 +0530 Subject: [PATCH 18/22] more docs and error handling for brew installation --- setup-helper.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 2268137..464ed04 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -23,7 +23,9 @@ It will do the following: Make sure you're connected to the VPN. -Make sure to take admin access if you don't have homebrew installed (Use razorpay self-serve app) + +If you don't have homebrew installed (i.e. running brew --version gives 'command not found'), +use razorpay self-serve app to make yourself admin before running this script again. " SHELL_TYPE="$(printf '%s' "$SHELL" | rev | cut -d'/' -f1 | rev)" @@ -161,7 +163,7 @@ install_devspace() { } install_brew() { - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + /bin/bash -e -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" add_cmd_to_shrc 'eval "$(/opt/homebrew/bin/brew shellenv)"' } From 16bfcaa1fca838a8b37224b9004359d921760bbe Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:57:33 +0530 Subject: [PATCH 19/22] brew install script errors unecessarily --- setup-helper.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup-helper.sh b/setup-helper.sh index 464ed04..8214817 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -163,7 +163,7 @@ install_devspace() { } install_brew() { - /bin/bash -e -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" add_cmd_to_shrc 'eval "$(/opt/homebrew/bin/brew shellenv)"' } From f74bf1c16e10bb8d7a76f7a6a174cbd107e699c1 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Tue, 4 Oct 2022 11:54:38 +0530 Subject: [PATCH 20/22] adding support for testing connection to private hosts --- setup-helper.sh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 8214817..97ab18d 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -21,10 +21,7 @@ It will do the following: - [Needs VPN] [Spinnaker Pipeline Trigger] Provision access to the kubernetes cluster for your razorpay email - -Make sure you're connected to the VPN. - -If you don't have homebrew installed (i.e. running brew --version gives 'command not found'), +NOTE: If you don't have homebrew installed (i.e. running brew --version gives 'command not found'), use razorpay self-serve app to make yourself admin before running this script again. " @@ -37,6 +34,15 @@ BIN_DIR_EXPR="\${HOME}/.devstack/bin" OS="$(uname | tr '[:upper:]' '[:lower:]')" ARCH="$(uname -m)" +test_private_connection() { + declare url="iframe.php?url=https%3A%2F%2Fgithub.com%2F%241" + + declare status=$(curl -s -I -o /dev/null -w '%{http_code}' --connect-timeout 10 "$url") + declare errMsg="Please check if you're connected to VPN and $url is reachable in browser" + + [[ $status > 199 && $status < 400 ]] || abort "$errMsg" +} + append_line_to_file() { declare line="$1" declare file="$2" From 88d131862fa91b2a570e2b45ac645a4e2dd6fca6 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Fri, 14 Oct 2022 18:04:08 +0530 Subject: [PATCH 21/22] updating helmfile to the latest version --- setup-helper.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup-helper.sh b/setup-helper.sh index 97ab18d..702a065 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -260,6 +260,8 @@ setup_tools() { install "werf" "install_werf" "version_werf" install "devspace" "install_devspace" + # updates the helmfile version to the latest + brew install helmfile configure_helmfile_for_werf install "python3" From 9af49b01164cc6302d1d67f2c42b107d56638b97 Mon Sep 17 00:00:00 2001 From: himanshu-garg-razorpay <103994803+himanshu-garg-razorpay@users.noreply.github.com> Date: Wed, 19 Oct 2022 14:39:26 +0530 Subject: [PATCH 22/22] protecting against zshrc failures --- setup-helper.sh | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/setup-helper.sh b/setup-helper.sh index 702a065..9ae444a 100644 --- a/setup-helper.sh +++ b/setup-helper.sh @@ -25,8 +25,7 @@ NOTE: If you don't have homebrew installed (i.e. running brew --version gives 'c use razorpay self-serve app to make yourself admin before running this script again. " -SHELL_TYPE="$(printf '%s' "$SHELL" | rev | cut -d'/' -f1 | rev)" -SHRC_FILE="${HOME}/.${SHELL_TYPE}rc" +DEV_SHRC_FILE="${HOME}/.devstack/shrc" BIN_DIR="${HOME}/.devstack/bin" BIN_DIR_EXPR="\${HOME}/.devstack/bin" @@ -43,24 +42,37 @@ test_private_connection() { [[ $status > 199 && $status < 400 ]] || abort "$errMsg" } +add_dev_shrc_to_user_shrc() { + declare shellType="$(printf '%s' "$SHELL" | rev | cut -d'/' -f1 | rev)" + declare userShrcFile="${HOME}/.${shellType}rc" + + declare sourceCmd="source $DEV_SHRC_FILE" + + idempotent_file_append "$sourceCmd" "$userShrcFile" +} + append_line_to_file() { declare line="$1" declare file="$2" + mkdir -p "$(dirname $file)" [[ -e $file ]] || touch "$file" echo "$line" >> "$file" } -refresh_shrc_binding() { - source "$SHRC_FILE" +idempotent_file_append() { + declare line="$1" + declare file="$2" + + grep -qsxF -- "$line" "$file" || append_line_to_file "$line" "$file" } add_cmd_to_shrc() { declare cmd="$1" - grep -qsxF -- "$cmd" "$SHRC_FILE" || append_line_to_file "$cmd" "$SHRC_FILE" - refresh_shrc_binding + idempotent_file_append "$cmd" "$DEV_SHRC_FILE" + source "$DEV_SHRC_FILE" } check_path_contains() { @@ -272,4 +284,6 @@ setup_tools() { install "pbincli" "install_pbincli" "version_pbincli" install "k8s-oidc-helper" "install_oidc_helper" + + add_dev_shrc_to_user_shrc }