Как изменить учетные данные для данного сервиса в Cloud Foundry - PullRequest
0 голосов
/ 16 ноября 2018

Я хотел бы знать, как (и если это возможно) изменить учетные данные URI из службы в Cloud Foundry. В частности, сервис mLab (бесплатный тариф) от Pivotal Cloud Foundry.


Фон

Я создал и отправил приложение nodejs в Pivotal Cloud Foundry.

Это приложение привязано к сервису mLab с использованием бесплатного плана.

Когда служба mLab была создана с использованием веб-сайта Pivotal, она автоматически создала базу данных с пользователем и паролем.

Открывая настройки приложения на веб-сайте Pivotal, я вижу следующие переменные среды. Обратите внимание на монго ури внутри credentials и name внутри mLab.

{
  "staging_env_json": {},
  "running_env_json": {},
  "system_env_json": {
    "VCAP_SERVICES": {
      "mlab": [
        {
          "label": "mlab",
          "provider": null,
          "plan": "sandbox",
          "name": "users",
          "instance_name": "users",
          "binding_name": null,
          "credentials": {
            "uri": "mongodb://CloudFoundry_someusergenerated:apasswordgeneratedautomatically@somehost.mlab.com:someport/CloudFoundry_database_name"
          }
        }
      ]
    }
  },
  "application_env_json": {
    "VCAP_APPLICATION": {
      "cf_api": "https://donotuseapi.run.pivotal.io",
      "application_name": "website",
      "application_uris": [
        "xxx.cfapps.io"
      ],
      "name": "website",
      "space_name": "space1",
      "uris": [
        "xxx.cfapps.io"
      ]
    }
  }
}

Соединение с базой данных работает нормально с этим именем пользователя и паролем по умолчанию. Чтобы получить mongodb uri из переменных окружения, я использую пакет npm cfenv

const appEnv = require('cfenv').getAppEnv();
    const env = process.env;
    keys = { 
        mongodb: {
            dbURI: appEnv.getServiceURL(env.MONGO_SERVICE_NAME)
        }
    };

В моем файле manifest.yaml MONGO_SERVICE_NAME указано в соответствии с именем службы в переменных среды.

---
applications:
- name: website
  memory: 128M
  disk_quota: 256M
  random-route: true
  buildpack: nodejs_buildpack
  health-check-type: port
  env:
    MONGO_SERVICE_NAME: 'users'

Опять же, соединение с БД работает нормально.

===

Затем я открыл сайт mLab для этой конкретной базы данных и создал нового пользователя базы данных.

Теперь я хочу обновить credentials.uri из VCAP_SERVICES (переменные среды) для этой конкретной службы, чтобы использовать нового пользователя и пароль.

Насколько я понимаю, cf update-service команда CLI не подразумевается под этим, поэтому мне интересно, является ли это ограничением Cloud Foundry, Pivotal или mLab. Могу поспорить, что это ограничение связано с тем, что я использую пробную учетную запись Pivotal и бесплатный тариф mLab, однако мой вопрос остается прежним, если я обновляю планы.

Спасибо

1 Ответ

0 голосов
/ 20 ноября 2018

Как пользователь, вы не можете изменять VCAP_SERVICES записи, которые генерируются сервисными брокерами.Они исправлены и не могут быть изменены.

Если вы cf create-service 'da service, то она была создана брокером сервиса, и вы получите именно то, что вам предоставляет провайдер сервиса.Как уже упоминалось в комментариях, в зависимости от сервисного брокера вы можете передавать брокеру аргументы с помощью cf create-service -c.Обратитесь к документации вашего поставщика услуг, чтобы узнать, есть ли возможность влиять на учетные данные, сгенерированные так, как вам хотелось бы.

Если ваш поставщик услуг не предоставляет варианты действий, которые вы хотите, вы можете создатьсервисный ключ вместо привязки вашего сервиса к приложению.Это даст вам набор учетных данных для вашего сервиса, который будет действовать в течение срока действия сервисного ключа.Учетные данные сервисных ключей не передаются автоматически в приложение, но вы можете передавать их в свое приложение различными способами.

  1. Вы можете передавать их через переменные среды.
  2. Вы можете создать предоставленную пользователем службу (cf cups).
  3. Вы можете передать их через конфигурацию приложения или через сервер конфигурации.

Используя все эти опции, выпередача учетных данных в приложение, чтобы теоретически вы могли настроить или изменить их, прежде чем они попадут в ваше приложение.

Надеюсь, это поможет!

...