Как написать сценарий API CF с помощью `CF OAUTH-TOKEN` и Python

Как написать сценарий API CF с помощью `CF OAUTH-TOKEN` и Python

12 мая 2022 г.

Фото мк. s на Unsplash


Родни Дэнджерфилд из 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/)



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE