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


[globals]
#global settings in cloudstack
expunge.delay=60
expunge.interval=60
storage.cleanup.interval=300
account.cleanup.interval=600
expunge.workers=3
workers=10
vm.allocation.algorithm=random
vm.op.wait.interval=5
guest.domain.suffix=devcloud.kvm
instance.name=vm
check.pod.cidrs=true
secstorage.allowed.internal.sites=10.147.28.0/24
[environment]
dns=8.8.8.8
mshost=127.0.0.1
mshost.user=root
mshost.passwd=password
mysql.host=127.0.0.1
mysql.cloud.user=cloud
mysql.cloud.passwd=cloud
[cloudstack]
#guest VLAN
pnet.vlan=3900-3919
pnet2.vlan=3920-3939
#management network
private.gateway=192.168.56.1
private.pod.startip=192.168.56.200
private.pod.endip=192.168.56.249
private.netmask=255.255.255.0
#public network
public.gateway=10.0.3.2
public.vlan=31
public.vlan.startip=10.0.3.100
public.vlan.endip=10.0.3.199
public.netmask=255.255.255.0
#hypervisor host information
hypervisor=KVM
host=192.168.56.10
host.password=password
#storage pools
primary.pool=nfs://192.168.56.10/opt/storage/primary
secondary.pool=nfs://192.168.56.10/opt/storage/secondary
