# 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.
{
    "zones": [
        {
            "name": "SG-TF-Zone",
            "dns1": "8.8.8.8",
            "physical_networks": [
                {
                    "broadcastdomainrange": "Zone",
                    "name": "SG-TF-PhysicalNetwork",
                    "traffictypes": [
                        {
                            "typ": "Guest",
                            "kvm": "vhost0"
                        },
                        {
                            "typ": "Management",
                            "kvm": "vhost0"
                        }
                    ],
                    "providers": [
                        {
                            "broadcastdomainrange": "ZONE",
                            "name": "Tungsten"
                        }
                    ],
                    "isolationmethods": [
                             "TF"
                    ]
                }
            ],
            "securitygroupenabled": "true",
            "tungstenprovider": {
                "name": "tf-provider",
                "hostname": "192.168.5.203",
                "gateway": "192.168.5.203"
            },
            "ipranges": [
                {
                    "startip": "192.168.3.100",
                    "endip": "192.168.3.200",
                    "netmask": "255.255.255.0",
                    "vlan": "untagged",
                    "gateway": "192.168.3.1"
                }
            ],
            "networktype": "Advanced",
            "pods": [
                {
                    "endip": "192.168.8.200",
                    "name": "SG-TF-Pod",
                    "startip": "192.168.8.100",
                    "netmask": "255.255.255.0",
                    "clusters": [
                        {
                            "clustername": "SG-TF-Cluster",
                            "hypervisor": "KVM",
                            "hosts": [
                                {
                                    "username": "root",
                                    "url": "http://192.168.5.203",
                                    "password": "password"
                                },
                                {
                                    "username": "root",
                                    "url": "http://192.168.5.202",
                                    "password": "password"
                                }
                            ],
                            "clustertype": "CloudManaged",
                            "primaryStorages": [
                                {
                                    "url": "nfs://192.168.5.203:/export/primary",
                                    "name": "SG-TF-PS"
                                }
                            ]
                        }
                    ],
                    "gateway": "192.168.8.1"
                }
            ],
            "internaldns1": "192.168.5.204",
            "secondaryStorages": [
                {
                    "url": "nfs://192.168.5.203:/export/secondary",
                    "provider" : "NFS"
                }
            ],
            "networkofferingname": "DefaultTungstenSharedNetworkOfferingWithSGService"
        }
    ],
    "dbSvr": {
        "dbSvr": "192.168.5.203",
        "passwd": "password",
        "db": "cloud",
        "port": 3306,
        "user": "cloud"
    },
    "logger":
        {
            "LogFolderPath": "/tmp"
        }
    ,
    "mgtSvr": [
        {
            "mgtSvrIp": "192.168.5.203",
            "passwd": "password",
            "user": "root",
            "port": 8888,
            "hypervisor": "KVM",
            "useHttps": "False",
            "certCAPath":  "NA",
            "certPath":  "NA"
        }
    ]
}
