Как написать сценарий API CF с помощью `CF OAUTH-TOKEN` и Python
12 мая 2022 г.Родни Дэнджерфилд из CF CLI, проявите к нему уважение!
Мне поручили взглянуть на все переменные среды, используемые для основы. Обычно я собирал быстрый запрос к базе данных Cloud Controller, но обнаружил, что эти данные зашифрованы.
Однако вы можете получить информацию из интерфейса командной строки CF, но вам нужно знать, как войти в систему и просмотреть результаты. Немного Python, танцующий суслик и правильный курс этикета — все, что вам нужно.
Бери клюшку и иди к первой лунке!
Отверстие 1 – Вход
Быстро и легко используйте интерфейс командной строки cf
, чтобы войти в желаемую основу CF:
cf логин
или
cf логин --sso
После успешного входа токен и другая информация будут сохранены в ~/.cf/config.json
.
Отверстие 2 – Создайте скрипт Python
Сценарий ниже будет использовать токен из последнего шага, который хранится в ~/.cf/config.json
!/usr/bin/env python3
запросы на импорт
из request.structures импортировать CaseInsensitiveDict
импорт системы
предупреждения об импорте
Отключить предупреждения SSL — важно для KubeCF
если не sys.warnoptions:
предупреждения.simplefilter("игнорировать")
Авторизоваться
системный_домен = sys.argv[1]
токен = sys.argv[2]
заголовки = CaseInsensitiveDict()
заголовки["Принять"] = "приложение/json"
заголовки["Авторизация"] = токен
apps_url = «https://api». + системный_домен + "/v3/apps/?per_page=100"
записи = запросы.получить(apps_url, заголовки=заголовки, проверить=ложь).json()
total_results = записи["разбиение на страницы"]["всего_результатов"]
total_pages = записи["пагинация"]["всего_страниц"]
текущая_страница = 1
приложения = {}
пока верно:
print("Обрабатывается страница " + str(current_page) + "/" + str(total_pages))
для записи в entry["resources"]:
env_vars_url = запись["ссылки"]["переменные_среды"]["href"]
env_vars = request.get(env_vars_url, заголовки=заголовки, проверка=ложь).json()
line_label = "приложение:" + запись["имя"]+",env"
приложения[line_label] = []
для ключа значение в env_vars["var"].items():
apps[line_label].append(str(ключ) + "=" + str(значение))
текущая_страница += 1
если записи["pagination"]["next"] равны None:
перемена
записи = запросы.получить(записи["разбиение на страницы"]["следующий"]["href"], заголовки=заголовки, проверить=ложь).json()
для ключа, значение в apps.items():
print(str(ключ) + ":" + str(значение))
Сохраните этот файл и назовите его scrape.py
.
Отверстие 3 – Запустите скрипт
Вот где происходит магия токена cf oauth. После того, как вы успешно вошли в систему, токен носителя хранится локально и может быть получен по запросу, а также обновлен по мере необходимости. Круто, да? Дополнительные сведения об этой команде можно найти по адресу https://cli.cloudfoundry.org/en-US/v6/oauth-token.html.
Если вы щелкнули по этой ссылке и остались недовольны, добро пожаловать в клуб, и вы можете извиниться за то, что никогда раньше не слышали об этой команде. Продолжайте, вы увидите, насколько это ценно на самом деле.
Предполагая, что вы назвали скрипт scrape.py
, теперь вы можете запустить его на своем основании; первый параметр — это системный домен вашего фонда, а второй параметр — это команда для получения токена носителя:
```javascript
python3 scrape.py system_url.nip.io "$(cf oauth-токен)"
Сценарий будет перебирать видимые приложения и извлекать список переменных среды. Пользователи с `cloud_controller.admin
или аналогичными разрешениями будут проходить через все организации и пространства; в противном случае он будет проходить только по тем организациям и пространствам, на которые у вас есть разрешения.
Вывод будет выглядеть примерно так:
```javascript
Обработка стр. 1/1
приложение: мое тестовое приложение, env: ['MYENV = тест']
Если вам нужен пример парсинга организации, пространства и альтернативных комбинаций входа, я создал этот пример скрипта. Примечания вверху содержат инструкции, если вы пытаетесь запустить это на локально развернутом KubeCF.
Наслаждаться! Не забудьте вернуть свою клюшку и оценочную карточку обратно на стойку регистрации.
Также опубликовано [здесь] (https://www.starkandwayne.com/blog/scripting-the-cf-api-with-cf-oauth-token-and-python/)
Оригинал