blob: 1df44cc29583a709d0405167ab6a0c1261e4d318 [file] [log] [blame]
#!/usr/bin/python
# *****************************************************************************
#
# 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.
#
# ******************************************************************************
from fabric.api import *
import yaml, json, sys
import argparse
import os
parser = argparse.ArgumentParser()
parser.add_argument('--cloud_provider', type=str,
help='Where DLab should be deployed. Available options: aws, azure')
parser.add_argument('--infrastructure_tag', type=str, help='unique name for DLab environment')
parser.add_argument('--access_key_id', default='', type=str, help='AWS Access Key ID')
parser.add_argument('--secret_access_key', default='', type=str, help='AWS Secret Access Key')
parser.add_argument('--tag_resource_id', type=str, default='user:tag', help='The name of user tag')
parser.add_argument('--billing_tag', type=str, default='dlab', help='Billing tag')
parser.add_argument('--account_id', type=str, help='The ID of ASW linked account')
parser.add_argument('--billing_bucket', type=str, help='The name of bucket')
parser.add_argument('--aws_job_enabled', type=str, default='false', help='Billing format. Available options: true (aws), false(epam)')
parser.add_argument('--report_path', type=str, default='', help='The path to report folder')
parser.add_argument('--client_id', type=str, default='', help='Azure client ID')
parser.add_argument('--client_secret', type=str, default='', help='Azure client secret')
parser.add_argument('--tenant_id', type=str, default='', help='Azure tenant ID')
parser.add_argument('--subscription_id', type=str, default='', help='Azure subscription ID')
parser.add_argument('--authentication_file', type=str, default='', help='Azure authentication file')
parser.add_argument('--offer_number', type=str, default='', help='Azure offer number')
parser.add_argument('--currency', type=str, default='', help='Azure currency for billing')
parser.add_argument('--locale', type=str, default='', help='Azure locale')
parser.add_argument('--region_info', type=str, default='', help='Azure region info')
parser.add_argument('--mongo_password', type=str, help='The password for Mongo DB')
parser.add_argument('--dlab_dir', type=str, help='The path to dlab dir')
parser.add_argument('--dlab_id', type=str, default='resource_tags_user_user_tag', help='Column name in report file that contains dlab id tag')
parser.add_argument('--usage_date', type=str, default='line_item_usage_start_date', help='Column name in report file that contains usage date tag')
parser.add_argument('--product', type=str, default='product_product_name', help='Column name in report file that contains product name tag')
parser.add_argument('--usage_type', type=str, default='line_item_usage_type', help='Column name in report file that contains usage type tag')
parser.add_argument('--usage', type=str, default='line_item_usage_amount', help='Column name in report file that contains usage tag')
parser.add_argument('--cost', type=str, default='line_item_blended_cost', help='Column name in report file that contains cost tag')
parser.add_argument('--resource_id', type=str, default='line_item_resource_id', help='Column name in report file that contains dlab resource id tag')
parser.add_argument('--tags', type=str, default='line_item_operation,line_item_line_item_description', help='Column name in report file that contains tags')
parser.add_argument('--billing_dataset_name', type=str, default='', help='Name of gcp billing dataset (in big query service')
parser.add_argument('--mongo_host', type=str, default='localhost', help='Mongo DB host')
parser.add_argument('--mongo_port', type=str, default='27017', help='Mongo DB port')
parser.add_argument('--service_base_name', type=str, help='Service Base Name')
parser.add_argument('--os_user', type=str, help='Dlab user')
parser.add_argument('--keystore_password', type=str, help='Keystore password')
parser.add_argument('--keycloak_client_id', type=str, help='Keycloak client id')
parser.add_argument('--keycloak_client_secret', type=str, help='Keycloak client secret')
parser.add_argument('--keycloak_auth_server_url', type=str, help='Keycloak auth server url')
args = parser.parse_args()
def yml_billing(path):
try:
with open(path, 'r') as config_yml_r:
config_orig = config_yml_r.read()
config_orig = config_orig.replace('billingEnabled: false', 'billingEnabled: true')
if args.cloud_provider == 'aws':
if args.aws_job_enabled == 'true':
args.tag_resource_id = 'resourceTags' + ':' + args.tag_resource_id
config_orig = config_orig.replace('MONGO_HOST', args.mongo_host)
config_orig = config_orig.replace('MONGO_PASSWORD', args.mongo_password)
config_orig = config_orig.replace('MONGO_PORT', args.mongo_port)
config_orig = config_orig.replace('BILLING_BUCKET_NAME', args.billing_bucket)
config_orig = config_orig.replace('REPORT_PATH', args.report_path)
config_orig = config_orig.replace('AWS_JOB_ENABLED', args.aws_job_enabled)
config_orig = config_orig.replace('ACCOUNT_ID', args.account_id)
config_orig = config_orig.replace('ACCESS_KEY_ID', args.access_key_id)
config_orig = config_orig.replace('SECRET_ACCESS_KEY', args.secret_access_key)
config_orig = config_orig.replace('CONF_BILLING_TAG', args.billing_tag)
config_orig = config_orig.replace('SERVICE_BASE_NAME', args.service_base_name)
config_orig = config_orig.replace('DLAB_ID', args.dlab_id)
config_orig = config_orig.replace('USAGE_DATE', args.usage_date)
config_orig = config_orig.replace('PRODUCT', args.product)
config_orig = config_orig.replace('USAGE_TYPE', args.usage_type)
config_orig = config_orig.replace('USAGE', args.usage)
config_orig = config_orig.replace('COST', args.cost)
config_orig = config_orig.replace('RESOURCE_ID', args.resource_id)
config_orig = config_orig.replace('TAGS', args.tags)
elif args.cloud_provider == 'azure':
config_orig = config_orig.replace('SERVICE_BASE_NAME', args.service_base_name)
config_orig = config_orig.replace('OS_USER', args.os_user)
config_orig = config_orig.replace('MONGO_PASSWORD', args.mongo_password)
config_orig = config_orig.replace('MONGO_PORT', args.mongo_port)
config_orig = config_orig.replace('MONGO_HOST', args.mongo_host)
config_orig = config_orig.replace('KEY_STORE_PASSWORD', args.keystore_password)
config_orig = config_orig.replace('KEYCLOAK_CLIENT_ID', args.keycloak_client_id)
config_orig = config_orig.replace('KEYCLOAK_CLIENT_SECRET', args.keycloak_client_secret)
config_orig = config_orig.replace('KEYCLOAK_AUTH_SERVER_URL', args.keycloak_auth_server_url)
config_orig = config_orig.replace('CLIENT_ID', args.client_id)
config_orig = config_orig.replace('CLIENT_SECRET', args.client_secret)
config_orig = config_orig.replace('TENANT_ID', args.tenant_id)
config_orig = config_orig.replace('SUBSCRIPTION_ID', args.subscription_id)
config_orig = config_orig.replace('AUTHENTICATION_FILE', args.authentication_file)
config_orig = config_orig.replace('OFFER_NUMBER', args.offer_number)
config_orig = config_orig.replace('CURRENCY', args.currency)
config_orig = config_orig.replace('LOCALE', args.locale)
config_orig = config_orig.replace('REGION_INFO', args.region_info)
elif args.cloud_provider == 'gcp':
config_orig = config_orig.replace('SERVICE_BASE_NAME', args.service_base_name)
config_orig = config_orig.replace('OS_USER', args.os_user)
config_orig = config_orig.replace('MONGO_PASSWORD', args.mongo_password)
config_orig = config_orig.replace('MONGO_PORT', args.mongo_port)
config_orig = config_orig.replace('MONGO_HOST', args.mongo_host)
config_orig = config_orig.replace('KEY_STORE_PASSWORD', args.keystore_password)
config_orig = config_orig.replace('DATASET_NAME', args.billing_dataset_name)
config_orig = config_orig.replace('KEYCLOAK_CLIENT_ID', args.keycloak_client_id)
config_orig = config_orig.replace('KEYCLOAK_CLIENT_SECRET', args.keycloak_client_secret)
config_orig = config_orig.replace('KEYCLOAK_AUTH_SERVER_URL', args.keycloak_auth_server_url)
f = open(path, 'w')
f.write(config_orig)
f.close()
except:
print("Could not write the target file {}".format(path))
sys.exit(1)
def yml_billing_app(path):
try:
with open(path, 'r') as config_yml_r:
config_orig = config_yml_r.read()
config_orig = config_orig.replace('MONGO_HOST', args.mongo_host)
config_orig = config_orig.replace('MONGO_PASSWORD', args.mongo_password)
config_orig = config_orig.replace('MONGO_PORT', args.mongo_port)
config_orig = config_orig.replace('OS_USER', args.os_user)
config_orig = config_orig.replace('KEY_STORE_PASSWORD', args.keystore_password)
config_orig = config_orig.replace('KEYCLOAK_CLIENT_ID', args.keycloak_client_id)
config_orig = config_orig.replace('KEYCLOAK_CLIENT_SECRET', args.keycloak_client_secret)
config_orig = config_orig.replace('KEYCLOAK_AUTH_SERVER_URL', args.keycloak_auth_server_url)
f = open(path, 'w')
f.write(config_orig)
f.close()
except:
print("Could not write the target file {}".format(path))
sys.exit(1)
def yml_self_service(path):
try:
with open(path, 'r') as config_yml_r:
config_orig = config_yml_r.read()
config_orig = config_orig.replace('billingSchedulerEnabled: false', 'billingSchedulerEnabled: true')
f = open(path, 'w')
f.write(config_orig)
f.close()
except:
print("Could not write the target file {}".format(path))
sys.exit(1)
##############
# Run script #
##############
if __name__ == "__main__":
print("Configure billing")
# Check cloud provider
# Access to the bucket without credentials?
try:
yml_billing(args.dlab_dir + 'conf/billing.yml')
if args.cloud_provider == 'aws':
yml_billing_app(args.dlab_dir + 'conf/billing_app.yml')
yml_self_service(args.dlab_dir + 'conf/self-service.yml')
except:
print('Error configure billing')
sys.exit(1)
sys.exit(0)