# 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
PICKLE_FILE = pickled

#  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
# Extensions from MIMOS
# put the IP address of your NTP server here
NTPSVR = 127.0.0.1
CUSTOM_TEMPLATES_DIR = /var/lib/tftpboot/templates

[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

#  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
