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

#---- List of all dlab parameters (commented ones are passing from UI/Jenkins) ----#


#--- [conf] section contains all common for all templates parameters ---#
[conf]
### Unique infrastructure name
# service_base_name =
### DLAB ssh user name ('dlab-user' by default)
os_user = dlab-user
### OS that supported by dlab (debian/redhat)
# os_family =
### Cloud provider that supported by dlab (aws/azure)
# cloud_provider =
### Admin ssh key name in cloud provider
# key_name =
### Directory in Docker where key is uploaded
key_dir = /root/keys/
### Type of the provisionong stage (should be change for 'prod')
lifecycle_stage = dev
### The name of user for tag, which will be set for all resources
# tag_resource_id = user:tag
### Pypi mirror for China
pypi_mirror = pypi.doubanio.com
### Name of own GitLab SSL certificate
gitlab_certfile = dlab-gitlab.crt
### Enable or Disable creating image at first time
image_enabled = true
###Enable or Disable shared images
shared_image_enabled = true
### CIDR of VPC
vpc_cidr = '172.31.0.0/16'
### CIDR of second VPC
vpc2_cidr = '172.32.0.0/16'
### Enable or disable duo VPC mode(true|false)
duo_vpc_enable = falseF
### Range of subnets which will be using for user's environments
# user_subnets_range =
### Comma-separated CIDR of IPs which will have access to SSN and Edge nodes
allowed_ip_cidr = '0.0.0.0/0'
### Type of network. Define in which network DLab will be deployed. Possible options: public|private
network_type = public
### Additional tags in format 'Key1:Value1;Key2:Value2'
# additional_tags =
pip_version = 9.0.3
### Billing tag key
billing_tag_key = product
### Billing tag value
billing_tag_value = dlab
### Enable or disable Step certificates
stepcerts_enabled = false
### Step root certificate in base64 format
# stepcerts_root_ca =
### Step certificates kid
# stepcerts_kid =
### Step certificates kid password
# stepcerts_kid_password =
### Step certificates CA URL
# stepcerts_ca_url =
### Prefix of the private subnet
private_subnet_prefix = 24
### Range of subnets defined by user
# user_subnets_range = 172.31.0.0/24 - 172.31.50.0/24

#--- [aws] section contains all common parameters related to Amazon ---#
[aws]
### Amazon iam user access_key
# access_key =
### Amazon iam user secret_access_key
# secret_access_key =
### Id of the security group for SSN instance
# security_groups_ids =
### Id of the subnet for SSN and EDGE provisioning
# subnet_id =
### Id of the subnet for notebooks and compute engines
# subnet2_id =
### Id of the vpc for whole dlab provisioning
# vpc_id =
### Id of the secondary vpc for notebooks and compute engines
# vpc2_id =
### Amazon peering connection id
# peering_id =
### Amazon iam user name
# iam_user =
### EC2 instance type for notebook
# notebook_instance_type =
### EC2 instance type for SSN
ssn_instance_size = t2.large
### EC2 instance type for EDGE
edge_instance_size = t2.medium
### Amazon region name for whole dlab provisioning
region = us-west-2
### Amazon zone letter for ssn, edge and notebook subnet provisioning
# zone =
### Amazon ami name based on debian conf_os_family for all dlab instances
debian_image_name = ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20190212
### Amazon ami name based on RedHat conf_os_family for all dlab instances
redhat_image_name = RHEL-7.4_HVM-20180103-x86_64-2-Hourly2-GP2
### Amazon account ID
# account_id =
### Amazon billing bucket
# billing_bucket =
### Path to billing reports in S3 bucket
# report_path =
### Predefined policies for users instances
# user_predefined_s3_policies =


#--- [azure] section contains all common parameters related to Azure ---#
[azure]
### Region
# region =
### Resource Group name
# resource_group_name =
### VPC name
# vpc_name =
### Subnet name
# subnet_name =
### EC2 instance type for SSN
ssn_instance_size = Standard_DS2_v2
### Instance type for EDGE
edge_instance_size = Standard_DS1_v2
### Master node size for Data Engine
# dataengine_master_size =
### Slave node size for Data Engine
# dataengine_slave_size =
### Azure image name based on debian conf_os_family for all dlab instances
debian_image_name = Canonical_UbuntuServer_16.04-LTS
### Azure image name based on RedHat conf_os_family for all dlab instances
redhat_image_name = RedHat_RHEL_7.3
### Azure AD user name
# user_name =
### Azure AD user refresh token
# user_refresh_token =
### Full path to Azure credentials JSON file
#auth_path =
### Azure offer number
# offer_number =
### Azure billin currency code
# currency =
### Azure language locale
locale = en-US
### Azure region code
# region_info =
### Azure datalake to create
datalake_enable = false
### Azure login application ID
# application_id =

[gcp]
### GCP project ID
# project_id =
### Full path to service account JSON
# service_account_path =
### Name of the vpc for whole DLab provisioning
# vpc_name =
### Name of the subnet for SSN and EDGE provisioning
# subnet_name =
### Names of the firewall rules for SSN
# firewall_rules =
### GCP region name for whole dlab provisioning
region = us-west1
### GCP zone name for whole dlab provisioning
zone = us-west1-a
### GCP ami name based on debian conf_os_family for all dlab instances
debian_image_name = /projects/ubuntu-os-cloud/global/images/ubuntu-1604-xenial-v20190807
### GCP ami name based on RedHat conf_os_family for all dlab instances
redhat_image_name =
### Prefix of the private subnet
### Instance type for EDGE
ssn_instance_size = n1-standard-2
### Instance type for EDGE
edge_instance_size = n1-standard-1
### GPU type for Tensor/DeepLaerning notebooks
gpu_accelerator_type = nvidia-tesla-k80

#--- [ssn] section contains all parameters that are using for self-service node provisioning ---#
[ssn]
### System path on SSN instance where dlab will be installed
dlab_path = /opt/dlab/
### Elastic IP which will be associated with SSN node
# elastic_ip =
### Version of Docker to be installed on SSN
docker_version = 18.06.3
### Name of hosted zone for Route53
# hosted_zone_name =
### ID of hosted zone
# hosted_zone_id =
### Subdomain name
# subdomain =
### Role ARN for creating Route53 record
# assume_role_arn =
### URL to Nexus repository
nexus_url = ec2-35-163-186-140.us-west-2.compute.amazonaws.com:8083
### Username for GCR authentication
# gcr_username =
### Base64 encrypted json key for GCR authentication
# gcr_creds =

#--- [edge] section contains all parameters that are using for edge node provisioning ---#
[edge]
### User name for exploratory environment being deployed
# user_name =
### Elastic IP which will be associated with Edge node
# elastic_ip =

#--- [notebook] section contains all parameters that are using for all notebooks provisioning ---#
[notebook]
### Notebook EC2 instance name
# instance_name =
### Size of the additional volume for notebook instance
disk_size = 30
### Version of Apache Spark to be installed on notebook
spark_version = 2.4.4
### Version of Apache Hadoop to be installed on notebook
hadoop_version = 2.7
### Version of Jupyter to be installed on notebook
jupyter_version = 6.0.2
### Version of TensorFlow to be installed on notebook
tensorflow_version = 1.8.0
### Version of Zeppelin to be installed on notebook
zeppelin_version = 0.8.2
### Version of Rstudio to be installed on notebook
rstudio_version = 1.2.5033
### Version of Scala to be installed on notebook
scala_version = 2.12.8
### Version of Livy top be installed on notebook
livy_version = 0.3.0
### If it is true, Livy will be used on Zeppelin notebook
multiple_clusters = false
### R China mirror
r_mirror = http://mirror.lzu.edu.cn/CRAN/
### NVidia driver version for Tensor/DeepLearning notebooks
nvidia_version = 418.43
### Caffe library version for DeepLearning notebook
caffe_version = 1.0
### Caffe2 library version for DeepLearning notebook
caffe2_version = 0.4.0
### Cmake version for DeepLearning notebook
cmake_version = 3.11.3
### CNTK library version for DeepLearning notebook
### All releases 2.4+ officially only support Ubuntu 16.04.
cntk_version = 2.3.1
### MXNet library version for DeepLearning notebook
mxnet_version = 1.3.1
### Keras library version for Tensor/DeepLearning notebook
keras_version = 2.1.6
### Theano library version for Tensor/DeepLearning notebook
theano_version = 1.0.3
### Version of CUDA
cuda_version = 9.0
### Name of CUDA file
cuda_file_name = cuda_9.0.176_384.81_linux-run
### Version of CUDNN
cudnn_version = 7.1.4
### Name of CUDNN file
cudnn_file_name = cudnn-9.0-linux-x64-v7.1.tgz
### R enabled on Jupyter/Zeppelin notebook
r_enabled = true
### Temporary fixed python libraries due to dependencies
tornado_version = 4.5.3
ipykernel_version = 4.8.2
### Version of ungit if previous needed. Use latest as default.
ungit_version = 1.4.36
### Numpy version
numpy_version = 1.14.3
### Apache Ivy version
ivy_version = 2.4.0
### Matplotlib version
matplotlib_version = 2.0.2
### JupyterLab image
jupyterlab_image = odahu\\/base-notebook:1.1.0-rc8
### Superset version
superset_version = 0.35.1

#--- [emr] section contains all parameters that are using for emr provisioning ---#
[emr]
### EMR cluster namr
# cluster_name =
### Period of time while EMR being provisioned (default is 1500)
# timeout =
### Amount of ENR nodes
# instance_count =
### EC2 instance type for master node
# master_instance_type =
### EC2 instance type for all slaves nodes
# slave_instance_type =
### EMR version
# version =
### EMR instance role name
ec2_role = EMR_EC2_DefaultRole
### EMR role name
service_role = EMR_DefaultRole
###
excluded_spark_properties = '"spark.master", "spark.eventLog.enabled", "spark.eventLog.dir", "spark.history.fs.logDirectory", "spark.sql.warehouse.dir", "spark.driver.memory", "spark.executor.extraLibraryPath", "spark.executor.extraClassPath"'
### Enable/Disable EC2 Spot instances for EMR slaves
slave_instance_spot = True
### Percentage of the EC2 price
slave_instance_spot_pct_price = 70

#--- [dataengine] section contains all parameters that are using for dataengine provisioning ---#
[dataengine]
### Count of slave nodes for Data Engine
# instance_count =
### Type of notebooks for creating Data Engine from notebook images
image_notebooks = jupyter,jupyterlab,rstudio,zeppelin,tensor,tensor-rstudio,deeplearning
### Persent of RAM allocated for an operating system
os_memory = 75
### Explicit allocation RAM for an operating system
os_expl_memory = 3500
### Depending on RAM size on instance, this parameter determines size of RAM when explicit allocation RAM is used
expl_instance_memory = 8000

#--- [odahu] odahuflow parameters ---#
[odahu]
###
allowed_cidr = 0.0.0.0/0
###
dns_zone_name = develop-dlabanalytics-com
###
docker_repo = odahu
###
cidr = 172.31.0.0/24
###
grafana_admin = grafana_admin
###
initial_node_count = 6
###
istio_helm_repo = https://storage.googleapis.com/istio-release/releases/1.2.2/charts
###
k8s_version = 1.14
###
helm_repo =  https://raw.githubusercontent.com/odahu/odahu-helm/master
###
jupyterhub_enabled = true
###
automation_version = 1.1.0
###
infra_version = 1.1.0
###
ui_version = 1.1.0
###
examples_version = 1.1.0
###
odahuflow_version = 1.1.0
###
mlflow_toolchain_version = 1.1.0
###
jupyterlab_version = 1.1.0
###
packager_version = 1.1.0
###
oauth_mesh_enabled = true
###
node_version = 1.13.12-gke.2
###
pods_cidr = 10.42.0.0/17
###
root_domain = develop.dlabanalytics.com
###
service_cidr = 10.42.128.0/20
###
dns_project_id = or2-msq-epmc-dlab-t1iylu
###
infra_vpc_peering = 0
### Link to Odahuflow deploy image
deploy_image = gcr.io/or2-msq-epmd-legn-t1iylu/odahu/odahu-flow-automation:1.1.0
###
opa_policy = cGFja2FnZSBvZGFodQoKIyByb2xlcy5yZWdvCgphZG1pbiA6PSAiYWRtaW4iCmRhdGFfc2NpZW50aXN0IDo9ICJkYXRhX3NjaWVudGlzdCIKCiMgcmJhYy5yZWdvCgpyYmFjIDo9IHsKCWRhdGFfc2NpZW50aXN0OiBbCiAgICAJWyIqIiwgImFwaS92MS9tb2RlbC9kZXBsb3ltZW50LioiXSwKICAgIAlbIioiLCAiYXBpL3YxL21vZGVsL3BhY2thZ2luZy4qIl0sCiAgICAJWyIqIiwgImFwaS92MS9tb2RlbC90cmFpbmluZy4qIl0sCiAgICAJWyJHRVQiLCAiYXBpL3YxL2Nvbm5lY3Rpb24uKiJdLAogICAgCVsiUE9TVCIsICJhcGkvdjEvY29ubmVjdGlvbi4qIl0sCiAgICAJWyJHRVQiLCAiYXBpL3YxL3BhY2thZ2luZy9pbnRlZ3JhdGlvbi4qIl0sCiAgICAJWyJHRVQiLCAiYXBpL3YxL3Rvb2xjaGFpbi9pbnRlZ3JhdGlvbi4qIl0KICAgIF0sCiAgYWRtaW4gOiBbCiAgICAgIFsiLioiLCAiLioiXQogIF0KfQoKIyBpbnB1dF9tYXBwZXIKCnJvbGVzX21hcCA9IHsKCSJvZGFodV9hZG1pbiI6IGFkbWluLAogICAgIm9kYWh1X2RhdGFfc2NpZW50aXN0IjogZGF0YV9zY2llbnRpc3QKfQoKand0ID0gaW5wdXQuYXR0cmlidXRlcy5tZXRhZGF0YV9jb250ZXh0LmZpbHRlcl9tZXRhZGF0YVsiZW52b3kuZmlsdGVycy5odHRwLmp3dF9hdXRobiJdLmZpZWxkcy5qd3RfcGF5bG9hZAoKa2V5Y2xvYWtfdXNlcl9yb2xlc1tyb2xlXXsKCXJvbGUgPSBqd3QuS2luZC5TdHJ1Y3RWYWx1ZS5maWVsZHMucmVhbG1fYWNjZXNzLktpbmQuU3RydWN0VmFsdWUuZmllbGRzLnJvbGVzLktpbmQuTGlzdFZhbHVlLnZhbHVlc1tfXS5LaW5kLlN0cmluZ1ZhbHVlCn0KCnVzZXJfcm9sZXNbcm9sZV17Cglyb2xlID0gcm9sZXNfbWFwW2tleWNsb2FrX3VzZXJfcm9sZXNbX11dCn0KCgpwYXJzZWRfaW5wdXQgPSB7CgkiYWN0aW9uIjogaW5wdXQuYXR0cmlidXRlcy5yZXF1ZXN0Lmh0dHAubWV0aG9kLAogICJyZXNvdXJjZSI6IGlucHV0LmF0dHJpYnV0ZXMucmVxdWVzdC5odHRwLnBhdGgsCiAgInVzZXIiOiB7CiAgICAicm9sZXMiOiB1c2VyX3JvbGVzCiAgfQp9CgoKIyBjb3JlCgpkZWZhdWx0IGFsbG93ID0gZmFsc2UKYWxsb3cgewoJYW55X3VzZXJfcm9sZSA6PSBwYXJzZWRfaW5wdXQudXNlci5yb2xlc1tfXQogICAgYW55X3Blcm1pc3Npb25fb2ZfdXNlcl9yb2xlIDo9IHJiYWNbYW55X3VzZXJfcm9sZV1bX10KICAgIGFjdGlvbiA6PSBhbnlfcGVybWlzc2lvbl9vZl91c2VyX3JvbGVbMF0KICAgIHJlc291cmNlIDo9IGFueV9wZXJtaXNzaW9uX29mX3VzZXJfcm9sZVsxXQoKICAgIHJlX21hdGNoKGFjdGlvbiwgcGFyc2VkX2lucHV0LmFjdGlvbikKICAgIHJlX21hdGNoKHJlc291cmNlLCBwYXJzZWRfaW5wdXQucmVzb3VyY2UpCn0=
### TLS Certificate for Odahu cluster
# tls_crt =
### TLS Key for Odahu cluster
# tls_key =
### Odahu private repository base64 encoded password
# docker_password =
### KeySecret for Odahuflow examples git
# keysecret =
### JWKS from keycloak
# oauth_local_jwks =
### Airflow keycloak service account secret
# airflow_secret =
### Operator keycloak service account secret
# operator_secret =
### Resource uploader keycloak service account secret
# resource_uploader_secret =
### Tester keycloak service account secret
# tester_secret =
### Tester data scientist keycloak service account secret
# tester_data_scientist_secret =

#--- [ldap] ldap parameters ---#
[ldap]
### Ldap hostname
# hostname =
### Ldap architecture params
# dn =
### Ldap organisation unit
# ou =
### Ldap admin password
# service_password =
### Ldap admin user name
# service_username =

#--- [keycloak] keycloak parameters ---#
[keycloak]
### Keycloak realm name
# realm_name =
### Keycloak auth server url
# auth_server_url =
### Keycloak client name
# client_name =
### Keycloak client secret
# client_secret =
### Keycloak user
# user =
### Keycloak user password
# user_password =

#--- [reverse_proxy] reverse proxy settings ---#
[reverse_proxy]
### Nginx version
nginx_version = 1.15.1
