blob: 9f40e721ace4b4bd2a21faca3ff72a330f94a1df [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='', help='Column name in report file that contains dlab id tag')
parser.add_argument('--usage_date', type=str, default='', help='Column name in report file that contains usage date tag')
parser.add_argument('--product', type=str, default='', help='Column name in report file that contains product name tag')
parser.add_argument('--usage_type', type=str, default='', help='Column name in report file that contains usage type tag')
parser.add_argument('--usage', type=str, default='', help='Column name in report file that contains usage tag')
parser.add_argument('--cost', type=str, default='', help='Column name in report file that contains cost tag')
parser.add_argument('--resource_id', type=str, default='', help='Column name in report file that contains dlab resource id tag')
parser.add_argument('--tags', type=str, default='', 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')
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('<BILLING_BUCKET_NAME>', args.billing_bucket)
config_orig = config_orig.replace('<AWS_JOB_ENABLED>', args.aws_job_enabled)
config_orig = config_orig.replace('<REPORT_PATH>', args.report_path)
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('<CONF_SERVICE_BASE_NAME>', args.infrastructure_tag)
config_orig = config_orig.replace('<MONGODB_PASSWORD>', args.mongo_password)
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('<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)
config_orig = config_orig.replace('<MONGODB_PASSWORD>', args.mongo_password)
elif args.cloud_provider == 'gcp':
config_orig = config_orig.replace('<CONF_SERVICE_BASE_NAME>', args.infrastructure_tag)
config_orig = config_orig.replace('<MONGO_PASSWORD>', args.mongo_password)
config_orig = config_orig.replace('<BILLING_DATASET_NAME>', args.billing_dataset_name)
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')
yml_self_service(args.dlab_dir + 'conf/self-service.yml')
except:
print('Error configure billing')
sys.exit(1)
sys.exit(0)