From 05109715da7eff6cf789be35f33d81d284ebf4cc Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Tue, 17 Jan 2017 18:50:29 +0200 Subject: [PATCH] NSX-1: partially move validation for network* to codebase --- cloudify_nsx/network/dhcp_bind.py | 45 +++++- cloudify_nsx/network/dhcp_pool.py | 32 +++- cloudify_nsx/network/dlr.py | 38 ++++- cloudify_nsx/network/esg_firewall.py | 52 +++++- cloudify_nsx/network/esg_gateway.py | 23 ++- cloudify_nsx/network/esg_interface.py | 49 +++++- cloudify_nsx/network/esg_nat.py | 43 ++++- cloudify_nsx/network/esg_route.py | 31 +++- cloudify_nsx/network/lswitch.py | 24 ++- plugin.yaml | 220 -------------------------- 10 files changed, 328 insertions(+), 229 deletions(-) diff --git a/cloudify_nsx/network/dhcp_bind.py b/cloudify_nsx/network/dhcp_bind.py index 8e3632c..f082b2a 100644 --- a/cloudify_nsx/network/dhcp_bind.py +++ b/cloudify_nsx/network/dhcp_bind.py @@ -21,8 +21,51 @@ @operation def create(**kwargs): + validation_rules = { + "esg_id": { + "required": True + }, + "vm_id": { + "set_none": True + }, + "vnic_id": { + "set_none": True, + "type": "string" + }, + "mac": { + "set_none": True + }, + "hostname": { + "required": True + }, + "ip": { + "required": True + }, + "default_gateway": { + "set_none": True + }, + "subnet_mask": { + "set_none": True + }, + "domain_name": { + "set_none": True + }, + "dns_server_1": { + "set_none": True + }, + "dns_server_2": { + "set_none": True + }, + "lease_time": { + "set_none": True + }, + "auto_dns": { + "set_none": True + } + } + use_existing, bind_dict = common.get_properties_and_validate( - 'bind', kwargs + 'bind', kwargs, validation_rules ) if use_existing: diff --git a/cloudify_nsx/network/dhcp_pool.py b/cloudify_nsx/network/dhcp_pool.py index 9e71a51..aa455da 100644 --- a/cloudify_nsx/network/dhcp_pool.py +++ b/cloudify_nsx/network/dhcp_pool.py @@ -21,8 +21,38 @@ @operation def create(**kwargs): + validations_rules = { + "esg_id": { + "required": True + }, + "ip_range": { + "required": True + }, + "default_gateway": { + "set_none": True + }, + "subnet_mask": { + "set_none": True + }, + "domain_name": { + "set_none": True + }, + "dns_server_1": { + "set_none": True + }, + "dns_server_2": { + "set_none": True + }, + "lease_time": { + "set_none": True + }, + "auto_dns": { + "set_none": True + } + } + use_existing, pool_dict = common.get_properties_and_validate( - 'pool', kwargs + 'pool', kwargs, validations_rules ) if use_existing: diff --git a/cloudify_nsx/network/dlr.py b/cloudify_nsx/network/dlr.py index de4f4de..c4a76a8 100644 --- a/cloudify_nsx/network/dlr.py +++ b/cloudify_nsx/network/dlr.py @@ -22,8 +22,44 @@ @operation def create(**kwargs): + validation_rules = { + "name": { + "required": True + }, + "dlr_pwd": { + "required": True + }, + "dlr_size": { + "required": True + }, + "datacentermoid": { + "required": True + }, + "datastoremoid": { + "required": True + }, + "resourcepoolid": { + "required": True + }, + "ha_ls_id": { + "required": True + }, + "uplink_ls_id": { + "required": True + }, + "uplink_ip": { + "required": True + }, + "uplink_subnet": { + "required": True + }, + "uplink_dgw": { + "required": True + } + } + use_existing, router_dict = common.get_properties_and_validate( - 'router', kwargs + 'router', kwargs, validation_rules ) ctx.logger.info("checking %s" % router_dict["name"]) diff --git a/cloudify_nsx/network/esg_firewall.py b/cloudify_nsx/network/esg_firewall.py index 4e97763..d2c5937 100644 --- a/cloudify_nsx/network/esg_firewall.py +++ b/cloudify_nsx/network/esg_firewall.py @@ -21,9 +21,59 @@ @operation def create(**kwargs): + validation_rules = { + "esg_id": { + "required": True + }, + "ruleTag": { + "set_none": True + }, + "name": { + "set_none": True + }, + "source": { + "set_none": True + }, + "destination": { + "set_none": True + }, + "application": { + "set_none": True + }, + "matchTranslated": { + "default": False, + "type": "boolean" + }, + "direction": { + "values": [ + "in", + "out" + ], + "set_none": True + }, + "action": { + "required": True, + "values": [ + "accept", + "deny", + "reject" + ] + }, + "enabled": { + "default": True, + "type": "boolean" + }, + "loggingEnabled": { + "default": False, + "type": "boolean" + }, + "description": { + "set_none": True + } + } use_existing, firewall_dict = common.get_properties_and_validate( - 'rule', kwargs + 'rule', kwargs, validation_rules ) if use_existing: diff --git a/cloudify_nsx/network/esg_gateway.py b/cloudify_nsx/network/esg_gateway.py index 0baff7c..c55ff1e 100644 --- a/cloudify_nsx/network/esg_gateway.py +++ b/cloudify_nsx/network/esg_gateway.py @@ -21,8 +21,29 @@ @operation def create(**kwargs): + validation_rules = { + "esg_id": { + "required": True + }, + "dgw_ip": { + "required": True + }, + "vnic": { + "set_none": True, + "type": "string" + }, + "mtu": { + "set_none": True, + "type": "string" + }, + "admin_distance": { + "set_none": True, + "type": "string" + } + } + use_existing, gateway = common.get_properties_and_validate( - 'gateway', kwargs + 'gateway', kwargs, validation_rules ) if use_existing: diff --git a/cloudify_nsx/network/esg_interface.py b/cloudify_nsx/network/esg_interface.py index c488619..196bc35 100644 --- a/cloudify_nsx/network/esg_interface.py +++ b/cloudify_nsx/network/esg_interface.py @@ -21,8 +21,55 @@ @operation def create(**kwargs): + validation_rules = { + "esg_id": { + "required": True + }, + "ifindex": { + "required": True, + "type": "string" + }, + "ipaddr": { + "set_none": True + }, + "netmask": { + "set_none": True + }, + "prefixlen": { + "set_none": True + }, + "name": { + "set_none": True + }, + "mtu": { + "set_none": True + }, + "is_connected": { + "set_none": True + }, + "portgroup_id": { + "set_none": True + }, + "vnic_type": { + "set_none": True, + "values": [ + "uplink", + "internal" + ] + }, + "enable_send_redirects": { + "set_none": True + }, + "enable_proxy_arp": { + "set_none": True + }, + "secondary_ips": { + "set_none": True + } + } + use_existing, interface = common.get_properties_and_validate( - 'interface', kwargs + 'interface', kwargs, validation_rules ) if use_existing: diff --git a/cloudify_nsx/network/esg_nat.py b/cloudify_nsx/network/esg_nat.py index b1f5646..e20b41f 100644 --- a/cloudify_nsx/network/esg_nat.py +++ b/cloudify_nsx/network/esg_nat.py @@ -21,8 +21,49 @@ @operation def create(**kwargs): + validation_rules = { + "esg_id": { + "required": True + }, + "action": { + "required": True + }, + "originalAddress": { + "required": True + }, + "translatedAddress": { + "required": True + }, + "vnic": { + "set_none": True + }, + "ruleTag": { + "set_none": True + }, + "loggingEnabled": { + "default": False, + "type": "boolean", + }, + "enabled": { + "default": True, + "type": "boolean" + }, + "description": { + "set_none": True + }, + "protocol": { + "default": "any" + }, + "translatedPort": { + "default": "any" + }, + "originalPort": { + "default": "any" + } + } + use_existing, nat_dict = common.get_properties_and_validate( - 'rule', kwargs + 'rule', kwargs, validation_rules ) if use_existing: diff --git a/cloudify_nsx/network/esg_route.py b/cloudify_nsx/network/esg_route.py index 4d9fff7..e0cb315 100644 --- a/cloudify_nsx/network/esg_route.py +++ b/cloudify_nsx/network/esg_route.py @@ -21,7 +21,36 @@ @operation def create(**kwargs): - use_existing, route = common.get_properties_and_validate('route', kwargs) + validation_rules = { + "esg_id": { + "required": True + }, + "network": { + "required": True + }, + "next_hop": { + "set_none": True + }, + "vnic": { + "set_none": True, + "type": "string" + }, + "mtu": { + "set_none": True, + "type": "string" + }, + "admin_distance": { + "set_none": True, + "type": "string" + }, + "description": { + "set_none": True + } + } + + use_existing, route = common.get_properties_and_validate( + 'route', kwargs, validation_rules + ) if use_existing: ctx.logger.info("Used existed") diff --git a/cloudify_nsx/network/lswitch.py b/cloudify_nsx/network/lswitch.py index e37d9e1..59e3ab9 100644 --- a/cloudify_nsx/network/lswitch.py +++ b/cloudify_nsx/network/lswitch.py @@ -21,8 +21,30 @@ @operation def create(**kwargs): + validation_rules = { + # we need name in any case of usage except predefined 'id' + "name": { + "required": True, + "external_use": True + }, + "transport_zone": { + "required": True, + "external_use": False + }, + "mode": { + "required": False, + "external_use": False, + "set_none": True, + "values": [ + "UNICAST_MODE", + "MULTYCAST_MODE", + "HYBRID_MODE" + ] + } + } + use_existing, switch_dict = common.get_properties_and_validate( - 'switch', kwargs + 'switch', kwargs, validation_rules ) resource_id = ctx.instance.runtime_properties.get('resource_id') diff --git a/plugin.yaml b/plugin.yaml index 17f44c7..00f02a8 100644 --- a/plugin.yaml +++ b/plugin.yaml @@ -404,23 +404,6 @@ node_types: # resource nsx id resource_id: required: false - validate_switch: - default: - # we need name in any case of usage except predefined 'id' - name: - required: true - external_use: true - transport_zone: - required: true - external_use: false - mode: - required: false - external_use: false - set_none: true - values: - - UNICAST_MODE - - MULTYCAST_MODE - - HYBRID_MODE switch: default: # The name of the Scope (Transport Zone) @@ -449,30 +432,6 @@ node_types: # resource nsx id resource_id: required: false - validate_router: - default: - name: - required: true - dlr_pwd: - required: true - dlr_size: - required: true - datacentermoid: - required: true - datastoremoid: - required: true - resourcepoolid: - required: true - ha_ls_id: - required: true - uplink_ls_id: - required: true - uplink_ip: - required: true - uplink_subnet: - required: true - uplink_dgw: - required: true router: default: # The name that will be assigned to the new dlr @@ -1468,34 +1427,6 @@ node_types: # resource nsx id resource_id: required: false - validate_rule: - default: - esg_id: - required: true - action: - required: true - originalAddress: - required: true - translatedAddress: - required: true - vnic: - set_none: true - ruleTag: - set_none: true - loggingEnabled: - default: false - type: boolean - enabled: - default: true - type: boolean - description: - set_none: true - protocol: - default: any - translatedPort: - default: any - originalPort: - default: any rule: default: # id of esg @@ -1544,42 +1475,6 @@ node_types: # resource nsx id resource_id: required: false - validate_rule: - default: - esg_id: - required: true - ruleTag: - set_none: true - name: - set_none: true - source: - set_none: true - destination: - set_none: true - application: - set_none: true - matchTranslated: - default: false - type: boolean - direction: - values: - - in - - out - set_none: true - action: - required: true - values: - - accept - - deny - - reject - enabled: - default: true - type: boolean - loggingEnabled: - default: false - type: boolean - description: - set_none: true rule: default: # id of esg @@ -1632,38 +1527,6 @@ node_types: # resource nsx id resource_id: required: false - validate_interface: - default: - esg_id: - required: true - ifindex: - required: true - type: string - ipaddr: - set_none: true - netmask: - set_none: true - prefixlen: - set_none: true - name: - set_none: true - mtu: - set_none: true - is_connected: - set_none: true - portgroup_id: - set_none: true - vnic_type: - set_none: true - values: - - uplink - - internal - enable_send_redirects: - set_none: true - enable_proxy_arp: - set_none: true - secondary_ips: - set_none: true interface: default: # The id of the ESG to configure interfaces on @@ -1712,21 +1575,6 @@ node_types: # resource nsx id resource_id: required: false - validate_gateway: - default: - esg_id: - required: true - dgw_ip: - required: true - vnic: - set_none: true - type: string - mtu: - set_none: true - type: string - admin_distance: - set_none: true - type: string gateway: default: # The id of the ESG to configure interfaces on @@ -1759,25 +1607,6 @@ node_types: # resource nsx id resource_id: required: false - validate_route: - default: - esg_id: - required: true - network: - required: true - next_hop: - set_none: true - vnic: - set_none: true - type: string - mtu: - set_none: true - type: string - admin_distance: - set_none: true - type: string - description: - set_none: true route: default: # The id of the ESG to configure interfaces on @@ -1814,26 +1643,6 @@ node_types: # resource nsx id resource_id: required: false - validate_pool: - default: - esg_id: - required: true - ip_range: - required: true - default_gateway: - set_none: true - subnet_mask: - set_none: true - domain_name: - set_none: true - dns_server_1: - set_none: true - dns_server_2: - set_none: true - lease_time: - set_none: true - auto_dns: - set_none: true pool: default: # The id of the ESG to configure interfaces on @@ -1874,35 +1683,6 @@ node_types: # resource nsx id resource_id: required: false - validate_bind: - default: - esg_id: - required: true - vm_id: - set_none: true - vnic_id: - set_none: true - type: string - mac: - set_none: true - hostname: - required: true - ip: - required: true - default_gateway: - set_none: true - subnet_mask: - set_none: true - domain_name: - set_none: true - dns_server_1: - set_none: true - dns_server_2: - set_none: true - lease_time: - set_none: true - auto_dns: - set_none: true bind: default: # The id of the ESG to configure interfaces on