2016-02-26 2 views
0

Использование spring-cloud-cloudfoundry-service-broker было разработано service broker.
Первоначально мы определили элементы каталога в пределах application.yml файла, который поставляется в комплекте внутри банки, и все это отлично работает.Конфигурирование элементов каталога через файл manifest.yml

Вместо того, чтобы связывать элементы каталога в файле jar, мы думали о доставке через файл manifest.yml при нажатии службы на cloud foundry. Но, к сожалению, приложение не получает элементы каталога, указанные в файле manigest.yml. Не могли бы вы сообщить нам, как мы можем поставить элементы каталога через файл manifest.yml?

Я скопировал свой фрагмент кода здесь.

CatalogConfig.java

@ConfigurationProperties(prefix = "catalog") 
@Component 
public class CatalogConfig { 
private List<ServiceDefinitionProxy> services; 

public CatalogConfig() { 
    super(); 
} 

@Bean 
Catalog catalog() { 
    return new Catalog(services.stream().map(s -> s.unproxy()) 
      .collect(Collectors.toList())); 
} 

public CatalogConfig(List<ServiceDefinitionProxy> services) { 
    super(); 
    this.services = services; 
} 

public List<ServiceDefinitionProxy> getServices() { 
    return services; 
} 

public void setServices(List<ServiceDefinitionProxy> services) { 
    this.services = services; 
} 

public ServiceDefinitionProxy findServiceDefinition(String serviceId) { 
    return services.stream().filter(s -> s.getId().equals(serviceId)) 
      .findFirst().get(); 
} 
}  

Manifest.yml

--- 
applications: 
- name: my-service-broker 
    memory: 512M 
    instances: 1 
    host: my-service-broker 
    path: target/my-service-broker-1.0.0-SNAPSHOT.jar 
    env: 
    SPRING_PROFILES_DEFAULT: cloud 
catalog: 
    services: 
     - id: f1478faa-d980-11e5-b5d2-0a1d41d68578 
     name: api-marketpace 
     description: API Marketplace 
     bindable: true 
     planUpdatable: true 
     head-type: api 
     tags: 
      - api 
      - Manage API Marketplace 
     metadata: 
      displayName: API Marketplace 
      imageUrl: https://my-service-broker.cf.com/images/logo.PNG 
      longDescription: API Marketplace. 
      providerDisplayName: API Team 
      documentationUrl: https://wikihub.com/display/ASC/Training 
      supportUrl: https://wikihub.com/display/ASC/Training 
     plans: 
      - id: f1478faa-d980-11e5-b5d2-0a1d41d68579 
      name: unlimited 
      description: free 
      metadata: 
       costs: 
       - amount: 
        usd: 0.00 
        unit: PER MONTH 
       bullets: 
       - Basic Unlimited 
     dashboardClient: 
      id: api-marketpace 
      secret: secret 
      redirectUrl: https://api.cf.com/ 

ответ

2

Это не будет работать.

Файл manifest.yml используется исключительно cf CLI для предоставления опций при нажатии приложений на CF. Развернутые приложения никогда не видят этот файл или его содержимое. На самом деле платформа CF никогда не видит файл или его содержимое - он чисто обрабатывается CLI на стороне клиента.

application.yml файл используется Spring Boot, а содержимое предоставляется приложению через @ConfigurationProperties и другими способами.

Это две совершенно разные концепции и механизмы, которые используют формат данных YAML.

+0

Спасибо Скотту за ваш быстрый ответ. В любом случае мы можем отправить элементы каталога как переменную среды через файл манифеста. Если это просто строка, которую я могу отправить этому свойству в свой класс конфигурации через файл манифеста, но поскольку элементы каталога являются списком, я не уверен, как отправить его в качестве переменной среды. Дайте мне знать, если есть какая-то возможность! – Dombe

+0

Вы можете указать env vars, которые будут установлены в приложении, используя блок «env» в manifest.yml, как вы делаете с env var «SPRING_PROFILES_DEFAULT: cloud» в приведенном выше примере. –

+0

Но как мы указываем элементы каталога как переменные среды? Я думаю, что все переменные среды имеют тип String, но элементы каталога - это список. – Dombe

Смежные вопросы