# 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.

# This is a stock devcloud config converted from the file
# tools/devcloud/devcloud.cfg.

{
    "zones": [
        {
            "name": "DevCloudKVM0",
            "physical_networks": [
                {
                    "broadcastdomainrange": "Zone",
                    "name": "test-network",
                    "traffictypes": [
                        {
                            "typ": "Guest"
                        },
                        {
                            "typ": "Management"
                        }
                    ],
                    "providers": [
                        {
                            "broadcastdomainrange": "ZONE",
                            "name": "VirtualRouter"
                        },
                        {
                            "broadcastdomainrange": "Pod",
                            "name": "SecurityGroupProvider"
                        }
                    ]
                }
            ],
            "dns2": "8.8.4.4",
            "dns1": "8.8.8.8",
            "securitygroupenabled": "true",
            "localstorageenabled": "true",
            "networktype": "Basic",
            "pods": [
                {
                    "endip": "192.168.100.250",
                    "name": "test00",
                    "startip": "192.168.100.200",
                    "guestIpRanges": [
                        {
                            "startip": "192.168.100.100",
                            "endip": "192.168.100.199",
                            "netmask": "255.255.255.0",
                            "gateway": "192.168.100.1"
                        }
                    ],
                    "netmask": "255.255.255.0",
                    "clusters": [
                        {
                            "clustername": "test000",
                            "hypervisor": "KVM",
                            "hosts": [
                                {
                                    "username": "root",
                                    "url": "http://192.168.100.10/",
                                    "password": "password"
                                }
                            ],
                            "clustertype": "CloudManaged"
                        }
                    ],
                    "gateway": "192.168.100.1"
                }
            ],
            "internaldns1": "192.168.100.10",
            "secondaryStorages": [
                {
                    "url": "nfs://192.168.100.10:/nfs/secondary",
                    "provider": "NFS"
                }
            ]
        }
    ],
    "logger": [
        {
            "name": "TestClient",
            "file": "/tmp/testclient.log"
        },
        {
            "name": "TestCase",
            "file": "/tmp/testcase.log"
        }
    ],
    "mgtSvr": [
        {
            "mgtSvrIp": "127.0.0.1",
            "port": 8096,
            "hypervisor": "kvm"
        }
    ],
    "dbSvr":
        {
	    "dbSvr": "127.0.0.1",
	    "port": 3306,
	    "user": "cloud",
	    "passwd": "cloud",
	    "db": "cloud"
        }
}
