apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
helmCharts:
- name: mysql
repo: ../../upstream/mysql
version: 9.4.6
releaseName: mysql-dev
namespace: mysql-dev
valuesFile: values-dev.yaml
resources:
- namespace.yaml
patchesStrategicMerge:
- mysql-dev-patch.yaml
commonLabels:
environment: dev
managed-by: argocd
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: mysql-dev
namespace: argocd
spec:
project: default
source:
repoURL: https://bitbucket.org/your-org/my-application-infra.git
targetRevision: HEAD
path: charts/overlays/dev/mysql
kustomize:
images:
- mysql:8.0.35
destination:
server: https://kubernetes.default.svc
namespace: mysql-dev
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
---
- name: Deploy Client Binaries
hosts: all
become: yes
vars:
binary_base_url: "https://bitbucket.org/your-org/my-application-infra/raw/main/binaries"
target_dir: "/usr/local/bin"
tasks:
- name: Create target directory
file:
path: "{{ target_dir }}"
state: directory
mode: '0755'
- name: Download and install MySQL client
get_url:
url: "{{ binary_base_url }}/mysql-client/{{ mysql_client_version }}/{{ ansible_system | lower }}-{{ ansible_architecture }}/mysql-client"
dest: "{{ target_dir }}/mysql-client"
mode: '0755'
when: "'mysql' in required_binaries"
- name: Download and install Redis CLI
get_url:
url: "{{ binary_base_url }}/redis-cli/{{ redis_cli_version }}/{{ ansible_system | lower }}-{{ ansible_architecture }}/redis-cli"
dest: "{{ target_dir }}/redis-cli"
mode: '0755'
when: "'redis' in required_binaries"
- name: Verify binary installation
command: "{{ target_dir }}/{{ item }} --version"
register: binary_versions
loop: "{{ required_binaries }}"
failed_when: false
- name: Display installed versions
debug:
msg: "{{ item.item }}: {{ item.stdout }}"
loop: "{{ binary_versions.results }}"
when: item.rc == 0
---
mysql_client_version: "v8.0.35"
redis_cli_version: "v7.2.3"
required_binaries:
- mysql-client
- redis-cli
mysql_servers:
- mysql-dev-01.internal
- mysql-dev-02.internal
redis_servers:
- redis-dev-01.internal
```sh
set -e
REPO_ROOT=$(git rev-parse --show-toplevel)
CHARTS_DIR="$REPO_ROOT/charts/upstream"
echo "=== Updating Helm Charts ==="
echo "Updating MySQL chart..."
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm pull bitnami/mysql --untar --untardir "$CHARTS_DIR"
echo "Updating Redis chart..."
helm pull bitnami/redis --untar --untardir "$CHARTS_DIR"
git add "$CHARTS_DIR"
git commit -m "Update helm charts: MySQL $(helm show chart bitnami/mysql | grep version | head -1), Redis $(helm show chart bitnami/redis | grep version | head -1)"
git push
echo "=== Helm charts updated successfully ==="
set -e
REPO_ROOT=$(git rev-parse --show-toplevel)
BINARIES_DIR="$REPO_ROOT/binaries"
update_mysql_client() {
local version="$1"
local target_dir="$BINARIES_DIR/mysql-client/$version"
mkdir -p "$target_dir"/{linux-amd64,linux-arm64,windows-amd64}
ln -sfn "$version" "$BINARIES_DIR/mysql-client/latest"
}
update_redis_cli() {
local version="$1"
local target_dir="$BINARIES_DIR/redis-cli/$version"
mkdir -p "$target_dir"/{linux-amd64,linux-arm64,windows-amd64}
ln -sfn "$version" "$BINARIES_DIR/redis-cli/latest"
}
if [ "$1" = "mysql" ]; then
update_mysql_client "$2"
elif [ "$1" = "redis" ]; then
update_redis_cli "$2"
else
echo "Usage: $0 {mysql|redis} <version>"
exit 1
fi
git add "$BINARIES_DIR"
git commit -m "Update $1 binary to $2"
git push