| #!/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) |