Управление Argo CD с помощью Ansible через API вызовы

от автора

Сегодня я хочу поделиться опытом управления инфраструктурой с помощью DevOps инструментов. Этот метод может быть полезен, если у вас разнородная инфраструктура (облака, Kubernetes, виртуальные машины и т.д.).

Статья будет разбита на два этапа:

  • управление приложениями в ArgoCD через API запросы

  • использование Ansible для автоматизации этого процесса.

Предварительные требования

Данная статья предполагает, что у вас уже установлены ArgoCD, Ansible, а также имеются необходимые права и доступы.

Управление приложениями в ArgoCD через API запросы.

Генерация токена

Для взаимодействия с ArgoCD через API необходим токен. Его можно получить двумя способами: через API запрос или веб-интерфейс.

Получение токена через API запрос

Токен можно получить с помощью следующего API запроса:

curl $ARGOCD_SERVER/api/v1/session -d $'{"username":"admin","password":"your_password_here"}'

Генерация постоянного токена через веб-интерфейс

Еще один способ получить токен — сгенерировать постоянный токен через веб-интерфейс ArgoCD:

Для этого нужно

1. Отредактировать configMap, который называется argocd-cm в namespace ArgoCD, обычно он так и называется argocd. Нужно добавить следующую строку в раздел data:

data:   accounts.admin: apiKey, login 
  1. Перезапустить деплоймент argo-cd-argocd-server.

  2. Сгенерировать новый токен для пользователя ‘admin’ через веб-интерфейс ArgoCD:

    • Перейти в раздел /settings/accounts/admin.

    • В разделе Token ID выберать Generate NEW ‘Token ID’.

    • Выбрать пользователя ‘admin’ и сгенерировать новый токен.

Примеры API запросов

Экспорт токена в переменную окружения

export ARGOCD_TOKEN="ваш токен здесь"

Создать приложение в ArgoCD через cURL запрос:

curl -X POST -H "Authorization: Bearer $ARGOCD_TOKEN" -H "Content-Type: application/json" \   -d '{     "metadata": {       "name": "test-api-app",       "namespace": "argocd"     },     "spec": {       "project": "default",       "source": {         "repoURL": "https://your-argocd-instance/helm.git",         "path": "vault-secrets-webhook",         "targetRevision": "master",         "helm": {           "parameters": [             {"name": "resources.limits.memory", "value": "256Mi"},             {"name": "resources.limits.cpu", "value": "250m"}           ]         }       },       "destination": {         "server": "https://kubernetes.default.svc",         "namespace": "test-app-yaml"       },       "syncPolicy": {         "automated": {"prune": true, "selfHeal": true}       }     }   }' \   https://your-argocd-instance/api/v1/applications 

Удалить приложение можно с помощью следующего API запроса:

curl -X DELETE -H "Authorization: Bearer $ARGOCD_TOKEN" https://your-argocd-instance/api/v1/applications/test-api-app

Доступ к документации API ArgoCD с помощью Swagger

Можно получить доступ к подробной документации API с помощью Swagger. Для это нужно открыть браузер и перейти к интерфейсу Swagger:

https://your-argocd-instance/swagger-ui

Интеграция Ansible с ArgoCD

Теперь рассмотрим, как можно использовать Ansible для управления приложениями в ArgoCD.

Ansible интегрируется с ArgoCD через модуль URI, позволяя выполнять API запросы.

Пример 1: Создание приложения в ArgoCD

Вот пошаговый плейбук Ansible для создания приложения в ArgoCD:

- hosts: localhost   tasks:     - name: Create ArgoCD application       uri:         url: "https://{{ ARGOCD_URL }}/api/v1/applications"         method: POST         headers:           Authorization: "Bearer {{ ARGOCD_TOKEN }}"           Content-Type: "application/json"         body_format: json         body:           metadata:             name: "{{ APP_NAME }}"             namespace: "argocd"           spec:             project: "default"             source:               repoURL: "https://{{ ARGOCD_HELM_REPO }}/stash/scm/do/helm.git"               path: "vault-secrets-webhook"               targetRevision: "master"               helm:                 parameters:                   - name: "replicaCount"                     value: "1"                   - name: "env.VAULT_IMAGE"                     value: "vault:1.11.11"                   - name: "resources.limits.memory"                     value: "256Mi"                   - name: "resources.limits.cpu"                     value: "250m"             destination:               server: "https://kubernetes.default.svc"               namespace: "test-app-yaml"             syncPolicy:               automated:                 prune: true                 selfHeal: true         return_content: yes         validate_certs: no       register: response      - name: Display API response       debug:         var: response.content 

В этом плейбуке убедитесь, что вы определили переменные ARGOCD_URLARGOCD_TOKEN и APP_NAME соответственно.

Пример 2: Удаление приложения в ArgoCD

Удаление приложения также просто:

- hosts: localhost   tasks:   - name: Delete ArgoCD application     uri:       url: "https://{{ ARGOCD_URL }}/api/v1/applications/{{ APP_NAME }}"       method: DELETE       headers:         Authorization: "Bearer {{ ARGOCD_TOKEN }}"         Content-Type: "application/json"       status_code: 200,202,204       validate_certs: no 

Проверьте, что переменные ARGOCD_URLARGOCD_TOKEN и APP_NAME установлены и для этого плейбука.

Пример структуры Ansible роли

Как может выглядеть структура файлов и директорий в репозитории

roles/app-k8s-deploy ├── defaults │   └── main.yaml ├── tasks │   ├── create_application.yml │   ├── delete_application.yml │   └── main.yaml

В defaults/main.yaml определите значения по умолчанию:

ARGOCD_URL: "https://your-argocd-instance" ARGOCD_TOKEN: "" ARGOCD_APP_NAME: "test-api-app" # ... (другие переменные) 

Плейбук main.yaml может выглядеть так:

--- - name: Include create application tasks   include_tasks: create_application.yml   when: task == 'install'  - name: Include delete application tasks   include_tasks: delete_application.yml   when: task == 'delete' 

Внутри create_application.yml и delete_application.yml можно определить соответствующие задачи, используя структуру из предыдущих примеров.

Плейбук для запуска роли

Наконец, вы можете запустить роль из следующего плейбука

--- - hosts: "{{ exec_hosts | default(['localhost']) | join(',') }}"   roles:   - { role: app-k8s-deploy, task: install } 

Надеюсь что мой опыт будет полезен и поможет эффективно управлять приложениями ArgoCD с помощью Ansible. Удачной автоматизации!


ссылка на оригинал статьи https://habr.com/ru/articles/819439/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *