113 lines
4.6 KiB
YAML
113 lines
4.6 KiB
YAML
---
|
||
# Доступ к приватному реестру 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 после
|
||
# первой волны, а не здесь.
|