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

#   Installation Directory
[home]
INSTALL_BASE_DIR = /usr/local/tashi

#  Logfile
[logging]
LOG_FILE = /var/tmp/zoni_logfile.txt

[management]
#  Specify data store
INFO_STORE = sql
USER_MANAGEMENT = ldap

#  DB host
[dbConnection]
DB_HOST = xx_hostname_or_ip_
DB_PORT = 3306
DB_USER = xx_db_username_xx
DB_INST = xx_db_inst_xx
DB_PASSWORD = "xx_db_password_xx"

#  Image store
#  IP address of the server hosting the physical disk images accessible from 
[imageStore]
IMAGE_SERVER_IP = IP_OF_IMAGE_STORE
FS_IMAGES_BASE_DIR = fsimages #  Relative to the web root


#  PXE
[pxe]
TFTP_ROOT_DIR = /var/lib/tftpboot
TFTP_IMAGE_DIR = /var/lib/tftpboot/pxelinux.cfg
TFTP_BOOT_OPTIONS_DIR = /var/lib/tftpboot/pxelinux.cfg/boot_options_zoni
TFTP_UPDATE_FILE = /var/lib/tftpboot/pxelinux.cfg/update.zoni
TFTP_BASE_FILE = /var/lib/tftpboot/pxelinux.cfg/base.zoni
TFTP_BASE_MENU_FILE = /var/lib/tftpboot/pxelinux.cfg/base-menu
PXE_SERVER_IP = IP_OF_PXE_SERVER_IN_DOMAIN_0
#  Must be relative to TFTP_ROOT_DIR
INITRD_ROOT = builds/initrd
KERNEL_ROOT = builds/kernel

[www]
WWW_DOCUMENT_ROOT = /var/www
REGISTRATION_BASE_DIR = zoni #  Relative to the web root

[snmp]
SNMP_COMMUNITY = xx_snmp_community_name_xx

#  Domain Config
[domain]
domainDescription = "/usr/local/tashi/etc/ZoniDomains.xml"
ZONI_HOME_DOMAIN = 1  #  Default domain for most switches
ZONI_HOME_NETWORK = 10.10.0.0/20
ZONI_IPMI_NETWORK = 10.10.16.0/20

[vlan]
VLAN_MAX = 4095

[hardware]
#  Hardware control available for the cluster 
HARDWARE_CONTROL = {"ipmi": {"class":"zoni.hardware.ipmi.Ipmi"}, "drac": {"class":"zoni.hardware.delldrac.dellDrac"}, "pdu":{"class": "zoni.hardware.raritanpdu.raritanDominionPx"}, "dellswitch" : {"class":"zoni.hardware.dellswitch.HwDellSwitch", "accessmode" : "ssh"}}
HARDWARE_PDU = "raritan"
HARDWARE_DRAC = "DELL DRAC"

[DhcpDns]
dnsEnabled = True
reverseDns = True
#  Key file must be in the same directory or this will get denied
#dnsKeyFile = xx_Kname.+157+36480.private_xx
dnsKeyName = xx_dnsKeyName__xx
dnsSecretKey = xx_secretkey_xx
dnsServer = xx_dns_server_ip_xx xx_port_xx
dnsDomain = xx_fqdn_xx
dnsExpire = 60
dhcpServer = xx_dhcpserver_host_or_ip_xx
dhcpKeyName = xx_dhcpservername_xx
dhcpSecretKey = xx_secretkey_xx

#  Domain Config
[domain]
domainDescription = "/usr/local/tashi/etc/ZoniDomains.xml"
ZONI_HOME_DOMAIN = 1  #  Default domain for most switches
ZONI_HOME_NETWORK = 10.10.0.0/20
ZONI_IPMI_NETWORK = 10.10.16.0/20

#  Logging
[loggers]
keys=root

[handlers]
keys=consoleHandler, fileHandler

[formatters]
keys=standardFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler, fileHandler

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=standardFormatter
args=(sys.stdout,)

[handler_fileHandler]
class = FileHandler
level = NOTSET
formatter = standardFormatter
args = ("/var/tmp/zoni_logfile.txt",)

[formatter_standardFormatter]
format=%(asctime)s [%(name)s:%(levelname)s] %(message)s
