Path: blob/main/dev/preview/workflow/vm/template/gcr-pull-secret-job.yaml
2501 views
apiVersion: batch/v11kind: CronJob2metadata:3name: gcr-refresh-token4spec:5schedule: "30 * * * *"6successfulJobsHistoryLimit: 17suspend: false8concurrencyPolicy: Forbid9failedJobsHistoryLimit: 110jobTemplate:11spec:12ttlSecondsAfterFinished: 6013template:14spec:15serviceAccountName: gcr-refresh-token16containers:17- name: gcr-refresh-token18image: chainguard/kubectl:latest-dev19command:20- /bin/sh21- -c22- |-23ACCOUNTS=$(wget -q -O - --header "Metadata-Flavor: Google" "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/" | tr -d '\r')24NON_DEFAULT_ACCOUNTS=$(echo "$ACCOUNTS" | grep -v "^default$")25FIRST_NON_DEFAULT_ACCOUNT=$(echo "$NON_DEFAULT_ACCOUNTS" | head -1)26TOKEN=$(wget -q -O - --header "Metadata-Flavor: Google" "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/$FIRST_NON_DEFAULT_ACCOUNT/token")27ACCESS_TOKEN=$(echo "$TOKEN" | grep -o '"access_token": *"[^"]*"' | sed 's/"access_token": *"\([^"]*\)"/\1/')2829AUTH_TOKEN=$(echo -n _dcgcloud_token:${ACCESS_TOKEN} | base64 -w0)303132# Create Docker config.json33cat << EOF > /tmp/config.json34{35"auths": {36"eu.gcr.io": {37"auth": "${AUTH_TOKEN}"38}39}40}41EOF4243# To avoid the deletion/creation we can run dry-run and then apply44kubectl create secret generic image-pull-secret \45--from-file=.dockerconfigjson=/tmp/config.json \46--type=kubernetes.io/dockerconfigjson \47-o yaml --dry-run=client | kubectl apply --server-side --force-conflicts -f -4849echo "Secret gcr-credential was successfully updated at $(date)"50restartPolicy: Never51---52apiVersion: rbac.authorization.k8s.io/v153kind: Role54metadata:55name: gcr-refresh-token-access-to-secrets-role56rules:57- apiGroups: [""]58resources: ["secrets"]59resourceNames: ["image-pull-secret"]60verbs:61- "get"62- "create"63- "patch"64---65kind: RoleBinding66apiVersion: rbac.authorization.k8s.io/v167metadata:68name: gcr-refresh-token-role-binding69subjects:70- kind: ServiceAccount71name: gcr-refresh-token72apiGroup: ""73roleRef:74kind: Role75name: gcr-refresh-token-access-to-secrets-role76apiGroup: ""77---78apiVersion: v179kind: ServiceAccount80metadata:81name: gcr-refresh-token828384