This package will install the Virtual Infrastructure Deployment (VID) war to the local tomcat server.
The Tomcat server is marked as a dependency of this package and will be installed automatically on the
target server if it has not already been installed.  The current version of Tomcat used by VID
is 8.0.36.  MariaDB is also necessary for VID and can be installed by whichever method you choose.

The following are variables that can be set to customize your installation of VID:

Variable			Default			Description

ASDC_CLIENT_REST_AUTH		unset			Basic authentication header value (e.g. Basic asdfoijwelkjsg=)
ASDC_CLIENT_REST_HOST		unset			Host where the SDC Catalog Service is running
ASDC_CLIENT_REST_PORT		8080			Port where the SDC Catalog Service is running
ASDC_CLIENT_TYPE		REST			Set to IN_MEMORY for testing, REST for connecting with an actual SDC Catalog Service

MSO_DME2_CLIENT_READ_TIMEOUT	unset			Time in ms before DME2 MSO read requests timeout
MSO_DME2_CLIENT_TIMEOUT		unset			Time in ms before DME2 MSO requests timeout
MSO_DME2_ENABLED		unset			Whether the enable the MSO DME2 client or not
MSO_DME2_SERVER_URL		unset			The server URL for connecting to the MSO service
MSO_POLLING_INTERVAL_MSECS	10000			The interval at which to poll MSO for orchestration requests
VID_MSO_PASS			unset			The password for connecting with the MSO service
VID_MSO_SERVER_URL		unset			The server URL for connecting with the MSO service
VID_MSO_USER			unset			The user name for connecting with the MSO service

VID_LOG_DIR			${ROOT_DIR}/logs	The directory to store log files in 
VID_LOG_LEVEL			INFO			The level at which to log (follows logback logging levels)
VID_ECOMP_REDIRECT_URL		https://portal.openecomp.org/ecompportal/ecompportal/process_csp		See ECOMP SDK Documentation
VID_ECOMP_REST_URL		https://portal.openecomp.org/ecompportal/auxapi		See ECOMP SDK Documentation
VID_ENDPOINT_NAME		vid			http://{host}:{port}/{VID_ENDPOINT_NAME}

VID_MYSQL_HOST			unset			The host where the VID MariaDB instance is running
VID_MYSQL_MAXCONNECTIONS	5			The maximum connections to use to connect to the MariaDB instance
VID_MYSQL_PORT			3306			The port where the VID MariaDB instance is running
VID_MYSQL_DBNAME		vid_portal		The database name (i.e. CREATE DATABASE ${VID_MYSQL_DBNAME}
VID_MYSQL_USER			vidadmin		The user to connect as to the MariaDB instance
VID_MYSQL_PASS			unset			The password for the ${VID_MYSQL_USER} @ ${VID_MYSQL_HOST}

VID_AAI_HOST			unset			The host where the A&AI service is running
VID_AAI_PORT			8443			The port where the A&AI service is running
VID_TRUSTSTORE_PASS		unset			The password for the VID truststore (A&AI client)
VID_TRUSTSTORE_FILE		unset			The location on the file system of the truststore (A&AI client)
AAI_TRUSTSTORE_FILENAME		tomcat_keystore		A file name
AAI_TRUSTSTORE_PASSWD_X		(dev env creds)		A password
AAI_KEYSTORE_FILENAME		aai-client-cert.p12	A file name
AAI_KEYSTORE_PASSWD_X		(dev env creds)		A password

VID_UEB_URL_LIST		ueb.openecomp.org		The hosts where UEB is running
VID_UEB_CONSUMER_GROUP		VID			The UEB consumer group name to use
VID_ECOMP_PORTAL_INBOX_NAME	ECOMP-PORTAL-INBOX-DEV-LOCAL		A UEB Topic to send messages to the ECOMP portal on
VID_UEB_APP_KEY			sYH0NJnsKmJC1B2A			The UEB App Key (mandatory)
VID_UEB_APP_SECRET		YOtknsT2wVFz9WISlSPDaAtd		The UEB App Secret
VID_UEB_APP_MAILBOX_NAME	ECOMP-PORTAL-OUTBOX-90			A UEB Topic to listen for messages from the ECOMP portal on
VID_UEB_LISTENERS_ENABLE	false			Enable the UEB listeners for the specified mailboxes (In 1610, this should always be false)
