Example #1
0
    def _discover_member_licenses(self):
        if not utils.get_features(
                self._grid_config.wapi_version).member_licenses:
            return None

        return_fields = ['expiry_date', 'hwid', 'kind', 'type']
        licenses = self._connector.get_object('member:license',
                                              return_fields=return_fields)
        return licenses
Example #2
0
    def _discover_config(self, gm_member):
        return_fields = ["extattrs"]
        if utils.get_features(self.wapi_version).member_ipv6_setting:
            return_fields.append("ipv6_setting")

        obj_type = "member"
        payload = {"host_name": gm_member["member_name"]}
        config = self.gm_connector.get_object(obj_type, payload=payload, return_fields=return_fields)
        return config[0] if config and config[0].get("extattrs") else None
Example #3
0
    def _discover_member_licenses(self):
        if not utils.get_features(
                self._grid_config.wapi_version).member_licenses:
            return None

        return_fields = ['expiry_date', 'hwid', 'kind', 'type']
        licenses = self._connector.get_object('member:license',
                                              return_fields=return_fields)
        return licenses
Example #4
0
    def _discover_config(self, gm_member):
        return_fields = ['extattrs']
        if utils.get_features(self.wapi_version).member_ipv6_setting:
            return_fields.append('ipv6_setting')

        obj_type = 'member'
        payload = {'host_name': gm_member['member_name']}
        config = self.gm_connector.get_object(
            obj_type, payload=payload, return_fields=return_fields)
        return config[0] if config and config[0].get('extattrs') else None
Example #5
0
 def test_get_features(self):
     feature = utils.get_features('2.3')
     self.assertTrue(feature.create_ea_def)
     self.assertTrue(feature.cloud_api)
     self.assertTrue(feature.member_ipv6_setting)
     self.assertTrue(feature.member_licenses)
     self.assertTrue(feature.enable_member_dns)
     self.assertTrue(feature.enable_member_dhcp)
     self.assertTrue(feature.dns_settings)
     self.assertTrue(feature.enable_dhcp)
     self.assertTrue(feature.tenants)
Example #6
0
    def _discover_config(self, gm_member):
        return_fields = ['extattrs']
        if utils.get_features(self.wapi_version).member_ipv6_setting:
            return_fields.append('ipv6_setting')

        obj_type = 'member'
        payload = {'host_name': gm_member['member_name']}
        config = self.gm_connector.get_object(obj_type,
                                              payload=payload,
                                              return_fields=return_fields)
        return config[0] if config and config[0].get('extattrs') else None
Example #7
0
    def create_subnet(self, rollback_list):
        """Creates subnet equivalent NIOS objects.

        infoblox context contains subnet dictionary from ipam driver and
        network from db query because only subnet data is passed

        The following NIOS objects are created.
        - network view
        - network
        - ip range
        """
        session = self.ib_cxt.context.session
        network = self.ib_cxt.network
        subnet = self.ib_cxt.subnet

        network_id = network.get('id')
        subnet_id = subnet.get('id')

        network_view_exists = (True if self.ib_cxt.mapping.network_view_id
                               else False)

        if self.ib_cxt.mapping.authority_member is None:
            # after authority member reservation, ib_cxt.mapping is updated and
            # its connector and managers are loaded for the new member.
            self.ib_cxt.reserve_authority_member()

        # create a network view if it does not exist
        if not network_view_exists:
            ib_network_view, obj_created = self._create_ib_network_view()
            if ib_network_view and obj_created:
                rollback_list.append(ib_network_view)

        ib_network, created = self._create_ib_network()
        if ib_network:
            if created:
                rollback_list.append(ib_network)
            self._create_ib_ip_range(rollback_list)

        # tenats available only with wapi 2.0+
        features = utils.get_features(self.grid_config.wapi_version)
        if features.tenants:
            ib_tenant = ib_objects.Tenant.search(self.ib_cxt.connector,
                                                 id=self.ib_cxt.tenant_id)
            if (ib_tenant and self.ib_cxt.tenant_name and
                    ib_tenant.name != self.ib_cxt.tenant_name):
                ib_tenant.name = self.ib_cxt.tenant_name
                ib_tenant.update()

        # associate the network view to neutron
        dbi.associate_network_view(session,
                                   self.ib_cxt.mapping.network_view_id,
                                   network_id,
                                   subnet_id)
        return ib_network
Example #8
0
    def create_subnet(self, rollback_list):
        """Creates subnet equivalent NIOS objects.

        infoblox context contains subnet dictionary from ipam driver and
        network from db query because only subnet data is passed

        The following NIOS objects are created.
        - network view
        - network
        - ip range
        """
        session = self.ib_cxt.context.session
        network = self.ib_cxt.network
        subnet = self.ib_cxt.subnet

        network_id = network.get('id')
        subnet_id = subnet.get('id')

        network_view_exists = (True if self.ib_cxt.mapping.network_view_id
                               else False)

        if self.ib_cxt.mapping.authority_member is None:
            # after authority member reservation, ib_cxt.mapping is updated and
            # its connector and managers are loaded for the new member.
            self.ib_cxt.reserve_authority_member()

        # create a network view if it does not exist
        if not network_view_exists:
            ib_network_view = self._create_ib_network_view()
            rollback_list.append(ib_network_view)

        ib_network, created = self._create_ib_network()
        if ib_network:
            if created:
                rollback_list.append(ib_network)
            self._create_ib_ip_range(rollback_list)

        # tenats available only with wapi 2.0+
        features = utils.get_features(self.grid_config.wapi_version)
        if features.tenants:
            ib_tenant = ib_objects.Tenant.search(self.ib_cxt.connector,
                                                 id=self.ib_cxt.tenant_id)
            if (ib_tenant and self.ib_cxt.tenant_name and
                    ib_tenant.name != self.ib_cxt.tenant_name):
                ib_tenant.name = self.ib_cxt.tenant_name
                ib_tenant.update()

        # associate the network view to neutron
        dbi.associate_network_view(session,
                                   self.ib_cxt.mapping.network_view_id,
                                   network_id,
                                   subnet_id)
        return ib_network
Example #9
0
    def _discover_members(self):
        return_fields = ['node_info', 'host_name', 'vip_setting', 'extattrs']
        # ipv6_setting, lan2_port_setting and mgmt_port_setting fields are
        # available with wapi 2.2+, so check only 'member_ipv6_setting' feature
        if utils.get_features(
                self._grid_config.wapi_version).member_ipv6_setting:
            return_fields.extend(['ipv6_setting', 'lan2_port_setting',
                                  'mgmt_port_setting'])

        members = self._connector.get_object('member',
                                             return_fields=return_fields)
        return members
Example #10
0
    def _discover_members(self):
        return_fields = ['node_info', 'host_name', 'vip_setting', 'extattrs']
        # ipv6_setting, lan2_port_setting and mgmt_port_setting fields are
        # available with wapi 2.2+, so check only 'member_ipv6_setting' feature
        if utils.get_features(
                self._grid_config.wapi_version).member_ipv6_setting:
            return_fields.extend(
                ['ipv6_setting', 'lan2_port_setting', 'mgmt_port_setting'])

        members = self._connector.get_object('member',
                                             return_fields=return_fields)
        return members
def create_ea_defs(grid_id):
    print("\nCreating EA definitions...")
    print("-" * PRINT_LINE)
    print("")

    credentials = get_credentias()
    conn = utils.get_connector(credentials)

    if not (utils.get_features(conn).create_ea_def):
        LOG.error("WAPI Version '%s' is not supported - Script ABORTED!",
                  conn.wapi_version)
        exit(1)

    mgr = object_manager.InfobloxObjectManager(conn)
    ea_defs_created = mgr.create_required_ea_definitions(
        const.REQUIRED_EA_DEFS, reraise=True)
    if ea_defs_created:
        print("The following EA Definitions have been created: '%s'" %
              [ea_def['name'] for ea_def in ea_defs_created])
    else:
        print("All the EAs has been already created.")
    print("\n")

    grid_opts = config.get_infoblox_grid_opts(grid_id)
    gm_name = grid_opts['grid_master_name']
    member = objects.Member.search(conn, host_name=gm_name)

    if member is None:
        LOG.error("Cannot retrieve member information at GM='%s'" %
                  gm_name)
        exit(1)

    print("Adding grid configuration EAs to the grid master...")
    print("-" * PRINT_LINE)
    print("")
    ea_set = {}
    if member.extattrs is None:
        member.extattrs = objects.EA({})
    for ea, val in const.GRID_CONFIG_DEFAULTS.items():
        if (member.extattrs.get(ea) is None and
                not (val is None or val == [])):
            ea_set[ea] = val
            member.extattrs.set(ea, val)

    if ea_set:
        print("Grid configurations: '%s'" % ea_set)
        member.update()
    else:
        print("All the grid configurations have been already added.")
    print("\n")
Example #12
0
    def _discover_dhcp_settings(self):
        members = {}
        # enable_dhcp available only with wapi 2.2.1+
        features = utils.get_features(self._grid_config.wapi_version)
        if not features.enable_dhcp:
            return members

        return_fields = ['host_name', 'enable_dhcp']
        dhcp_members = self._connector.get_object('member:dhcpproperties',
                                                  return_fields=return_fields)
        # Convert members into dict with host_name as a key
        if dhcp_members:
            return {member['host_name']: member for member in dhcp_members}
        return members
Example #13
0
    def _discover_dhcp_settings(self):
        members = {}
        # enable_dhcp available only with wapi 2.2.1+
        features = utils.get_features(self._grid_config.wapi_version)
        if not features.enable_dhcp:
            return members

        return_fields = ['host_name', 'enable_dhcp']
        dhcp_members = self._connector.get_object('member:dhcpproperties',
                                                  return_fields=return_fields)
        # Convert members into dict with host_name as a key
        if dhcp_members:
            return {member['host_name']: member for member in dhcp_members}
        return members
def create_ea_defs(grid_id):
    print("\nCreating EA definitions...")
    print(("-" * PRINT_LINE))
    print("")

    credentials = get_credentias()
    conn = utils.get_connector(credentials)

    if not (utils.get_features(conn).create_ea_def):
        LOG.error("WAPI Version '%s' is not supported - Script ABORTED!",
                  conn.wapi_version)
        exit(1)

    mgr = object_manager.InfobloxObjectManager(conn)
    ea_defs_created = mgr.create_required_ea_definitions(
        const.REQUIRED_EA_DEFS, reraise=True)
    if ea_defs_created:
        print(("The following EA Definitions have been created: '%s'" %
               [ea_def['name'] for ea_def in ea_defs_created]))
    else:
        print("All the EAs has been already created.")
    print("\n")

    grid_opts = config.get_infoblox_grid_opts(grid_id)
    gm_name = grid_opts['grid_master_name']
    member = objects.Member.search(conn, host_name=gm_name)

    if member is None:
        LOG.error("Cannot retrieve member information at GM='%s'" % gm_name)
        exit(1)

    print("Adding grid configuration EAs to the grid master...")
    print(("-" * PRINT_LINE))
    print("")
    ea_set = {}
    if member.extattrs is None:
        member.extattrs = objects.EA({})
    for ea, val in list(const.GRID_CONFIG_DEFAULTS.items()):
        if (member.extattrs.get(ea) is None
                and not (val is None or val == [])):
            ea_set[ea] = val
            member.extattrs.set(ea, val)

    if ea_set:
        print(("Grid configurations: '%s'" % ea_set))
        member.update()
    else:
        print("All the grid configurations have been already added.")
    print("\n")
Example #15
0
    def _discover_dns_settings(self):
        members = {}
        # all this info available only with wapi 2.3+
        features = utils.get_features(self._grid_config.wapi_version)
        if not features.dns_settings:
            return members

        return_fields = ['host_name', 'use_mgmt_port', 'use_mgmt_ipv6_port',
                         'use_lan_port', 'use_lan_ipv6_port', 'use_lan2_port',
                         'use_lan2_ipv6_port', 'additional_ip_list']
        dns_members = self._connector.get_object('member:dns',
                                                 return_fields=return_fields)
        # Convert members into dict with host_name as a key
        if dns_members:
            return {member['host_name']: member for member in dns_members}
        return members
Example #16
0
    def _discover_dns_settings(self):
        members = {}
        # all this info available only with wapi 2.3+
        features = utils.get_features(self._grid_config.wapi_version)
        if not features.dns_settings:
            return members

        return_fields = [
            'host_name', 'use_mgmt_port', 'use_mgmt_ipv6_port', 'use_lan_port',
            'use_lan_ipv6_port', 'use_lan2_port', 'use_lan2_ipv6_port',
            'additional_ip_list'
        ]
        dns_members = self._connector.get_object('member:dns',
                                                 return_fields=return_fields)
        # Convert members into dict with host_name as a key
        if dns_members:
            return {member['host_name']: member for member in dns_members}
        return members
Example #17
0
 def wapi_version(self, value):
     self._wapi_version = value
     if value:
         self._is_cloud_wapi =\
             utils.get_features(self.wapi_version).cloud_api
Example #18
0
 def wapi_version(self, value):
     self._wapi_version = value
     if value:
         self._is_cloud_wapi =\
             utils.get_features(self.wapi_version).cloud_api