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

# TODO: Change ACCESS_KEY/ SECRET_KEY to your credentials on the object store

{
    "zones": [
        {
            "name": "DevCloud0",
            "enabled" : "True",
            "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.56.220",
                    "name": "test00",
                    "startip": "192.168.56.200",
                    "guestIpRanges": [
                        {
                            "startip": "192.168.56.100",
                            "endip": "192.168.56.199",
                            "netmask": "255.255.255.0",
                            "gateway": "192.168.56.1"
                        }
                    ],
                    "netmask": "255.255.255.0",
                    "clusters": [
                        {
                            "clustername": "test000",
                            "hypervisor": "XenServer",
                            "hosts": [
                                {
                                    "username": "root",
                                    "url": "http://192.168.56.10/",
                                    "password": "password"
                                }
                            ],
                            "clustertype": "CloudManaged"
                        }
                    ],
                    "gateway": "192.168.56.1"
                }
            ],
            "internaldns1": "192.168.56.1",
            "cacheStorages": [
                {
                    "url": "nfs://192.168.56.10/opt/storage/secondary",
                    "details": {
                        "url": "nfs://192.168.56.10/opt/storage/secondary",
                        "__name__": "cachestorage"
                    },
                    "provider": "NFS"
                }
            ],
            "secondaryStorages": [
                {
                    "details": {
                        "maxerrorretry": "0",
                        "name": "acstest-objectstore",
                        "usehttps": "true",
                        "accesskey": "ACCESS_KEY",
                        "bucket": "acstest.cloudstack.org",
                        "secretkey": "SECRET_KEY",
                        "endpoint": "s3.amazonaws.com",
                        "connectiontimeout": "300000",
                        "__name__": "objectstore"
                    },
                    "name": "acstest-objectstore",
                    "provider": "S3"
                }
            ]
         }
    ],
    "logger":
    {
            "LogFolderPath": "/tmp"
    },
    "mgtSvr": [
        {
            "mgtSvrIp": "127.0.0.1",
            "port": 8096
        }
    ],
    "dbSvr":
        {
	    "dbSvr": "127.0.0.1",
	    "port": 3306,
	    "user": "cloud",
	    "passwd": "cloud",
	    "db": "cloud"
        }
}
