예제 #1
0
def delete_public_ip_block(client, ipblockid):
    try:
        ip_block = client.node.ex_get_public_ip_block(ipblockid)
        client.node.ex_delete_public_ip_block(ip_block)
        click.secho("Public IP block with id {0} deleted.".format(ipblockid), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #2
0
def remove_disk(client, serverid, serverfilteripv6, diskid):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)

    # See if we can find the disk to remove
    disk_to_remove = _find_disk_id_from_node(node, diskid)

    try:
        response = client.node.ex_remove_storage_from_node(
            node, disk_to_remove.id)
        if response is True:
            click.secho("Removed disk {0} from {1}".format(
                disk_to_remove.id, serverid),
                        fg='green',
                        bold=True)
        else:
            click.secho(
                "Something went wrong attempting to remove disk {0} from {1}".
                format(disk_to_remove.id, serverid),
                fg='red',
                bold=True)
            exit(1)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #3
0
def create_vlan(client, networkdomainid, name, baseipv4address, description, prefixsize):
    try:
        networkdomainid = DimensionDataNetworkDomain(networkdomainid, None, None, None, None, None)
        vlan = client.node.ex_create_vlan(networkdomainid, name, baseipv4address, description, prefixsize)
        click.secho("Successfully created VLAN {0}".format(vlan.id), bold=True, fg='green')
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #4
0
def info(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    try:
        details = client.backup.ex_get_backup_details_for_target(serverid)
        click.secho("Backup Details for {0}".format(serverid))
        click.secho("Service Plan: {0}".format(details.service_plan[0]))
        if len(details.clients) > 0:
            click.secho("Clients:")
            for backup_client in details.clients:
                click.secho("")
                click.secho("{0}".format(backup_client.type), bold=True)
                click.secho("Description: {0}".format(
                    backup_client.description))
                click.secho("Schedule: {0}".format(
                    backup_client.schedule_policy))
                click.secho("Retention: {0}".format(
                    backup_client.storage_policy))
                click.secho("DownloadURL: {0}".format(
                    backup_client.download_url))
                if backup_client.running_job is not None:
                    click.secho("Running Job", bold=True)
                    click.secho("ID: {0}".format(backup_client.running_job.id))
                    click.secho("Status: {0}".format(
                        backup_client.running_job.status))
                    click.secho("Percentage Complete: {0}".format(
                        backup_client.running_job.percentage))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #5
0
def modify_disk(client, serverid, serverfilteripv6, diskid, size, speed):
    # Validate parameters, wish click had exculsion
    if size is not None and speed is not None:
        click.secho("Only one modify disk operation can happen at a time.  Please choose either --speed or --size",
                    fg='red', bold=True)
        exit(1)
    elif size is None and speed is None:
        click.secho("Must choose one of --speed or --size to change", fg='red', bold=True)
        exit(1)

    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)

    # See if we can find the disk to modify
    disk_to_modify = _find_disk_id_from_node(node, diskid)

    try:
        if speed is not None:
            response = client.node.ex_change_storage_speed(node, disk_to_modify.id, speed)
        else:
            response = client.node.ex_change_storage_size(node, disk_to_modify.id, size)
        if response is True:
            click.secho("Successfully modified disk {0} from {1}".format(disk_to_modify.scsi_id, serverid),
                        fg='green', bold=True)
        else:
            click.secho("Something went wrong attempting to modify disk {0} from {1}".format(disk_to_modify.id,
                                                                                             serverid),
                        fg='red', bold=True)
            exit(1)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #6
0
def create_firewall_rule(client, name, action, networkdomainid, ipversion,
                         protocol, sourceip, sourceip_prefix_size,
                         sourcestartport, sourceendport, destinationip,
                         destinationip_prefix_size, destinationstartport,
                         destinationendport, position):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        source_any = True if sourceip == 'ANY' else False
        dest_any = True if destinationip == 'ANY' else False
        source_address = DimensionDataFirewallAddress(source_any, sourceip,
                                                      sourceip_prefix_size,
                                                      sourcestartport,
                                                      sourceendport)
        dest_address = DimensionDataFirewallAddress(dest_any, destinationip,
                                                    destinationip_prefix_size,
                                                    destinationstartport,
                                                    destinationendport)
        rule = DimensionDataFirewallRule(id=None,
                                         name=name,
                                         action=action,
                                         location=network_domain.location,
                                         network_domain=network_domain,
                                         status=None,
                                         ip_version=ipversion,
                                         protocol=protocol,
                                         source=source_address,
                                         destination=dest_address,
                                         enabled=True)
        client.node.ex_create_firewall_rule(network_domain, rule, position)
        click.secho("Firewall rule {0} created in {1}".format(
            name, network_domain.name),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #7
0
def remove_client(client, serverid, clienttype, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    try:
        details = client.backup.ex_get_backup_details_for_target(serverid)
        if len(details.clients) <= 0:
            click.secho("No clients found for {0}".format(serverid),
                        fg='red',
                        bold=True)
            exit(1)
        else:
            for backup_client in details.clients:
                if backup_client.type.type == clienttype:
                    client.backup.ex_remove_client_from_target(
                        serverid, backup_client)
                    click.secho(
                        "Successfully removed client {0} from {1}".format(
                            clienttype, serverid),
                        fg='green',
                        bold=True)
                    exit(0)
            click.secho("Could not find a client {0} on {1}".format(
                clienttype, serverid),
                        fg='red',
                        bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #8
0
def delete_vlan(client, vlanid):
    try:
        client.node.ex_delete_vlan(
            DimensionDataVlan(vlanid, None, None, None, None, None, None, None,
                              None, None, None, None))
        click.secho("Vlan {0} deleted.".format(vlanid), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #9
0
def create_network(client, datacenterid, name, serviceplan):
    try:
        client.node.ex_create_network(datacenterid, name, serviceplan)
        click.secho("Network {0} created in {1}".format(name, datacenterid),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #10
0
def delete_firewall_rule(client, networkdomainid, ruleid):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        rule = client.node.ex_get_firewall_rule(network_domain, ruleid)
        client.node.ex_delete_firewall_rule(rule)
        click.secho("Firewall rule {0} deleted.".format(ruleid), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #11
0
def add_public_ip_block(client, networkdomainid):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        ip_block = client.node.ex_add_public_ip_block_to_network_domain(network_domain)
        click.secho("Public IP Block with base IP of {0} and block size of {1} added to {2}".format(ip_block.base_ip,
                    ip_block.size, networkdomainid), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #12
0
def delete_network(client, networkid):
    try:
        client.node.ex_delete_network(networkid)
        click.secho("Network {0} deleted.".format(networkid),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #13
0
def add_client(client, serverid, clienttype, storagepolicy, schedulepolicy, triggeron, notifyemail, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        client.backup.ex_add_client_to_target(serverid, clienttype, storagepolicy,
                                              schedulepolicy, triggeron, notifyemail)
        click.secho("Enabled {0} client on {1}".format(clienttype, serverid), fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #14
0
def enable(client, serverid, serviceplan, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        extra = {'service_plan': serviceplan}
        client.backup.create_target(serverid, serverid, extra=extra)
        click.secho("Backups enabled for {0}.  Service plan: {1}".format(serverid, serviceplan), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #15
0
def create(client, name, description, imageid, autostart, administratorpassword, networkdomainid, vlanid):
    try:
        response = client.node.create_node(name, imageid, administratorpassword,
                                           description, ex_network_domain=networkdomainid,
                                           ex_vlan=vlanid, ex_is_started=autostart)
        click.secho("Node starting up: {0}.  IPv6: {1}".format(response.id, response.extra['ipv6']),
                    fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #16
0
def enable(client, serverid, serviceplan, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        extra = {'service_plan': serviceplan}
        client.backup.create_target(serverid, serverid, extra=extra)
        click.secho("Backups enabled for {0}.  Service plan: {1}".format(serverid, serviceplan), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #17
0
def delete_public_ip_block(client, ipblockid):
    try:
        ip_block = client.node.ex_get_public_ip_block(ipblockid)
        client.node.ex_delete_public_ip_block(ip_block)
        click.secho("Public IP block with id {0} deleted.".format(ipblockid),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #18
0
def add_client(client, serverid, clienttype, storagepolicy, schedulepolicy, triggeron, notifyemail, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        client.backup.ex_add_client_to_target(serverid, clienttype, storagepolicy,
                                              schedulepolicy, triggeron, notifyemail)
        click.secho("Enabled {0} client on {1}".format(clienttype, serverid), fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #19
0
def delete_firewall_rule(client, networkdomainid, ruleid):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        rule = client.node.ex_get_firewall_rule(network_domain, ruleid)
        client.node.ex_delete_firewall_rule(rule)
        click.secho("Firewall rule {0} deleted.".format(ruleid),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #20
0
def list(client, datacenterid):
    try:
        locations = client.node.list_locations(ex_id=datacenterid)
        for location in locations:
            click.secho("{0}".format(location.name), bold=True)
            click.secho("ID: {0}".format(location.id))
            click.secho("Description: {0}".format(location.country))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #21
0
def update_ram(client, serverid, serverfilteripv6, ramingb):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        client.node.ex_reconfigure_node(node, ramingb, None, None, None)
        click.secho("Server {0} ram is being changed to {1}GB".format(serverid, ramingb), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #22
0
def delete_network_domain(client, networkdomainid):
    try:
        client.node.ex_delete_network_domain(
            DimensionDataNetworkDomain(networkdomainid, None, None, None, None,
                                       None))
        click.secho("Network Domain {0} deleted.".format(networkdomainid),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #23
0
def list(client, datacenterid):
    try:
        locations = client.node.list_locations(ex_id=datacenterid)
        for location in locations:
            click.secho("{0}".format(location.name), bold=True)
            click.secho("ID: {0}".format(location.id))
            click.secho("Description: {0}".format(location.country))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #24
0
def delete_network_domain(client, networkdomainid):
    try:
        client.node.ex_delete_network_domain(
            DimensionDataNetworkDomain(
                networkdomainid, None, None, None, None, None
            )
        )
        click.secho("Network Domain {0} deleted.".format(networkdomainid), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #25
0
def update_cpu_count(client, serverid, serverfilteripv6, cpucount):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        client.node.ex_reconfigure_node(node, None, cpucount, None, None)
        click.secho("Server {0} CPU Count changing to {1}".format(serverid, cpucount), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #26
0
def delete_vlan(client, vlanid):
    try:
        client.node.ex_delete_vlan(
            DimensionDataVlan(
                vlanid, None, None, None, None, None, None, None, None, None, None, None
            )
        )
        click.secho("Vlan {0} deleted.".format(vlanid), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #27
0
def disable(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        response = client.backup.delete_target(serverid)
        if response is True:
            click.secho("Backups disabled for {0}".format(serverid), fg='green', bold=True)
        else:
            click.secho("Backups not disabled for {0}".format(serverid, fg='red', bold=True))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #28
0
def download_url(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        details = client.backup.ex_get_backup_details_for_target(serverid)
        if len(details.clients) < 1:
            click.secho("No clients configured so there is no backup url", fg='red', bold=True)
            exit(1)
        click.secho("{0}".format(details.clients[0].download_url))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #29
0
def disable(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        response = client.backup.delete_target(serverid)
        if response is True:
            click.secho("Backups disabled for {0}".format(serverid), fg='green', bold=True)
        else:
            click.secho("Backups not disabled for {0}".format(serverid, fg='red', bold=True))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #30
0
def download_url(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        details = client.backup.ex_get_backup_details_for_target(serverid)
        if len(details.clients) < 1:
            click.secho("No clients configured so there is no backup url", fg='red', bold=True)
            exit(1)
        click.secho("{0}".format(details.clients[0].download_url))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #31
0
def list_networks(client, datacenterid):
    try:
        networks = client.node.ex_list_networks(location=datacenterid)
        for network in networks:
            click.secho("{0}".format(network.name), bold=True)
            click.secho("ID: {0}".format(network.id))
            click.secho("Description: {0}".format(network.description))
            click.secho("PrivateNet: {0}".format(network.private_net))
            click.secho("Location: {0}".format(network.location.id))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #32
0
def add_public_ip_block(client, networkdomainid):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        ip_block = client.node.ex_add_public_ip_block_to_network_domain(
            network_domain)
        click.secho(
            "Public IP Block with base IP of {0} and block size of {1} added to {2}"
            .format(ip_block.base_ip, ip_block.size, networkdomainid),
            fg='green',
            bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #33
0
def list_networks(client, datacenterid):
    try:
        networks = client.node.ex_list_networks(location=datacenterid)
        for network in networks:
            click.secho("{0}".format(network.name), bold=True)
            click.secho("ID: {0}".format(network.id))
            click.secho("Description: {0}".format(network.description))
            click.secho("PrivateNet: {0}".format(network.private_net))
            click.secho("Location: {0}".format(network.location.id))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #34
0
def list_available_client_types(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        client_types = client.backup.ex_list_available_client_types(serverid)
        if len(client_types) < 1:
            click.secho("No available clients types for {0}".format(serverid), fg='red', bold=True)
            exit(1)
        click.secho("Available Client Types:", bold=True)
        for client_type in client_types:
            click.secho("{0}".format(client_type.type))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #35
0
def list_available_storage_policies(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        storage_policies = client.backup.ex_list_available_storage_policies(serverid)
        if len(storage_policies) < 1:
            click.secho("No available storage_policies for {0}".format(serverid), fg='red', bold=True)
            exit(1)
        click.secho("Available Storage Policies:", bold=True)
        for storage_policy in storage_policies:
            click.secho("{0}".format(storage_policy.name))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #36
0
def list_available_client_types(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        client_types = client.backup.ex_list_available_client_types(serverid)
        if len(client_types) < 1:
            click.secho("No available clients types for {0}".format(serverid), fg='red', bold=True)
            exit(1)
        click.secho("Available Client Types:", bold=True)
        for client_type in client_types:
            click.secho("{0}".format(client_type.type))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #37
0
def list_available_storage_policies(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        storage_policies = client.backup.ex_list_available_storage_policies(serverid)
        if len(storage_policies) < 1:
            click.secho("No available storage_policies for {0}".format(serverid), fg='red', bold=True)
            exit(1)
        click.secho("Available Storage Policies:", bold=True)
        for storage_policy in storage_policies:
            click.secho("{0}".format(storage_policy.name))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #38
0
def list_network_domains(client, datacenterid):
    try:
        network_domains = client.node.ex_list_network_domains(location=datacenterid)
        for network_domain in network_domains:
            click.secho("{0}".format(network_domain.name), bold=True)
            click.secho("ID: {0}".format(network_domain.id))
            click.secho("Description: {0}".format(network_domain.description))
            click.secho("Plan: {0}".format(network_domain.plan))
            click.secho("Location: {0}".format(network_domain.location.id))
            click.secho("Status: {0}".format(network_domain.status))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #39
0
def create_vlan(client, networkdomainid, name, baseipv4address, description,
                prefixsize):
    try:
        networkdomainid = DimensionDataNetworkDomain(networkdomainid, None,
                                                     None, None, None, None)
        vlan = client.node.ex_create_vlan(networkdomainid, name,
                                          baseipv4address, description,
                                          prefixsize)
        click.secho("Successfully created VLAN {0}".format(vlan.id),
                    bold=True,
                    fg='green')
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #40
0
def reboot(client, serverid, serverfilteripv6):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        response = client.node.reboot_node(node)
        if response is True:
            click.secho("Server {0} is being rebooted".format(serverid), fg='green', bold=True)
        else:
            click.secho("Something went wrong with attempting to reboot {0}".format(serverid))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #41
0
def shutdown_hard(client, serverid, serverfilteripv6):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        response = client.node.ex_power_off(node)
        if response is True:
            click.secho("Server {0} is shutting down hard".format(serverid), fg='green', bold=True)
        else:
            click.secho("Something went wrong when attempting to shut down {0}".format(serverid))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #42
0
def update_ram(client, serverid, serverfilteripv6, ramingb):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        client.node.ex_reconfigure_node(node, ramingb, None, None, None)
        click.secho("Server {0} ram is being changed to {1}GB".format(
            serverid, ramingb),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #43
0
def list_network_domains(client, datacenterid, query):
    try:
        network_domains = client.node.ex_list_network_domains(location=datacenterid)
        response = DiDataCLIFilterableResponse()
        for network_domain in network_domains:
            response.add(_network_domain_to_dict(network_domain))
        if not response.is_empty():
            if query is not None:
                response.do_filter(query)
            click.secho(response.to_string(client.output_type))
        else:
            click.secho("No network domains found", fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #44
0
def add_disk(client, serverid, serverfilteripv6, size, speed):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        response = client.node.ex_add_storage_to_node(node, size, speed)
        if response is True:
            click.secho("Adding disk {0} {1}GB to {2}".format(speed, size, serverid), fg='green', bold=True)
        else:
            click.secho("Something went wrong attempting to add disk to {0}".format(serverid), fg='red', bold=True)
            exit(1)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #45
0
def list_network_domains(client, datacenterid):
    try:
        network_domains = client.node.ex_list_network_domains(
            location=datacenterid)
        for network_domain in network_domains:
            click.secho("{0}".format(network_domain.name), bold=True)
            click.secho("ID: {0}".format(network_domain.id))
            click.secho("Description: {0}".format(network_domain.description))
            click.secho("Plan: {0}".format(network_domain.plan))
            click.secho("Location: {0}".format(network_domain.location.id))
            click.secho("Status: {0}".format(network_domain.status))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #46
0
def update_cpu_count(client, serverid, serverfilteripv6, cpucount):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        client.node.ex_reconfigure_node(node, None, cpucount, None, None)
        click.secho("Server {0} CPU Count changing to {1}".format(
            serverid, cpucount),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #47
0
def list_public_ip_blocks(client, networkdomainid, query):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        ip_blocks = client.node.ex_list_public_ip_blocks(network_domain)
        response = DiDataCLIFilterableResponse()
        for ip_block in ip_blocks:
            response.add(_ip_block_to_dict(ip_block))
        if not response.is_empty():
            if query is not None:
                response.do_filter(query)
            click.secho(response.to_string(client.output_type))
        else:
            click.secho("No public ip blocks found", fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #48
0
def list_firewall_rules(client, networkdomainid, query):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        rules = client.node.ex_list_firewall_rules(network_domain)
        response = DiDataCLIFilterableResponse()
        for rule in rules:
            response.add(_firewall_rule_to_dict(rule))
        if not response.is_empty():
            if query is not None:
                response.do_filter(query)
            click.secho(response.to_string(client.output_type))
        else:
            click.secho("No firewall rules found", fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #49
0
def list_network_domains(client, datacenterid, query):
    try:
        network_domains = client.node.ex_list_network_domains(
            location=datacenterid)
        response = DiDataCLIFilterableResponse()
        for network_domain in network_domains:
            response.add(_network_domain_to_dict(network_domain))
        if not response.is_empty():
            if query is not None:
                response.do_filter(query)
            click.secho(response.to_string(client.output_type))
        else:
            click.secho("No network domains found", fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #50
0
def list_firewall_rules(client, networkdomainid, query):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        rules = client.node.ex_list_firewall_rules(network_domain)
        response = DiDataCLIFilterableResponse()
        for rule in rules:
            response.add(_firewall_rule_to_dict(rule))
        if not response.is_empty():
            if query is not None:
                response.do_filter(query)
            click.secho(response.to_string(client.output_type))
        else:
            click.secho("No firewall rules found", fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #51
0
def list_public_ip_blocks(client, networkdomainid, query):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        ip_blocks = client.node.ex_list_public_ip_blocks(network_domain)
        response = DiDataCLIFilterableResponse()
        for ip_block in ip_blocks:
            response.add(_ip_block_to_dict(ip_block))
        if not response.is_empty():
            if query is not None:
                response.do_filter(query)
            click.secho(response.to_string(client.output_type))
        else:
            click.secho("No public ip blocks found", fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #52
0
def create(client, name, description, imageid, autostart,
           administratorpassword, networkdomainid, vlanid):
    try:
        response = client.node.create_node(name,
                                           imageid,
                                           administratorpassword,
                                           description,
                                           ex_network_domain=networkdomainid,
                                           ex_vlan=vlanid,
                                           ex_is_started=autostart)
        click.secho("Node starting up: {0}.  IPv6: {1}".format(
            response.id, response.extra['ipv6']),
                    fg='green',
                    bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #53
0
def list_customer_images(client, datacenterid):
    try:
        images = client.node.ex_list_customer_images(location=datacenterid)
        for image in images:
            click.secho("{}".format(image.extra['OS_displayName']), bold=True)
            click.secho("ID: {0}".format(image.id))
            click.secho("Description: {0}".format(image.extra['description']))
            click.secho("CPU Count: {0} Cores per Socket: {1} Speed: {2}".format(
                image.extra['cpu'].cpu_count,
                image.extra['cpu'].cores_per_socket,
                image.extra['cpu'].performance
            ))
            click.secho("Memory: {0}GB".format(image.extra['memoryGb']))
            click.secho("Location: {0}".format(image.extra['location'].id))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #54
0
def list_customer_images(client, datacenterid):
    try:
        images = client.node.ex_list_customer_images(location=datacenterid)
        for image in images:
            click.secho("{}".format(image.extra['OS_displayName']), bold=True)
            click.secho("ID: {0}".format(image.id))
            click.secho("Description: {0}".format(image.extra['description']))
            click.secho(
                "CPU Count: {0} Cores per Socket: {1} Speed: {2}".format(
                    image.extra['cpu'].cpu_count,
                    image.extra['cpu'].cores_per_socket,
                    image.extra['cpu'].performance))
            click.secho("Memory: {0}GB".format(image.extra['memoryGb']))
            click.secho("Location: {0}".format(image.extra['location'].id))
            click.secho("")
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #55
0
def shutdown_hard(client, serverid, serverfilteripv6):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        response = client.node.ex_power_off(node)
        if response is True:
            click.secho("Server {0} is shutting down hard".format(serverid),
                        fg='green',
                        bold=True)
        else:
            click.secho(
                "Something went wrong when attempting to shut down {0}".format(
                    serverid))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #56
0
def reboot_hard(client, serverid, serverfilteripv6):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client,
                                                     ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)
    try:
        response = client.node.ex_reset(node)
        if response is True:
            click.secho("Server {0} is being rebooted".format(serverid),
                        fg='green',
                        bold=True)
        else:
            click.secho(
                "Something went wrong with attempting to reboot {0}".format(
                    serverid))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #57
0
def remove_client(client, serverid, clienttype, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        details = client.backup.ex_get_backup_details_for_target(serverid)
        if len(details.clients) <= 0:
            click.secho("No clients found for {0}".format(serverid), fg='red', bold=True)
            exit(1)
        else:
            for backup_client in details.clients:
                if backup_client.type.type == clienttype:
                    client.backup.ex_remove_client_from_target(serverid, backup_client)
                    click.secho("Successfully removed client {0} from {1}".format(clienttype, serverid),
                                fg='green', bold=True)
                    exit(0)
            click.secho("Could not find a client {0} on {1}".format(clienttype, serverid), fg='red', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #58
0
def create_firewall_rule(client, name, action, networkdomainid, ipversion, protocol, sourceip, sourceip_prefix_size,
                         sourcestartport, sourceendport, destinationip, destinationip_prefix_size, destinationstartport,
                         destinationendport, position):
    try:
        network_domain = client.node.ex_get_network_domain(networkdomainid)
        source_any = True if sourceip == 'ANY' else False
        dest_any = True if destinationip == 'ANY' else False
        source_address = DimensionDataFirewallAddress(source_any, sourceip, sourceip_prefix_size, sourcestartport,
                                                      sourceendport)
        dest_address = DimensionDataFirewallAddress(dest_any, destinationip, destinationip_prefix_size,
                                                    destinationstartport, destinationendport)
        rule = DimensionDataFirewallRule(id=None, name=name, action=action, location=network_domain.location,
                                         network_domain=network_domain, status=None, ip_version=ipversion,
                                         protocol=protocol, source=source_address, destination=dest_address,
                                         enabled=True)
        client.node.ex_create_firewall_rule(network_domain, rule, position)
        click.secho("Firewall rule {0} created in {1}".format(name, network_domain.name), fg='green', bold=True)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #59
0
def remove_disk(client, serverid, serverfilteripv6, diskid):
    node = None
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    node = client.node.ex_get_node_by_id(serverid)

    # See if we can find the disk to remove
    disk_to_remove = _find_disk_id_from_node(node, diskid)

    try:
        response = client.node.ex_remove_storage_from_node(node, disk_to_remove.id)
        if response is True:
            click.secho("Removed disk {0} from {1}".format(disk_to_remove.id, serverid), fg='green', bold=True)
        else:
            click.secho("Something went wrong attempting to remove disk {0} from {1}".format(disk_to_remove.id,
                                                                                             serverid),
                        fg='red', bold=True)
            exit(1)
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)
예제 #60
0
def info(client, serverid, serverfilteripv6):
    if not serverid:
        serverid = get_single_server_id_from_filters(client, ex_ipv6=serverfilteripv6)
    try:
        details = client.backup.ex_get_backup_details_for_target(serverid)
        click.secho("Backup Details for {0}".format(serverid))
        click.secho("Service Plan: {0}".format(details.service_plan[0]))
        if len(details.clients) > 0:
            click.secho("Clients:")
            for backup_client in details.clients:
                click.secho("")
                click.secho("{0}".format(backup_client.type), bold=True)
                click.secho("Description: {0}".format(backup_client.description))
                click.secho("Schedule: {0}".format(backup_client.schedule_policy))
                click.secho("Retention: {0}".format(backup_client.storage_policy))
                click.secho("DownloadURL: {0}".format(backup_client.download_url))
                if backup_client.running_job is not None:
                    click.secho("Running Job", bold=True)
                    click.secho("ID: {0}".format(backup_client.running_job.id))
                    click.secho("Status: {0}".format(backup_client.running_job.status))
                    click.secho("Percentage Complete: {0}".format(backup_client.running_job.percentage))
    except DimensionDataAPIException as e:
        handle_dd_api_exception(e)