#
# 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.
#
# Creates an application with the following structure, with each entity (including the application) having 
# a policy with references to all other entities (including itself and the app) via config keys
#
#                              app
#                          (app policy)
#                               |
#                        -------|-------
#                        |             |
#                     entity1       entity2
#                   (e1 policy)   (e2 policy)
#                        |
#                 -------|-------
#                 |             |
#               child1        child2
#             (c1 policy)   (c2 policy)
#                 |
#          -------|-------
#          |             |
#       gchild1       gchild2
#     (g1 policy)   (g2 policy) 
name: test-referencing-policies
description: Test multi-layer application with each entity having a policy referencing all other entities
origin: https://github.com/apache/incubator-brooklyn
id: app1
brooklyn.policies:
  - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
    brooklyn.config:
      test.reference.app: $brooklyn:component("app1")
      test.reference.entity1: $brooklyn:component("e1")
      test.reference.entity2: $brooklyn:component("e2")
      test.reference.child1: $brooklyn:component("c1")
      test.reference.child2: $brooklyn:component("c2")
      test.reference.grandchild1: $brooklyn:component("gc1")
      test.reference.grandchild2: $brooklyn:component("gc2")
services:
- serviceType: org.apache.brooklyn.camp.brooklyn.ReferencingYamlTestEntity
  id: e1
  name: entity 1
  brooklyn.policies:
  - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
    brooklyn.config:
      test.reference.app: $brooklyn:component("app1")
      test.reference.entity1: $brooklyn:component("e1")
      test.reference.entity2: $brooklyn:component("e2")
      test.reference.child1: $brooklyn:component("c1")
      test.reference.child2: $brooklyn:component("c2")
      test.reference.grandchild1: $brooklyn:component("gc1")
      test.reference.grandchild2: $brooklyn:component("gc2")
  brooklyn.children:
    - serviceType: org.apache.brooklyn.camp.brooklyn.ReferencingYamlTestEntity
      id: c1
      name: child 1
      brooklyn.policies:
      - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
        brooklyn.config:
          test.reference.app: $brooklyn:component("app1")
          test.reference.entity1: $brooklyn:component("e1")
          test.reference.entity2: $brooklyn:component("e2")
          test.reference.child1: $brooklyn:component("c1")
          test.reference.child2: $brooklyn:component("c2")
          test.reference.grandchild1: $brooklyn:component("gc1")
          test.reference.grandchild2: $brooklyn:component("gc2")
      brooklyn.children:
      - serviceType: org.apache.brooklyn.camp.brooklyn.ReferencingYamlTestEntity
        id: gc1
        name: grandchild 1
        brooklyn.policies:
        - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
          brooklyn.config:
            test.reference.app: $brooklyn:component("app1")
            test.reference.entity1: $brooklyn:component("e1")
            test.reference.entity2: $brooklyn:component("e2")
            test.reference.child1: $brooklyn:component("c1")
            test.reference.child2: $brooklyn:component("c2")
            test.reference.grandchild1: $brooklyn:component("gc1")
            test.reference.grandchild2: $brooklyn:component("gc2")
      - serviceType: org.apache.brooklyn.camp.brooklyn.ReferencingYamlTestEntity
        id: gc2
        name: grandchild 2
        brooklyn.policies:
        - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
          brooklyn.config:
            test.reference.app: $brooklyn:component("app1")
            test.reference.entity1: $brooklyn:component("e1")
            test.reference.entity2: $brooklyn:component("e2")
            test.reference.child1: $brooklyn:component("c1")
            test.reference.child2: $brooklyn:component("c2")
            test.reference.grandchild1: $brooklyn:component("gc1")
            test.reference.grandchild2: $brooklyn:component("gc2") 
    - serviceType: org.apache.brooklyn.camp.brooklyn.ReferencingYamlTestEntity
      id: c2
      name: child 2
      brooklyn.policies:
      - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
        brooklyn.config:
          test.reference.app: $brooklyn:component("app1")
          test.reference.entity1: $brooklyn:component("e1")
          test.reference.entity2: $brooklyn:component("e2")
          test.reference.child1: $brooklyn:component("c1")
          test.reference.child2: $brooklyn:component("c2")
          test.reference.grandchild1: $brooklyn:component("gc1")
          test.reference.grandchild2: $brooklyn:component("gc2")
- serviceType: org.apache.brooklyn.camp.brooklyn.ReferencingYamlTestEntity
  id: e2
  name: entity 2
  brooklyn.policies:
  - policyType: org.apache.brooklyn.camp.brooklyn.TestReferencingPolicy
    brooklyn.config:
      test.reference.app: $brooklyn:component("app1")
      test.reference.entity1: $brooklyn:component("e1")
      test.reference.entity2: $brooklyn:component("e2")
      test.reference.child1: $brooklyn:component("c1")
      test.reference.child2: $brooklyn:component("c2")
      test.reference.grandchild1: $brooklyn:component("gc1")
      test.reference.grandchild2: $brooklyn:component("gc2")