def _add_load_balancer_rules(module, oneandone_conn, load_balancer_id, rules): """ Adds new rules to a load_balancer. """ try: load_balancer_rules = [] for rule in rules: load_balancer_rule = oneandone.client.LoadBalancerRule( protocol=rule['protocol'], port_balancer=rule['port_balancer'], port_server=rule['port_server'], source=rule['source']) load_balancer_rules.append(load_balancer_rule) if module.check_mode: lb_id = get_load_balancer(oneandone_conn, load_balancer_id) if (load_balancer_rules and lb_id): return True return False load_balancer = oneandone_conn.add_load_balancer_rule( load_balancer_id=load_balancer_id, load_balancer_rules=load_balancer_rules ) return load_balancer except Exception as ex: module.fail_json(msg=str(ex))
def remove_load_balancer(module, oneandone_conn): """ Removes a load_balancer. module : AnsibleModule object oneandone_conn: authenticated oneandone object """ try: lb_id = module.params.get('name') load_balancer_id = get_load_balancer(oneandone_conn, lb_id) if module.check_mode: if load_balancer_id is None: _check_mode(module, False) _check_mode(module, True) load_balancer = oneandone_conn.delete_load_balancer(load_balancer_id) changed = True if load_balancer else False return (changed, { 'id': load_balancer['id'], 'name': load_balancer['name'] }) except Exception as ex: module.fail_json(msg=str(ex))
def create_load_balancer(module, oneandone_conn): """ Create a new load_balancer. module : AnsibleModule object oneandone_conn: authenticated oneandone object """ try: name = module.params.get('name') description = module.params.get('description') health_check_test = module.params.get('health_check_test') health_check_interval = module.params.get('health_check_interval') health_check_path = module.params.get('health_check_path') health_check_parse = module.params.get('health_check_parse') persistence = module.params.get('persistence') persistence_time = module.params.get('persistence_time') method = module.params.get('method') datacenter = module.params.get('datacenter') rules = module.params.get('rules') wait = module.params.get('wait') wait_timeout = module.params.get('wait_timeout') wait_interval = module.params.get('wait_interval') load_balancer_rules = [] datacenter_id = None if datacenter is not None: datacenter_id = get_datacenter(oneandone_conn, datacenter) if datacenter_id is None: module.fail_json( msg='datacenter %s not found.' % datacenter) for rule in rules: load_balancer_rule = oneandone.client.LoadBalancerRule( protocol=rule['protocol'], port_balancer=rule['port_balancer'], port_server=rule['port_server'], source=rule['source']) load_balancer_rules.append(load_balancer_rule) _check_mode(module, True) load_balancer_obj = oneandone.client.LoadBalancer( health_check_path=health_check_path, health_check_parse=health_check_parse, name=name, description=description, health_check_test=health_check_test, health_check_interval=health_check_interval, persistence=persistence, persistence_time=persistence_time, method=method, datacenter_id=datacenter_id ) load_balancer = oneandone_conn.create_load_balancer( load_balancer=load_balancer_obj, load_balancer_rules=load_balancer_rules ) if wait: wait_for_resource_creation_completion(oneandone_conn, OneAndOneResources.load_balancer, load_balancer['id'], wait_timeout, wait_interval) load_balancer = get_load_balancer(oneandone_conn, load_balancer['id'], True) # refresh changed = True if load_balancer else False _check_mode(module, False) return (changed, load_balancer) except Exception as ex: module.fail_json(msg=str(ex))
def update_load_balancer(module, oneandone_conn): """ Updates a load_balancer based on input arguments. Load balancer rules and server ips can be added/removed to/from load balancer. Load balancer name, description, health_check_test, health_check_interval, persistence, persistence_time, and method can be updated as well. module : AnsibleModule object oneandone_conn: authenticated oneandone object """ load_balancer_id = module.params.get('load_balancer') name = module.params.get('name') description = module.params.get('description') health_check_test = module.params.get('health_check_test') health_check_interval = module.params.get('health_check_interval') health_check_path = module.params.get('health_check_path') health_check_parse = module.params.get('health_check_parse') persistence = module.params.get('persistence') persistence_time = module.params.get('persistence_time') method = module.params.get('method') add_server_ips = module.params.get('add_server_ips') remove_server_ips = module.params.get('remove_server_ips') add_rules = module.params.get('add_rules') remove_rules = module.params.get('remove_rules') changed = False load_balancer = get_load_balancer(oneandone_conn, load_balancer_id, True) if load_balancer is None: _check_mode(module, False) if (name or description or health_check_test or health_check_interval or health_check_path or health_check_parse or persistence or persistence_time or method): _check_mode(module, True) load_balancer = oneandone_conn.modify_load_balancer( load_balancer_id=load_balancer['id'], name=name, description=description, health_check_test=health_check_test, health_check_interval=health_check_interval, health_check_path=health_check_path, health_check_parse=health_check_parse, persistence=persistence, persistence_time=persistence_time, method=method) changed = True if add_server_ips: if module.check_mode: _check_mode(module, _add_server_ips(module, oneandone_conn, load_balancer['id'], add_server_ips)) load_balancer = _add_server_ips(module, oneandone_conn, load_balancer['id'], add_server_ips) changed = True if remove_server_ips: chk_changed = False for server_ip_id in remove_server_ips: if module.check_mode: chk_changed |= _remove_load_balancer_server(module, oneandone_conn, load_balancer['id'], server_ip_id) _remove_load_balancer_server(module, oneandone_conn, load_balancer['id'], server_ip_id) _check_mode(module, chk_changed) load_balancer = get_load_balancer(oneandone_conn, load_balancer['id'], True) changed = True if add_rules: load_balancer = _add_load_balancer_rules(module, oneandone_conn, load_balancer['id'], add_rules) _check_mode(module, load_balancer) changed = True if remove_rules: chk_changed = False for rule_id in remove_rules: if module.check_mode: chk_changed |= _remove_load_balancer_rule(module, oneandone_conn, load_balancer['id'], rule_id) _remove_load_balancer_rule(module, oneandone_conn, load_balancer['id'], rule_id) _check_mode(module, chk_changed) load_balancer = get_load_balancer(oneandone_conn, load_balancer['id'], True) changed = True try: return (changed, load_balancer) except Exception as ex: module.fail_json(msg=str(ex))
def create_server(module, oneandone_conn): """ Create new server module : AnsibleModule object oneandone_conn: authenticated oneandone object Returns a dictionary containing a 'changed' attribute indicating whether any server was added, and a 'servers' attribute with the list of the created servers' hostname, id and ip addresses. """ hostname = module.params.get('hostname') description = module.params.get('description') auto_increment = module.params.get('auto_increment') count = module.params.get('count') fixed_instance_size = module.params.get('fixed_instance_size') vcore = module.params.get('vcore') cores_per_processor = module.params.get('cores_per_processor') ram = module.params.get('ram') hdds = module.params.get('hdds') datacenter = module.params.get('datacenter') appliance = module.params.get('appliance') ssh_key = module.params.get('ssh_key') private_network = module.params.get('private_network') monitoring_policy = module.params.get('monitoring_policy') firewall_policy = module.params.get('firewall_policy') load_balancer = module.params.get('load_balancer') server_type = module.params.get('server_type') wait = module.params.get('wait') wait_timeout = module.params.get('wait_timeout') wait_interval = module.params.get('wait_interval') datacenter_id = get_datacenter(oneandone_conn, datacenter) if datacenter_id is None: _check_mode(module, False) module.fail_json( msg='datacenter %s not found.' % datacenter) fixed_instance_size_id = None if fixed_instance_size: fixed_instance_size_id = get_fixed_instance_size( oneandone_conn, fixed_instance_size) if fixed_instance_size_id is None: _check_mode(module, False) module.fail_json( msg='fixed_instance_size %s not found.' % fixed_instance_size) appliance_id = get_appliance(oneandone_conn, appliance) if appliance_id is None: _check_mode(module, False) module.fail_json( msg='appliance %s not found.' % appliance) private_network_id = None if private_network: private_network_id = get_private_network( oneandone_conn, private_network) if private_network_id is None: _check_mode(module, False) module.fail_json( msg='private network %s not found.' % private_network) monitoring_policy_id = None if monitoring_policy: monitoring_policy_id = get_monitoring_policy( oneandone_conn, monitoring_policy) if monitoring_policy_id is None: _check_mode(module, False) module.fail_json( msg='monitoring policy %s not found.' % monitoring_policy) firewall_policy_id = None if firewall_policy: firewall_policy_id = get_firewall_policy( oneandone_conn, firewall_policy) if firewall_policy_id is None: _check_mode(module, False) module.fail_json( msg='firewall policy %s not found.' % firewall_policy) load_balancer_id = None if load_balancer: load_balancer_id = get_load_balancer( oneandone_conn, load_balancer) if load_balancer_id is None: _check_mode(module, False) module.fail_json( msg='load balancer %s not found.' % load_balancer) if auto_increment: hostnames = _auto_increment_hostname(count, hostname) descriptions = _auto_increment_description(count, description) else: hostnames = [hostname] * count descriptions = [description] * count hdd_objs = [] if hdds: for hdd in hdds: hdd_objs.append(oneandone.client.Hdd( size=hdd['size'], is_main=hdd['is_main'] )) servers = [] for index, name in enumerate(hostnames): server = _create_server( module=module, oneandone_conn=oneandone_conn, hostname=name, description=descriptions[index], fixed_instance_size_id=fixed_instance_size_id, vcore=vcore, cores_per_processor=cores_per_processor, ram=ram, hdds=hdd_objs, datacenter_id=datacenter_id, appliance_id=appliance_id, ssh_key=ssh_key, private_network_id=private_network_id, monitoring_policy_id=monitoring_policy_id, firewall_policy_id=firewall_policy_id, load_balancer_id=load_balancer_id, server_type=server_type, wait=wait, wait_timeout=wait_timeout, wait_interval=wait_interval) if server: servers.append(server) changed = False if servers: for server in servers: if server: _check_mode(module, True) _check_mode(module, False) servers = [_insert_network_data(_server) for _server in servers] changed = True _check_mode(module, False) return (changed, servers)