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

# Make a copy of this file named 'secrets.py' and add your credentials there.
# Note you can run unit tests without setting your credentials.

BLUEBOX_PARAMS = ('customer_id', 'api_key')
BRIGHTBOX_PARAMS = ('client_id', 'client_secret')
EC2_PARAMS = ('access_id', 'secret')
ECP_PARAMS = ('user_name', 'password')
GANDI_PARAMS = ('user',)
GCE_PARAMS = ('email@developer.gserviceaccount.com', 'key')  # Service Account Authentication
# GCE_PARAMS = ('client_id', 'client_secret')  # Installed App Authentication
GCE_KEYWORD_PARAMS = {'project': 'project_name'}
GKE_PARAMS = ('email@developer.gserviceaccount.com', 'key')  # Service Account Authentication
# GKE_PARAMS = ('client_id', 'client_secret')  # Installed App Authentication
GKE_KEYWORD_PARAMS = {'project': 'project_name'}

HOSTINGCOM_PARAMS = ('user', 'secret')
IBM_PARAMS = ('user', 'secret')
ONAPP_PARAMS = ('key')
ONEANDONE_PARAMS = ('token')
# OPENSTACK_PARAMS = ('user_name', 'api_key', secure_bool, 'host', port_int)
OPENSTACK_PARAMS = ('user_name', 'api_key', False, 'host', 8774)
OPENNEBULA_PARAMS = ('user', 'key')
DIMENSIONDATA_PARAMS = ('user', 'password')
NTTCIS_PARAMS = ('user', 'password')
OPSOURCE_PARAMS = ('user', 'password')
OVH_PARAMS = ('application_key', 'application_secret', 'project_id', 'consumer_key')
RACKSPACE_PARAMS = ('user', 'key')
RACKSPACE_NOVA_PARAMS = ('user_name', 'api_key', False, 'host', 8774)
SLICEHOST_PARAMS = ('key',)
SCALEWAY_PARAMS = ('access_key', 'token')
SOFTLAYER_PARAMS = ('user', 'api_key')
VCLOUD_PARAMS = ('user', 'secret')
VOXEL_PARAMS = ('key', 'secret')
VPSNET_PARAMS = ('user', 'key')
JOYENT_PARAMS = ('user', 'key')
VCL_PARAMS = ('user', 'pass', True, 'foo.bar.com')
GRIDSPOT_PARAMS = ('key',)
HOSTVIRTUAL_PARAMS = ('key',)
DIGITALOCEAN_v1_PARAMS = ('user', 'key')
DIGITALOCEAN_v2_PARAMS = ('token',)
CLOUDFRAMES_PARAMS = ('key', 'secret', False, 'host', 8888)
PROFIT_BRICKS_PARAMS = ('user', 'key')
VULTR_PARAMS = ('key')
EQUINIXMETAL_PARAMS = ('api_key')
ECS_PARAMS = ('access_key', 'access_secret')
CLOUDSCALE_PARAMS = ('token',)
UPCLOUD_PARAMS = ('user', 'secret')
GRIDSCALE_PARAMS = ('user uuid', 'api token')
KAMATERA_PARAMS = ('key', 'secret', False, 'localhost', 8000)

# Storage
STORAGE_S3_PARAMS = ('key', 'secret')
STORAGE_OSS_PARAMS = ('key', 'secret')
# Google key = 20 char alphanumeric string starting with GOOG
STORAGE_GOOGLE_STORAGE_PARAMS = ('GOOG0123456789ABCXYZ', 'secret')

# Azure key is b64 encoded and must be decoded before signing requests
STORAGE_AZURE_BLOBS_PARAMS = ('account', 'cGFzc3dvcmQ=')
STORAGE_AZURITE_BLOBS_PARAMS = ('account', 'cGFzc3dvcmQ=', False, 'localhost', 10000)

# Loadbalancer
LB_BRIGHTBOX_PARAMS = ('user', 'key')
LB_ELB_PARAMS = ('access_id', 'secret', 'region')
LB_ALB_PARAMS = ('access_id', 'secret', 'region')
LB_SLB_PARAMS = ('access_id', 'secret', 'region')

# DNS
DNS_PARAMS_LINODE = ('key')
DNS_KEYWORD_PARAMS_LINODE = {'api_version': '3.0'}
DNS_PARAMS_ZERIGO = ('email', 'api token')
DNS_PARAMS_RACKSPACE = ('user', 'key')
DNS_PARAMS_HOSTVIRTUAL = ('key',)
DNS_PARAMS_ROUTE53 = ('access_id', 'secret')
DNS_GANDI = ('user', )
DNS_GANDI_LIVE = ('key', )
DNS_PARAMS_GOOGLE = ('email_address', 'key')
DNS_KEYWORD_PARAMS_GOOGLE = {'project': 'project_name'}
DNS_PARAMS_WORLDWIDEDNS = ('user', 'key')
DNS_PARAMS_DNSIMPLE = ('user', 'key')
DNS_PARAMS_POINTDNS = ('user', 'key')
DNS_PARAMS_LIQUIDWEB = ('user', 'key')
DNS_PARAMS_ZONOMI = ('key')
DNS_PARAMS_DURABLEDNS = ('api_user', 'api_key')
DNS_PARAMS_GODADDY = ('customer-id', 'api_user', 'api_key')
DNS_PARAMS_CLOUDFLARE = ('user@example.com', 'key')
DNS_PARAMS_AURORADNS = ('apikey', 'secretkey')
DNS_PARAMS_NSONE = ('key', )
DNS_PARAMS_LUADNS = ('user', 'key')
DNS_PARAMS_BUDDYNS = ('key', )
DNS_PARAMS_DNSPOD = ('key', )
DNS_PARAMS_ONAPP = ('key', 'secret')

# Container
CONTAINER_PARAMS_DOCKER = ('user', 'password')
CONTAINER_PARAMS_ECS = ('user', 'password', 'region')
CONTAINER_PARAMS_KUBERNETES = ('user', 'password')

CONTAINER_PARAMS_LXD = ("", "", False, 'localhost', 8443, None, None, None)
CONTAINER_PARAMS_RANCHER = ('user', 'password')
CONTAINER_PARAMS_GKE = ('user', 'password')
