# Cookbook:: irrigate-neo4j
# Attributes:: default
#

default['ec2']['instance_id']                             = nil
default['neo4j']['route53']['region']                     = 'us-east-1'
default['neo4j']['route53']['domain_name']                = 'domain.com'
default['neo4j']['route53']['zone_id']                    = 'Z1234567890'
default['neo4j']['route53']['networking_account_enabled'] = false
default['neo4j']['route53']['networking_account_zone_id'] = 'Z0183645HDT0XCWHLW7S'
default['neo4j']['route53']['aws_role_arn']               = 'arn:aws:iam::734458723522:role/cross-account-neo4j-dns-update'
default['neo4j']['route53']['aws_session_name']           = 'irrigate-neo4j-dns-update'
default['neo4j']['route53']['aws_external_id']            = 'MVbfR8vaLnItbX9nE7'
default['neo4j']['version']                               = '4.4.30'
default['neo4j']['package_name']                          = 'neo4j-enterprise'
default['neo4j']['pypi_repo']                             = 'https://pypi.theorchard.io/pypi'
default['neo4j']['user']                                  = 'neo4j'
default['neo4j']['data_volume_type']                      = 'local'
default['neo4j']['data_volume_filesystem']                = 'ext4'
default['neo4j']['ulimit']['nofile']                      = 65536

default['neo4j']['apoc']['version']                 = '4.4.0.7'
default['neo4j']['apoc']['install_url']             = "https://github.com/neo4j-contrib/neo4j-apoc-procedures/releases/download/#{node['neo4j']['apoc']['version']}/apoc-#{node['neo4j']['apoc']['version']}-all.jar"
default['neo4j']['apoc']['checksum']                = '58fcf00c4e50075714cc88a3d345dd718c79400f5beff93c1bbc7387e4a079eb'

default['neo4j']['mysql-connector-java']['version'] = '8.0.18'
default['neo4j']['snowflake-jdbc']['version']       = '3.11.1'
default['neo4j']['jdbc']['connections']             = []
default['neo4j']['jdbc']['connections_data_bag']    = ''
default['neo4j']['s5cmd']['version']                = '2.2.2'

# General configuration settings
default['neo4j']['config']['neo4j_conf']                                    = '/etc/neo4j'
default['neo4j']['config']['file_path']                                     = "#{node['neo4j']['config']['neo4j_conf']}/neo4j.conf"
default['neo4j']['config']['apoc_conf_file_path']                           = "#{node['neo4j']['config']['neo4j_conf']}/apoc.conf"
default['neo4j']['config']['streams_file_path']                             = "#{node['neo4j']['config']['neo4j_conf']}/streams.conf"
default['neo4j']['config']['neo4j_home']                                    = '/var/lib/neo4j'

default['neo4j']['config']['dbms.security.auth_enabled']                    = 'true'
default['neo4j']['config']['dbms.security.allow_csv_import_from_file_urls'] = 'true'
default['neo4j']['config']['dbms.security.procedures.unrestricted']         = 'apoc.*'

default['neo4j']['config']['exit_on_oom_error']                             = 'true'
default['neo4j']['config']['watchdog_file_path']                            = '/usr/local/bin/watchdog.py'
default['neo4j']['watchdog']['enabled']                                     = 'true'
default['neo4j']['config']['cypher']['default_language_version']            = ''
default['neo4j']['config']['dbms.transaction.timeout']                      = '300s'
default['neo4j']['config']['dbms.transaction.bookmark_ready_timeout']       = '30s'
default['neo4j']['config']['db.checkpoint.iops.limit']                      = '3600'

# Arbitrary array of additional JVM options.
default['neo4j']['config']['dbms.jvm.additional'] = [
  "-XX:ParallelGCThreads=#{node['cpu']['cores']}",
]

# Backup and restore settings
default['neo4j']['config']['backup']['port']                       = 6362
default['neo4j']['config']['backup_upgrader_script_path']          = '/root/4x_upgrader.sh'
default['neo4j']['backup']['user_backup']['user']                  = 'neo4j_user_backup'

# Default pubkey for dev
default['neo4j']['backup']['user_backup']['ssh_public_key']        = 'AAAAB3NzaC1yc2EAAAADAQABAAACAQCkYSvu8+bZQBzAzjeib5mDaqHXMo+sEBdmZveTO3NYxUTfRiBlBsvWgq2yUqPN+6h12Ost1X79mk8VlS8/Dzwgi6KK6nee1F7MkuOTlcA1B9kGllzN6l/jw36yNaCVO0/1lDlOi7JcqnMUubhqTctlK/onm/QQu7WY2ssBaj/4bXJFotlJtRAkSAD6OMExHD7peKXp8n5x+2rgmG1SAOr8ZzYrrTtHgYHsSegYeaG3wcDvc5t/tIT4/4/DhfB14QrOIUdTsxymxJAEulZTCJsBxzs1/QrHZ8lLLuRqkIk1X9+gBQFXaylpqmBwuS4kR3MxnoGJUlKRt1xrc2oCqR8M5vS8EOudyMye3c8nUOAPyjGBhPO0bVstFNyyejgDLy3HqPyLiNJX8muX8nedqXdkgoqWoifxlKCu1pHY4A7iuqR8/NfifEWDA0n5esIAw2c1l2kZIF/vmrgkl7jilPmgXtRtNepNxcteNOnNX5zITIAJOrvBOKjrBA2wO46Qk4P9Z+0etSnIe3nMKfKPh7Cf/firZ576Z48QCQxTO3tRJNK98rqmzGTyOcRp39NY8HCrfvNevidH0K03Xf0tVEM91tEXIxmP5Dk8Ok186J/TojWiF75uoMF2YkQF6jgY3N/Uw36lWlCUXQchM12akT1dZOahaY9QqsHpZYFoFGfmsQ=='
default['neo4j']['backup']['user_backup']['uid']                   = '1200'
default['neo4j']['restore']['user']                                = 'neo4j_restore'
default['neo4j']['backup']['user']                                 = 'neo4j_backup'
default['neo4j']['backup']['uid']                                  = '1202'

# Default pubkey for dev
default['neo4j']['restore']['ssh_public_key']                      = 'AAAAB3NzaC1yc2EAAAADAQABAAACAQDQwqhv0/xj5ZVnpLujn8PANPRUKAAQ40fuHiOW9rc72Mz+LemjL3DKdy16ig/1GZ5/IT8/jzZrJ5Y5wc5hBhHSaf3u0eJhwPDPgs/NXb/Zrte0xbjLfiNGK7mUm0qincUl/H3qcTDdQE6/NqKd0NYd7KuJkeJavhVMdHkoXYn8Dang7nlQLPQactZprhi00IUqPhZYFmFzXz0HprFNXO6e4dBB6z7kBMxHRLn8XqGe8iYa+j4L8ysWR5qXYSlaWqdYB4RINsZ4QTYJuZ+R6ziW61xLnAHvYnsIDOg4W8h+JpOz2+eLvEQWrSg/+RS4z7rOcrrd/A2/siYEZZm9MPEsl8+QrlIGMX1mByDEdt5KO/D+XyNdwfVwu5/iDnkqbdsNgl5cDFbc9IVz2fhP4loI8tvrTgJ71+jCtizIZXB4KTMIHah5Sj0niwYgdMrGBWWslMuBkh+IXWJSo5dg1szcq+3meNuZ9yUq0Y7pI7vR7frgNyh6ziq14kqI2FoaZB/UVGRmuGoeRNweEFykIserzSWCPXKF5GnSJBbe8gbMlawDUAYGfqkvrEav665928Lp7RZ+J3zn2xmBMRR8D5DpPu+bZqGWSzrJraC9k6LzdhcsQW9bZulEHRsYmrsbB9KvQfDkxzqslVOx7HQ12cGF2NzoQK97TWroItzbu2scaw=='
default['neo4j']['restore']['uid']                                 = '1201'
default['neo4j']['restore']['git_ssh_key']                         = 'dummy'
default['neo4j']['restore']['git_ssh_key_data_bag_name']           = 'neo4j_utils_git_ssh_key'
default['neo4j']['restore']['non_sensitive_environment_variables'] = {
  'key' => 'value',
  'key1' => 'value1',
}
default['neo4j']['restore']['requirements_file'] = 'requirements.txt'

# Support user settings
default['neo4j']['support']['user'] = 'support'
default['neo4j']['support']['uid']  = '1301'

# Connector settings
default['neo4j']['config']['dbms.connectors.default_advertised_address_prefix'] = node['ipaddress']
default['neo4j']['config']['dbms.connectors.default_advertised_address']        = node['ipaddress']
default['neo4j']['config']['bolt']['port']                                      = 7687

# Bolt thread pool settings
default['neo4j']['config']['server.bolt.thread_pool_min_size']    =  5
default['neo4j']['config']['server.bolt.thread_pool_max_size']    =  400
default['neo4j']['config']['server.bolt.thread_pool_keep_alive']  =  '5m'

# HTTP is enabled and cannot be disabled. Set listen_address to localhost for exclusive use with localhost agent-based monitoring tools, e.g. datadog
default['neo4j']['config']['http']['port'] = 7474

default['neo4j']['config']['dbms.connector.https.listen_address'] = node['ipaddress']
default['neo4j']['config']['https']['port']                       = 7473
default['neo4j']['config']['dbms.routing.enabled']                = 'false'
default['neo4j']['config']['dbms.routing.listen_address']         = node['ipaddress']
default['neo4j']['config']['routing']['port']                     = 7688

# SSL policy settings
# Referencing https://netty.io/wiki/requirements-for-4.x.html, prefer OpenSSL vs JDK SSL
default['neo4j']['config']['dbms.netty.ssl.provider']      = 'OPENSSL'
default['neo4j']['config']['bolt.ssl_policy']              = 'default'
default['neo4j']['config']['https.ssl_policy']             = 'default'
default['neo4j']['config']['causal_clustering.ssl_policy'] = 'default'
default['neo4j']['config']['restart_on_change']            = true

# Make sure to use absolute paths for the base_directory.
# Trusted and revoked directories are at set to base_directory/(trusted, revoked), respectively.
# To fall back to self-signed certs and the legacy SSL system (only suitable for dev), set this to an empty string.
# For all non-development environments, specify a valid data_bag_name.
# This hash has all options needed by SSL policies in both version 3.x and 4.x., including options not utilized
# by a given version (e.g allow_key_generation is not used in 4.x but it has no effect by being present in the hash)

# Example
# default['neo4j']['config']['ssl_policy']['policies'] = {
#   'default' => {
#     'base_directory' => '/etc/neo4j/default',
#     'allow_key_generation' => 'false',
#     'data_bag_name' => 'dev_neo4j_certificate',
#     'trust_all' => 'false',
#     'client_auth' => 'REQUIRE',
#     'verify_hostname' => 'true',
#     'tls_versions' => 'TLSv1.2',
#     'ciphers' => 'TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384',
#   },
# }

default['neo4j']['config']['ssl_policy']['policies'] = {}

# Logging settings
default['neo4j']['config']['dbms.logs.http.enabled']        = 'true'
default['neo4j']['config']['dbms.logs.root.path']           = '/var/log/neo4j'
default['neo4j']['config']['dbms.logs.gc.jvm9_min.enabled'] = 'false'
default['neo4j']['config']['dbms.logs.gc.jvm9_min.options'] = '-Xlog:gc*,safepoint,age*=trace'
default['neo4j']['config']['dbms.logs.query.path']          = "#{node['neo4j']['config']['dbms.logs.root.path']}/query.log"
default['neo4j']['config']['dbms.logs.user.format']         = ''
default['neo4j']['config']['dbms.logs.query.format']        = ''
default['neo4j']['config']['dbms.logs.debug.format']        = ''
default['neo4j']['config']['dbms.logs.security.format']     = ''

# Causal clustering settings
# Causal clustering should be enabled for all non-development environments.
# For developmnent, set to false and set ['neo4j']['config']['dbms.mode'] to 'SINGLE'.
default['neo4j']['config']['causal_clustering.enabled']                                = 'true'
default['neo4j']['config']['dbms.mode']                                                = 'CORE'
default['neo4j']['config']['causal_clustering.causal_clustering.discovery_type']       = 'DNS'
default['neo4j']['config']['causal_clustering.causal_clustering.discovery_address']    = 'neo4j.domain.com'
default['neo4j']['config']['causal_clustering.discovery_port']                         = 5000
default['neo4j']['config']['causal_clustering.transaction_port']                       = 6000
default['neo4j']['config']['causal_clustering.raft_port']                              = 7000

# Auth settings
default['neo4j']['config']['dbms.security.auth_provider']                 = 'native'
default['neo4j']['config']['dbms.security.auth_cache_max_capacity']       = '10000'
default['neo4j']['config']['dbms.security.log_successful_authentication'] = 'true'

# Neo4J CDC settings
default['neo4j']['cdc']['version']        = '1.0.2'
default['neo4j']['cdc']['s3_bucket_name'] = 'dev-orchdbucket'
default['neo4j']['cdc']['s3_file_path']   = "/neo4j/cdc-plugin/cdc-plugin-#{node['neo4j']['cdc']['version']}-SNAPSHOT.jar"

# Neo4J streams settings
default['neo4j']['streams']['environment']                                              = 'prod'
default['neo4j']['config']['kafka.zookeeper.connect']                                   = ''
default['neo4j']['config']['kafka.bootstrap.servers']                                   = ''
default['neo4j']['config']['kafka.security.protocol']                                   = ''
default['neo4j']['config']['kafka.ssl.truststore.location']                             = ''
default['neo4j']['config']['kafka.streams.log.compaction.strategy']                     = ''
default['neo4j']['config']['streams.source.schema.polling.interval']                    = '300000'

# Neo4J APOC settings
default['neo4j']['config']['apoc.export.file.enabled'] = 'false'
default['neo4j']['config']['apoc.trigger.enabled']     = 'false'
default['neo4j']['config']['apoc.uuid.enabled']        = 'false'

# Backup settings
default['neo4j']['backup']['AWS_DEFAULT_REGION']             = 'us-east-1'
default['neo4j']['backup']['ECR_REPOSITORY']                 = ''
default['neo4j']['backup']['NEO4J_BACKUP_IMAGE_TAG']         = 'latest'
default['neo4j']['backup']['Environment']                    = 'dev'
default['neo4j']['backup']['HEAP_SIZE']                      = '2G'
default['neo4j']['backup']['LOGGER_DSN']                     = ''
default['neo4j']['backup']['NEO4J_BACKUP_S3_BUCKET']         = 'dev-orchdbucket'
default['neo4j']['backup']['NEO4J_BACKUP_KMS_KEY_ID']        = ''
default['neo4j']['backup']['NEO4J_BACKUP_S3_PREFIX']         = "backup/neo4j/#{node['neo4j']['config']['causal_clustering.causal_clustering.discovery_address']}"
default['neo4j']['backup']['NEO4J_BACKUP_CHECK_CONSISTENCY'] = 'true'
default['neo4j']['backup']['NEO4J_BACKUP_TIMEOUT']           = 28800
default['neo4j']['backup']['NEO4J_BACKUP_COMPRESS_BACKUP']   = 'true'
default['neo4j']['backup']['NEO4J_BACKUP_ASG_NAME']          = 'dev-neo4j-backup'
default['neo4j']['backup']['hour']                           = '2'
default['neo4j']['backup']['minute']                         = '00'

default['neo4j']['config']['server']['jmx_recording_enabled'] = 'false'

# Restart user settings
default['neo4j']['restart']['ssh_public_key'] = 'AAAAB3NzaC1yc2EAAAADAQABAAACAQDIH5g0Zx0p2R4lcJgKyEOKm+AVhkfBgbawc7KAeN5xh+kjZFOCBvofTz+w1af3DIgpZNEWa2R2NVDKY5Xw/YDsndgdpRo3FNPb/q4nJYZbsZwoxF2EEzqWq332TTNC9/RBlkhXKKU4aMfCSyPVFxERUpactk6JLffG5foEfdZDLWAQq53o/aAqVZCADx8RAmqce3dEPeY+BjteVCuRS7bIibVfEgn7oW/SvvdgW1OW+F4Upar87XggoaA6+W39i940cFcQH41ILDUXHAlp4ln3drR3pUaVdMkjk6J0Znkxx2rWEn2MNCO0HLvPHjEXKCqF3OVzk7LBRU8k3jkWrlB3nz1lKh00LTQrvz1tDLt5jX7ZujeQeXFWkpc5xeCCMAPD96+o25Iw/ANnSTTHrCnEzIES3/CUmWk5uHK3ySSwLk4CpwRY7gxEuX3n9jBXGciOG2yixyr+QtI8ybcgbuwWMczfTkx3kCSGMH99xwDAG1FN3hZmhV3f6tXvbFESP6c2jHEqf7V2DYW0frPRaX2gH/zZAS5Bp+x1X8h9ZcB8JbU2hPCRWrwnG7yAuatuLM4UyPqUDcTiv7vnXA/QK0jJKbfgkdl2Lumg6B+wA6G3VY8Ydqsm2m3p45nPJTfutPcFYqQliPp5Ite/ESEoF7owh+zMAhFFnjb5X+wx8UKYRw=='
default['neo4j']['restart']['user']           = 'neo4j_restart_user'

default['neo4j']['service']['enabled'] = true

# User dbms one-time import settings
default['neo4j']['users']['s3_bucket_name'] = 'dev-orchdbucket'
default['neo4j']['users']['s3_file_path']   = "/backup/neo4j/#{node['neo4j']['config']['causal_clustering.causal_clustering.discovery_address']}/#{node['neo4j']['config']['causal_clustering.causal_clustering.discovery_address']}_dbms.tar.gz"

# AWS profile settings
# it seems like we cannot really use profiles with the aws cookbook, so this is just for testing and ability to assume the role from CLI
default['neo4j']['aws']['profiles'] = [
  {
    'name'              => 'networking',
    'region'            => 'us-east-1',
    'output'            => 'json',
    'role_arn'          => node['neo4j']['route53']['aws_role_arn'],
    'source_profile'    => 'default',
    'role_session_name' => node['neo4j']['route53']['aws_session_name'],
    'external_id'       => node['neo4j']['route53']['aws_external_id'],
  },
]
