iac/aero/roles/sarex_stack/tasks/registry.yml

113 lines
4.6 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# Доступ к приватному реестру cr.yandex (аутентификация json_key).
#
# Три независимых потребителя, каждому нужен свой способ:
# 1. docker на хосте — образы сервисов compose (backend, frontend, ...)
# 2. containerd на нодах — образы подов; /etc/rancher/k3s/registries.yaml
# 3. source-controller Flux — OCI-чарты; Secret yc-cr-auth в flux-system
#
# Ключ читается с control-node и на целевой хост в открытом виде не кладётся
# (кроме короткого окна для docker login, см. ниже).
- name: Проверить наличие ключа реестра на control-node
ansible.builtin.stat:
path: "{{ registry_key_src }}"
delegate_to: localhost
become: false
register: registry_key_stat
tags: [login, registry]
- name: Прервать деплой, если ключа нет
ansible.builtin.fail:
msg: |
Не найден ключ сервисного аккаунта: {{ registry_key_src }}
Без него не поедет ни один компонент — все чарты и образы лежат
в приватном реестре {{ registry_host }}.
Укажите актуальный путь:
uv run poe platform -- -e registry_key_src=/path/to/authorized_key.json
when: not registry_key_stat.stat.exists
tags: [login, registry]
- name: Прочитать ключ реестра с control-node
ansible.builtin.set_fact:
registry_key_content: "{{ lookup('file', registry_key_src) }}"
no_log: true
tags: [login, registry]
# --- 1. docker на хосте ----------------------------------------------------
- name: Проверить, выполнен ли вход в реестр
ansible.builtin.command: grep -q "{{ registry_host }}" /root/.docker/config.json
register: registry_login_state
changed_when: false
failed_when: false
tags: [login]
- name: Скопировать ключ реестра на хост (временно)
ansible.builtin.copy:
content: "{{ registry_key_content }}"
dest: "{{ registry_key_dest }}"
mode: "0600"
when: registry_login_state.rc != 0
no_log: true
tags: [login]
- name: docker login в приватный реестр
ansible.builtin.shell: >-
set -o pipefail && cat {{ registry_key_dest | quote }}
| docker login --username {{ registry_username }} --password-stdin {{ registry_host }}
args:
executable: /bin/bash
when: registry_login_state.rc != 0
register: registry_login_result
changed_when: "'Login Succeeded' in registry_login_result.stdout"
no_log: true
tags: [login]
# helm на хосте может отсутствовать — он нужен только для ручной отладки.
# Flux чарты тянет сам, по секрету yc-cr-auth, а не через helm CLI.
- name: Проверить наличие helm на хосте
ansible.builtin.command: which helm
register: registry_helm_present
changed_when: false
failed_when: false
tags: [login]
- name: helm registry login (если helm установлен)
ansible.builtin.shell: >-
set -o pipefail && cat {{ registry_key_dest | quote }}
| helm registry login {{ registry_host }} --username {{ registry_username }} --password-stdin
args:
executable: /bin/bash
when:
- registry_helm_present.rc == 0
- registry_login_state.rc != 0
register: registry_helm_login
changed_when: "'Login Succeeded' in registry_helm_login.stdout"
no_log: true
tags: [login]
- name: Удалить временный ключ реестра с хоста
ansible.builtin.file:
path: "{{ registry_key_dest }}"
state: absent
tags: [login]
# --- 2. containerd на нодах k3s -------------------------------------------
# Монтируется во все ноды (см. docker-compose.yaml). Изменение файла требует
# перезапуска нод — k3s читает registries.yaml только на старте.
- name: Отрендерить registries.yaml для нод k3s
ansible.builtin.template:
src: registries.yaml.j2
dest: "{{ deploy_dir }}/k3s/registries.yaml"
owner: root
group: root
mode: "0600"
no_log: true
tags: [registry]
# Секреты доступа в самом кластере создаются отдельно (registry-secrets.yml):
# они требуют уже поднятого k3s, поэтому включаются из platform.yml после
# первой волны, а не здесь.