# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

brooklyn.catalog:
    version: "0.13.0-SNAPSHOT" # BROOKLYN_VERSION
    itemType: entity
    items:
    - id: org.apache.brooklyn.entity.webapp.nodejs.NodeJsWebAppService
      iconUrl: classpath:///nodejs-logo.png
      item:
        type: org.apache.brooklyn.entity.webapp.nodejs.NodeJsWebAppService
        name: Node.JS Application
    - id: org.apache.brooklyn.entity.webapp.jboss.JBoss7Server
      iconUrl: classpath:///jboss_logo.png
      item:
        type: org.apache.brooklyn.entity.webapp.jboss.JBoss7Server
        name: JBoss Application Server 7
        description: AS7 - an open source Java application server from JBoss
    - id: org.apache.brooklyn.entity.proxy.nginx.UrlMapping
      item:
        type: org.apache.brooklyn.entity.proxy.nginx.UrlMapping
        name: URL Mapping
    - id: org.apache.brooklyn.entity.webapp.DynamicWebAppFabric
      item:
        type: org.apache.brooklyn.entity.webapp.DynamicWebAppFabric
        name: Dynamic Web App Fabric
    - id: org.apache.brooklyn.entity.proxy.nginx.NginxController
      iconUrl: classpath:///nginx-logo.jpeg
      item:
        type: org.apache.brooklyn.entity.proxy.nginx.NginxController
        name: Nginx Server
        description: A single Nginx server. Provides HTTP and reverse proxy services
    - id: org.apache.brooklyn.entity.webapp.jboss.JBoss6Server
      iconUrl: classpath:///jboss_logo.png
      item:
        type: org.apache.brooklyn.entity.webapp.jboss.JBoss6Server
        name: JBoss Application Server 6
        description: AS6 -  an open source Java application server from JBoss
    - id: org.apache.brooklyn.entity.webapp.tomcat.Tomcat8Server
      iconUrl: classpath:///tomcat-logo.png
      item:
        type: org.apache.brooklyn.entity.webapp.tomcat.Tomcat8Server
        name: Tomcat 8 Server
    - id: org.apache.brooklyn.entity.proxy.LoadBalancerCluster
      item:
        type: org.apache.brooklyn.entity.proxy.LoadBalancerCluster
        name: Load-balanced Cluster
        description: |
          A cluster of load balancers; configuring the cluster (through the LoadBalancer interface)
          will configure all load balancers in the cluster.
    - id: org.apache.brooklyn.entity.webapp.jetty.Jetty6Server
      iconUrl: classpath:///jetty-logo.png
      item:
        type: org.apache.brooklyn.entity.webapp.jetty.Jetty6Server
        name: Jetty6 Server
        description: Old version (v6 @ Mortbay) of the popular Jetty webapp container
    - id: org.apache.brooklyn.entity.webapp.DynamicWebAppCluster
      item:
        type: org.apache.brooklyn.entity.webapp.DynamicWebAppCluster
        name: Dynamic Web-app Cluster
        description: A cluster of web-apps, which can be dynamically re-sized; this does not include a load-balancer
    - id: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
      iconUrl: classpath:///tomcat-logo.png
      item:
        type: org.apache.brooklyn.entity.webapp.tomcat.TomcatServer
        name: Tomcat 7 Server
    - id: org.apache.brooklyn.entity.dns.geoscaling.GeoscalingDnsService
      iconUrl: classpath:///geoscaling-logo.gif
      item:
        type: org.apache.brooklyn.entity.dns.geoscaling.GeoscalingDnsService
        name: Geoscaling DNS Service
        description: A geo-DNS service using geoscaling.com
    - id: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
      item:
        type: org.apache.brooklyn.entity.webapp.ControlledDynamicWebAppCluster
        name: Controlled Dynamic Web-app Cluster
        description: A cluster of load-balanced web-apps, which can be dynamically re-sized
