Compare commits
No commits in common. "375113b7c813507e909e7064353d8a8415fe5a7e" and "7e6430640cee15c7bf48ef7f499e9c6a0999bd4c" have entirely different histories.
375113b7c8
...
7e6430640c
5 changed files with 5 additions and 296 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: v6.0.0
|
rev: v5.0.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
- id: end-of-file-fixer
|
- id: end-of-file-fixer
|
||||||
|
|
@ -15,18 +15,18 @@ repos:
|
||||||
- id: trailing-whitespace
|
- id: trailing-whitespace
|
||||||
|
|
||||||
- repo: https://github.com/antonbabenko/pre-commit-terraform
|
- repo: https://github.com/antonbabenko/pre-commit-terraform
|
||||||
rev: v1.105.0
|
rev: v1.92.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: terraform_fmt
|
- id: terraform_fmt
|
||||||
|
|
||||||
- repo: https://github.com/adrienverge/yamllint.git
|
- repo: https://github.com/adrienverge/yamllint.git
|
||||||
rev: v1.38.0
|
rev: v1.35.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: yamllint
|
- id: yamllint
|
||||||
args: [--format, parsable, --strict]
|
args: [--format, parsable, --strict]
|
||||||
|
|
||||||
- repo: https://github.com/shellcheck-py/shellcheck-py
|
- repo: https://github.com/shellcheck-py/shellcheck-py
|
||||||
rev: v0.11.0.1
|
rev: v0.10.0.1
|
||||||
hooks:
|
hooks:
|
||||||
- id: shellcheck
|
- id: shellcheck
|
||||||
files: \.sh
|
files: \.sh
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ spec:
|
||||||
image:
|
image:
|
||||||
repository: diocrafts/oxicloud
|
repository: diocrafts/oxicloud
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
tag: "0.5.6"
|
tag: "0.5.5"
|
||||||
persistence:
|
persistence:
|
||||||
enabled: true
|
enabled: true
|
||||||
storageClass: "truenas-nfs-csi"
|
storageClass: "truenas-nfs-csi"
|
||||||
|
|
|
||||||
|
|
@ -1,162 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
cat <<EOF
|
|
||||||
Usage: $(basename "$0") REPLICAS [RESOURCE...] [OPTIONS]
|
|
||||||
|
|
||||||
Scale up or down one or several deployments/statefulsets.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
REPLICAS Number of replicas to scale to
|
|
||||||
RESOURCE Resource to scale in "namespace/name" format, or just "name"
|
|
||||||
(uses current context namespace). Can be specified multiple times.
|
|
||||||
|
|
||||||
Commands:
|
|
||||||
--all Scale all deployments and statefulsets in the namespace
|
|
||||||
--all-namespaces
|
|
||||||
Scale all deployments and statefulsets across all namespaces
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-h, --help Show this help message
|
|
||||||
-n, --namespace NAMESPACE
|
|
||||||
Namespace to use (default: current context namespace)
|
|
||||||
--dry-run Print what would be scaled without making changes
|
|
||||||
-v Pass -v to kubectl (minimal output)
|
|
||||||
-vv Pass -vv to kubectl (more output)
|
|
||||||
-vvv Pass -vvv to kubectl (debug output)
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
$(basename "$0") 1 mynamespace/mydeployment
|
|
||||||
$(basename "$0") 1 mynamespace/mydeployment mydeployment2
|
|
||||||
$(basename "$0") 1 --all
|
|
||||||
$(basename "$0") 1 --all --namespace mynamespace
|
|
||||||
$(basename "$0") 0 --all-namespaces --dry-run
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
KUBECTL_V=""
|
|
||||||
NAMESPACE=""
|
|
||||||
DRY_RUN=false
|
|
||||||
REPLICAS=""
|
|
||||||
RESOURCES=()
|
|
||||||
ALL=false
|
|
||||||
ALL_NAMESPACES=false
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
-h|--help)
|
|
||||||
usage
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
-n|--namespace)
|
|
||||||
NAMESPACE="$2"
|
|
||||||
shift 2
|
|
||||||
;;
|
|
||||||
--dry-run)
|
|
||||||
DRY_RUN=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-v|-vv|-vvv)
|
|
||||||
KUBECTL_V="$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--all)
|
|
||||||
ALL=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
--all-namespaces)
|
|
||||||
ALL_NAMESPACES=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
echo "Error: Unknown option: $1" >&2
|
|
||||||
usage >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if [[ -z "$REPLICAS" ]]; then
|
|
||||||
REPLICAS="$1"
|
|
||||||
else
|
|
||||||
RESOURCES+=("$1")
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z "$REPLICAS" ]]; then
|
|
||||||
echo "Error: REPLICAS is required" >&2
|
|
||||||
usage >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$ALL" == false && "$ALL_NAMESPACES" == false && ${#RESOURCES[@]} -eq 0 ]]; then
|
|
||||||
echo "Error: Must specify --all, --all-namespaces, or at least one RESOURCE" >&2
|
|
||||||
usage >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
NAMESPACE_ARG=()
|
|
||||||
if [[ -n "$NAMESPACE" ]]; then
|
|
||||||
NAMESPACE_ARG=("-n" "$NAMESPACE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
DRY_RUN_ARG=()
|
|
||||||
if [[ "$DRY_RUN" == true ]]; then
|
|
||||||
DRY_RUN_ARG=("--dry-run=client")
|
|
||||||
fi
|
|
||||||
|
|
||||||
KUBECTL_BASE=(kubectl)
|
|
||||||
if [[ -n "$KUBECTL_V" ]]; then
|
|
||||||
KUBECTL_BASE+=( "$KUBECTL_V" )
|
|
||||||
fi
|
|
||||||
KUBECTL_BASE+=( "${NAMESPACE_ARG[@]}" )
|
|
||||||
KUBECTL_BASE+=( "${DRY_RUN_ARG[@]}" )
|
|
||||||
|
|
||||||
scale_resource() {
|
|
||||||
local resource="$1"
|
|
||||||
local ns name
|
|
||||||
|
|
||||||
if [[ "$resource" == */* ]]; then
|
|
||||||
ns="${resource%%/*}"
|
|
||||||
name="${resource#*/}"
|
|
||||||
else
|
|
||||||
ns="${NAMESPACE:-$(kubectl "${NAMESPACE_ARG[@]}" config view --minify --output jsonpath='{.contexts[0].context.namespace}' 2>/dev/null || echo "default")}"
|
|
||||||
name="$resource"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for kind in deployment statefulset; do
|
|
||||||
if "${KUBECTL_BASE[@]}" get "$kind" "$name" -n "$ns" &>/dev/null; then
|
|
||||||
echo "Scaling $kind/$ns/$name to $REPLICAS replicas${DRY_RUN:+ (dry-run)}"
|
|
||||||
"${KUBECTL_BASE[@]}" scale "$kind" "$name" -n "$ns" --replicas="$REPLICAS"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Error: Resource '$resource' not found as deployment or statefulset" >&2
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
get_resources() {
|
|
||||||
local ns_flag=()
|
|
||||||
if [[ "$ALL_NAMESPACES" == true ]]; then
|
|
||||||
ns_flag=("--all-namespaces")
|
|
||||||
elif [[ -n "$NAMESPACE" ]]; then
|
|
||||||
ns_flag=("-n" "$NAMESPACE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
"${KUBECTL_BASE[@]}" get "${ns_flag[@]}" deployment,statefulset -o jsonpath='{range .items[*]}{.metadata.namespace}/{.kind}/{.metadata.name}{"\n"}{end}' 2>/dev/null | while IFS=/ read -r ns kind name; do
|
|
||||||
echo "$ns/$name"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
if [[ "$ALL" == true || "$ALL_NAMESPACES" == true ]]; then
|
|
||||||
while IFS= read -r resource; do
|
|
||||||
[[ -n "$resource" ]] && scale_resource "$resource"
|
|
||||||
done < <(get_resources)
|
|
||||||
else
|
|
||||||
for resource in "${RESOURCES[@]}"; do
|
|
||||||
scale_resource "$resource"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
0
scripts/proxmox-power.sh
Executable file → Normal file
0
scripts/proxmox-power.sh
Executable file → Normal file
|
|
@ -1,129 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
check_kubectl() {
|
|
||||||
if ! command -v kubectl &>/dev/null; then
|
|
||||||
echo "Error: kubectl is not installed or not in PATH" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
log_info "kubectl found at $(command -v kubectl)"
|
|
||||||
}
|
|
||||||
|
|
||||||
VERBOSE=0
|
|
||||||
|
|
||||||
log_debug() { [[ $VERBOSE -ge 3 ]] && echo "[DEBUG] $*" || true; }
|
|
||||||
log_verbose() { [[ $VERBOSE -ge 2 ]] && echo "[VERBOSE] $*" || true; }
|
|
||||||
log_info() { [[ $VERBOSE -ge 1 ]] && echo "[INFO] $*" || true; }
|
|
||||||
log_error() { echo "[ERROR] $*" >&2; }
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
cat <<EOF
|
|
||||||
Usage: $(basename "$0") [OPTIONS] [VERSION]
|
|
||||||
|
|
||||||
Upgrade ArgoCD to a new version. Requires an existing ArgoCD installation.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
$(basename "$0") # queries the current argo version and tries to update to the immediate newest version
|
|
||||||
$(basename "$0") v4.3.0 # incrementally update to target version
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-h, --help Show this help message
|
|
||||||
--dry-run Show what would be done without making changes
|
|
||||||
-v Verbose output (info level)
|
|
||||||
-vv More verbose output (info + verbose level)
|
|
||||||
-vvv Debug output (all log levels)
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
DRY_RUN=false
|
|
||||||
|
|
||||||
while [[ $# -gt 0 ]]; do
|
|
||||||
case "$1" in
|
|
||||||
-h|--help)
|
|
||||||
usage
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
--dry-run)
|
|
||||||
DRY_RUN=true
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-v|-vv|-vvv)
|
|
||||||
case "$1" in
|
|
||||||
-v) VERBOSE=1 ;;
|
|
||||||
-vv) VERBOSE=2 ;;
|
|
||||||
-vvv) VERBOSE=3 ;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
echo "Error: Unknown option: $1" >&2
|
|
||||||
usage >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
TARGET_VERSION="$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
log_debug "Script started with target version: ${TARGET_VERSION:-auto}"
|
|
||||||
|
|
||||||
check_kubectl
|
|
||||||
|
|
||||||
log_info "Checking current kubectl context"
|
|
||||||
CURRENT_CONTEXT=$(kubectl config current-context 2>/dev/null)
|
|
||||||
log_verbose "Current context: $CURRENT_CONTEXT"
|
|
||||||
|
|
||||||
log_info "Checking for ArgoCD installation"
|
|
||||||
if ! kubectl get ns argocd &>/dev/null; then
|
|
||||||
log_error "ArgoCD namespace not found. This script only upgrades existing installations."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
log_verbose "ArgoCD namespace found"
|
|
||||||
|
|
||||||
log_info "Checking current ArgoCD version"
|
|
||||||
CURRENT_VERSION=$(kubectl get deployment argocd-server -n argocd -o jsonpath='{.spec.template.spec.containers[0].image}' 2>/dev/null)
|
|
||||||
if [[ -n "$CURRENT_VERSION" ]]; then
|
|
||||||
CURRENT_VERSION=$(echo "$CURRENT_VERSION" | sed 's/.*argocd:v\?//' | tr -d ' \n')
|
|
||||||
if [[ -n "$CURRENT_VERSION" ]]; then
|
|
||||||
CURRENT_VERSION="${CURRENT_VERSION#v}"
|
|
||||||
log_verbose "Current ArgoCD version: $CURRENT_VERSION"
|
|
||||||
else
|
|
||||||
log_error "Could not extract ArgoCD version from image: $CURRENT_VERSION"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -z "$TARGET_VERSION" ]]; then
|
|
||||||
log_info "No target version specified, querying for latest version"
|
|
||||||
log_verbose "Fetching latest release from GitHub"
|
|
||||||
LATEST_VERSION=$(curl -s https://api.github.com/repos/argoproj/argo-cd/releases/latest | grep -oP '"tag_name":\s*"\K[^"]+' | sed 's/^v//')
|
|
||||||
if [[ -n "$LATEST_VERSION" ]]; then
|
|
||||||
log_verbose "Latest version available: $LATEST_VERSION"
|
|
||||||
TARGET_VERSION="$LATEST_VERSION"
|
|
||||||
else
|
|
||||||
echo "Error: Could not fetch latest version" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info "Target version: $TARGET_VERSION"
|
|
||||||
|
|
||||||
log_debug "Determining update path from $CURRENT_VERSION to $TARGET_VERSION"
|
|
||||||
|
|
||||||
log_info "Applying ArgoCD manifests"
|
|
||||||
log_verbose "Downloading manifest from https://raw.githubusercontent.com/argoproj/argo-cd/v${TARGET_VERSION}/manifests/install.yaml"
|
|
||||||
curl -sLO "https://raw.githubusercontent.com/argoproj/argo-cd/v${TARGET_VERSION}/manifests/install.yaml"
|
|
||||||
|
|
||||||
log_debug "Applying manifest with kubectl"
|
|
||||||
if [[ "$DRY_RUN" == true ]]; then
|
|
||||||
log_verbose "Dry-run mode: would apply manifest"
|
|
||||||
kubectl apply -n argocd -f install.yaml --dry-run=client
|
|
||||||
else
|
|
||||||
kubectl apply -n argocd -f install.yaml
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_verbose "Cleaning up downloaded manifest"
|
|
||||||
rm -f install.yaml
|
|
||||||
|
|
||||||
log_info "Update to ArgoCD $TARGET_VERSION initiated"
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue