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

JENKINS_USERNAME=
JENKINS_PASSWORD=
USERNAME=
PASSWORD=
NOT_IAM_USERNAME=
NOT_IAM_PASSWORD=
NOT_DLAB_USERNAME=
NOT_DLAB_PASSWORD=
JENKINS_JOB_URL=
USER_FOR_ACTIVATE_KEY=
PASSWORD_FOR_ACTIVATE_KEY=

ACCESS_KEY_PRIV_FILE_NAME=
ACCESS_KEY_PUB_FILE_NAME=

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=
AWS_REQUEST_TIMEOUT=10s

TIMEOUT_JENKINS_AUTOTEST=20m
TIMEOUT_UPLOAD_KEY=40m
TIMEOUT_SSN_STARTUP=60m

CLUSTER_OS_USERNAME=dlab-user
CLUSTER_OS_FAMILY=debian

#NOTEBOOKS_TO_TEST=\
#		[\
#			{\
#				"notebook_template": "jupyter",\
#				"data_engine_type": "dataengine",\
#				"full_test": false,\
#				"timeout_notebook_create": "60m",\
#				"timeout_notebook_startup": "20m",\
#				"timeout_notebook_shutdown": "10m",\
#				"timeout_cluster_create": "60m",\
#				"timeout_cluster_terminate": "20m",\
#				"timeout_lib_groups": "5m",\
#				"timeout_lib_list": "5m",\
#				"timeout_lib_install": "15m"\
#			},\
#			{\
#				"notebook_template": "rstudio",\
#				"data_engine_type": "dataengine-service"\
#			},\
#                       {\
#                               "notebook_template": "zeppelin",\
#                               "data_engine_type": "dataengine-service"\
#                       }\
#		]

NOTEBOOKS_TO_TEST=[\
                        {\
                                "notebook_template":"jupyter",\
                                "data_engine_type":"dataengine",\
                                "full_test":true\
                        },\
                        {\
                                "notebook_template":"jupyter",\
                                "data_engine_type":"dataengine-service"\
                        }\
                ]
JUPYTER_SCENARIO_FILES=
S3_TESTS_TEMPLATE_BUCKET_NAME=

#RUN_MODE_LOCAL=true
#USE_JENKINS=false
#SSN_URL=https://localhost:8443
#SERVICE_BASE_NAME=
