def create_vm(self, create_params):
        try:

            for params in create_params:
                computer_name = params["computer_name"]
                admin_username = params["admin_username"]
                password = params["password"]
                vm_size = params["vm_size"]
                publisher = params["publisher"]
                offer = params["offer"]
                sku = params["sku"]
                version = params["version"]
                group_name = params["group_name"]
                region = params["region"]

                result = self.create_network_interface(group_name, region,
                                                       computer_name)

                vm_params = {
                    'location': region,
                    'os_profile': {
                        'computer_name': computer_name,
                        'admin_username': admin_username,
                        'admin_password': password
                    },
                    'hardware_profile': {
                        'vm_size': vm_size
                    },
                    'storage_profile': {
                        'image_reference': {
                            'publisher': publisher,
                            'offer': offer,
                            'sku': sku,
                            'version': version
                        },
                    },
                    'network_profile': {
                        'network_interfaces': [{
                            'id': result.id,
                        }]
                    },
                }

                response = self.client.virtual_machines.create_or_update(
                    group_name, computer_name, vm_params)
                return response

        except Exception as e:
            msg1 = "Error while creating VM in azure "
            exit_message(msg1 + str(e), 1, self.isJson)

        return 0
    def create_db(self, create_params):
        try:
            for params in create_params:
                server_name = params["instance"]
                administrator_login = params["master_user"]
                administrator_login_password = params["password"]
                storage_mb = params.get("allocated_storage")
                version = params["engine_version"]
                group_name = params["group_name"]
                region = params["region"]
                ssl_mode = params.get("ssl_mode", 'Disabled')
                start_ip = params.get("start_ip", None)
                end_ip = params.get("end_ip", None)
                publicly_accessible = params.get("publicly_accessible", None)

                db_params = {
                    'location': region,
                    'properties': {
                        'version': version,
                        'create_mode': 'Default',
                        'administrator_login': administrator_login,
                        'administrator_login_password':
                        administrator_login_password,
                        'ssl_enforcement': ssl_mode
                    }
                }
                if storage_mb:
                    db_params["properties"]["storage_mb"] = storage_mb

                response = self.client.servers.create_or_update(
                    group_name, server_name, db_params)
                response.wait()

                # Creating and adding firewall to server
                if publicly_accessible == "Yes":
                    firewall_response = self.client.firewall_rules.create_or_update(
                        group_name, server_name,
                        server_name + "-default-firewall-rule", '0.0.0.0',
                        '255.255.255.255')
                elif start_ip and end_ip:
                    firewall_response = self.client.firewall_rules.create_or_update(
                        group_name, server_name,
                        server_name + "-default-firewall-rule", start_ip,
                        end_ip)
                firewall_response.wait()
                return response

        except Exception as e:
            msg1 = "Error while creating postgres instance in azure "
            exit_message(msg1 + str(e), 1, self.isJson)

        return 0
Beispiel #3
0
    def get_vm_list(self, filter_params={}):
        self.header_keys = [
            'region', 'name', 'type', 'public_ips', 'private_ips', 'state'
        ]
        self.header_titles = [
            'Region', 'Name', 'Instance Type', 'Public Ips', 'Private Ips',
            'state'
        ]
        p_region = filter_params.get("region", "")
        p_instance = filter_params.get("instance", "")
        info = False
        if p_instance:
            info = True
        ec2_regions = []
        available_ec2_regions = boto3.session.Session().get_available_regions(
            self.instance_type)
        if p_region > "":
            if p_region in available_ec2_regions:
                ec2_regions = [p_region]
            else:
                msg = str(p_region) + " is not a valid region for ec2."
                exit_message(msg, 1, self.isJson)
        else:
            ec2_regions = available_ec2_regions

        ec2_hosts = []
        for region in ec2_regions:
            try:
                msg = "Searching " + region + "..."
                message(msg, "info", self.isJson)
                ec2 = get_client('ec2', region=region)
                hosts = ec2.describe_instances()
                for host in hosts['Reservations']:
                    for h in host['Instances']:
                        if p_instance > "":
                            if p_instance != h['InstanceId']:
                                continue
                        vm = AwsVM(h)
                        vm.region = region
                        if p_instance:
                            vm.set_extra_info(h)
                        if self.verbose:
                            print_verbose(vm.__dict__)
                        ec2_hosts.append(vm.__dict__)
            except Exception as e:
                pass

        return ec2_hosts
Beispiel #4
0
    def get_rds_list(self, filter_params={}):
        self.header_keys = [
            'region', 'instance', 'status', 'db_class', 'engine_version'
        ]
        self.header_titles = [
            'Region', 'Instance', 'Status', 'Class', 'Version'
        ]
        p_region = filter_params.get("region", "")
        p_instance = filter_params.get("instance", "")
        rds_regions = []
        available_rds_regions = boto3.session.Session().get_available_regions(
            "rds")
        if p_region > "":
            if p_region in available_rds_regions:
                rds_regions = [p_region]
            else:
                msg = str(p_region) + " is not a valid region for rds."
                exit_message(msg, 1, self.isJson)
        else:
            rds_regions = available_rds_regions

        # get all of the postgres db instances
        pg_list = []
        for region in rds_regions:
            msg = "Searching " + region + "..."
            message(msg, "info", self.isJson)
            rds = get_client('rds', region=region)
            dbs = rds.describe_db_instances()
            for db in dbs['DBInstances']:
                if db['Engine'] in ["postgres"]:
                    if p_instance > "":
                        if p_instance != db['DBInstanceIdentifier']:
                            continue
                    rds = AwsRDS(db)
                    rds.region = region
                    if p_instance:
                        extras_args = {}
                        extras_args['ec2'] = get_client('ec2', region=region)
                        rds.set_extra_info(db, extras_args)
                    if self.verbose:
                        print_verbose(rds.__dict__, p_type="pg")
                    pg_list.append(rds.__dict__)
        return pg_list
Beispiel #5
0
    def create_vm(self, p_dict):
        response = {
            'state': 'complete',
            'msg': 'Instance created successfully.'
        }
        for d in p_dict:
            p_region = d['region']
            ec2_params = {}
            ec2_params['MinCount'] = 1
            ec2_params['MaxCount'] = 1

            try:
                ec2_params['ImageId'] = d['image_id']
                ec2_params['InstanceType'] = d['instance_type']
            except Exception as e:
                exit_message("missing required field " + str(e), 1,
                             self.isJson)

            if d.get("kernel_id"):
                ec2_params['KernelId'] = d.get("kernel_id")

            if d.get("keyname"):
                ec2_params['KeyName'] = d.get("key_name")

            if d.get("monitoring"):
                ec2_params['Monitoring'] = d.get("monitoring")

            if d.get("ramdisk_id"):
                ec2_params['RamdiskId'] = d.get("ram_disk_id")

            if d.get("subnet_id"):
                ec2_params['SubnetId'] = d.get("subnet_id")

            if d.get("user_data"):
                ec2_params['UserData'] = d.get("user_data")

            if d.get("additional_info"):
                ec2_params['AdditionalInfo'] = d.get("additional_info")

            if d.get("client_token"):
                ec2_params['ClientToken'] = d.get("client_token")

            if d.get("disable_api_termination"):
                ec2_params['DisableApiTermination'] = d.get(
                    "disable_api_termination")

            if d.get("dryrun"):
                ec2_params['DryRun'] = d.get("dry_run")

            if d.get("ebs_optimized"):
                ec2_params['EbsOptimized'] = d.get("ebs_optimized")

            if d.get("shutdown_behaviour"):
                ec2_params['InstanceInitiatedShutdownBehavior'] = d.get(
                    "shutdown_behaviour")

            if d.get("private_ip_address"):
                ec2_params['PrivateIpAddress'] = d.get("private_ip_address")

            if d.get("tags"):
                tags = []
                for tag in d.get("tags").keys():
                    tags.append({'Key': tag, "Value": d.get("tags").get(tag)})
                ec2_params['TagSpecifications'] = [{
                    "ResourceType": "instance",
                    "Tags": tags
                }]

        try:
            cred_json = get_credentials_by_type(cloud_type="aws")
            if len(cred_json) > 0:
                credentials = cred_json[0]['credentials']
                ec2 = boto3.resource(
                    "ec2",
                    aws_access_key_id=credentials['access_key_id'],
                    aws_secret_access_key=credentials["secret_access_key"],
                    region_name=p_region)
            else:
                ec2 = boto3.resource("ec2", region_name=p_region)
            instance = ec2.create_instances(**ec2_params)
        except Exception as e:
            response['state'] = 'failed'
            response['msg'] = "ec2.create_instances(): " + str(e)
            return response

        return response
Beispiel #6
0
    def create_db(self, p_dict):
        ### optional parms #############
        engine = "postgres"
        multi_az = False
        public_access = False
        storage_encrypted = False
        monitoring_interval = 0  # Valid Values: 0, 1, 5, 10, 15, 30, 60

        ### mandatory parms ############
        for d in p_dict:
            try:
                p_region = d['region']
                db_params = {}
                db_params['DBName'] = d['db_name']
                db_params['DBInstanceClass'] = d['db_class']
                db_params['DBInstanceIdentifier'] = d['instance']
                db_params['MasterUsername'] = d['master_user']
                db_params['MasterUserPassword'] = d['password']
                #db_params['DBSubnetGroupName'] = d['subnet_group']
                db_params['Engine'] = d.get("engine", engine)
                db_params['MultiAZ'] = d.get("multi_az", multi_az)
                db_params['PubliclyAccessible'] = d.get(
                    "public_accessible", public_access)
                db_params['StorageEncrypted'] = d.get("storage_encrypted",
                                                      storage_encrypted)
                db_params['MonitoringInterval'] = d.get(
                    "monitoring_interval", monitoring_interval)

                s_port = str(d['port'])
                try:
                    db_params['Port'] = int(s_port)
                except Exception as e:
                    exit_message("port must be an integer", 1, self.isJson)

                db_params['StorageType'] = d['storage_type']
                s_allocated_storage = str(d['allocated_storage'])
                try:
                    db_params['AllocatedStorage'] = int(s_allocated_storage)
                except Exception as e:
                    exit_message("allocated storage GB must be an integer", 1,
                                 self.isJson)

                # All optional Params
                if d.get("availability_zone"):
                    db_params['AvailabilityZone'] = d.get("availability_zone")

                if d.get("security_groups"):
                    # List of security groups
                    db_params['DBSecurityGroups'] = d.get("security_groups")

                if d.get("vpc_security_group_ids"):
                    # List of VPC security groups
                    db_params['VpcSecurityGroupIds'] = d.get(
                        "vpc_security_group_ids")

                if d.get("maintenance_window"):
                    db_params['PreferredMaintenanceWindow'] = d.get(
                        "maintenance_window")

                if d.get("db_parameter_group"):
                    db_params['DBParameterGroupName'] = d.get(
                        "db_parameter_group")

                if d.get("backup_retention_period"):
                    # between 0 to 35
                    db_params['BackupRetentionPeriod'] = d.get(
                        "backup_retention_period")

                if d.get("backup_window"):
                    db_params['PreferredBackupWindow'] = d.get("backup_window")

                if d.get("engine_version"):
                    db_params['EngineVersion'] = d.get("engine_version")

                if d.get("version_upgrade"):
                    db_params['AutoMinorVersionUpgrade'] = d.get(
                        "version_upgrade")

                if d.get("licence_model"):
                    db_params['LicenseModel'] = d.get("licence_model")

                if d.get("iops"):
                    db_params['Iops'] = d.get("iops")

                if d.get("option_group_name"):
                    db_params['OptionGroupName'] = d.get("option_group_name")

                if d.get("charset"):
                    db_params['CharacterSetName'] = d.get("charset")

                if d.get("tags"):
                    # List of dict Eg : [ {"Key":'tag name',"Value":value}, ....]
                    db_params['Tags'] = d.get("tags")

                if d.get("cluster_identifier"):
                    db_params['DBClusterIdentifier'] = d.get(
                        "cluster_identifier")

                if d.get("tde_arn"):
                    db_params['TdeCredentialArn'] = d.get("tde_arn")

                if d.get("tde_arn_pwd"):
                    db_params['TdeCredentialPassword'] = d.get("tde_arn_pwd")

                if d.get("kms_key_id"):
                    db_params['KmsKeyId'] = d.get("kms_key_id")

                if d.get("domain"):
                    db_params['Domain'] = d.get("domain")

                if d.get("copy_tags"):
                    db_params['CopyTagsToSnapshot'] = d.get("copy_tags")

                if d.get("monitor_arn"):
                    db_params['MonitoringRoleArn'] = d.get("monitor_arn")

                if d.get("iam_role"):
                    db_params['DomainIAMRoleName'] = d.get("iam_role")

                break
            except Exception as e:
                exit_message("missing required field " + str(e), 1,
                             self.isJson)

        try:
            response = get_client("rds",
                                  p_region).create_db_instance(**db_params)
            return response
        except Exception as e:
            msg1 = "rds.create_db_instance(): "
            exit_message(msg1 + str(e), 1, self.isJson)

        return (0)