Example #1
0
 def _populate_policy_profiles(self):
     """Populate all the policy profiles from VSM."""
     hosts = self.n1kvclient.get_vsm_hosts()
     for vsm_ip in hosts:
         try:
             policy_profiles = self.n1kvclient.list_port_profiles(vsm_ip)
             vsm_profiles = {}
             plugin_profiles_set = set()
             # Fetch policy profiles from VSM
             for profile_name in policy_profiles:
                 profile_id = (policy_profiles[profile_name][
                     n1kv_const.PROPERTIES][n1kv_const.ID])
                 vsm_profiles[profile_id] = profile_name
             # Fetch policy profiles previously populated
             for profile in self._get_policy_profiles_by_host(vsm_ip):
                 plugin_profiles_set.add(profile.id)
             vsm_profiles_set = set(vsm_profiles)
             # Update database if the profile sets differ.
             if vsm_profiles_set.symmetric_difference(plugin_profiles_set):
                 # Add new profiles to database if they were created in VSM
                 for pid in vsm_profiles_set.difference(
                         plugin_profiles_set):
                     self._add_policy_profile(pid, vsm_profiles[pid],
                                              vsm_ip)
                 # Delete profiles from database if they were deleted in VSM
                 for pid in plugin_profiles_set.difference(
                         vsm_profiles_set):
                     if not n1kv_db.policy_profile_in_use(pid):
                         self._remove_policy_profile(pid, vsm_ip)
                     else:
                         LOG.warning(_LW('Policy profile %s in use'), pid)
         except (n1kv_exc.VSMError, n1kv_exc.VSMConnectionFailed):
             with excutils.save_and_reraise_exception(reraise=False):
                 LOG.warning(_LW('No policy profile populated from VSM'))
 def _populate_policy_profiles(self):
     """Populate all the policy profiles from VSM."""
     hosts = self.n1kvclient.get_vsm_hosts()
     for vsm_ip in hosts:
         try:
             policy_profiles = self.n1kvclient.list_port_profiles(vsm_ip)
             vsm_profiles = {}
             plugin_profiles_set = set()
             # Fetch policy profiles from VSM
             for profile_name in policy_profiles:
                 profile_id = (policy_profiles[profile_name]
                               [n1kv_const.PROPERTIES][n1kv_const.ID])
                 vsm_profiles[profile_id] = profile_name
             # Fetch policy profiles previously populated
             for profile in self._get_policy_profiles_by_host(vsm_ip):
                 plugin_profiles_set.add(profile.id)
             vsm_profiles_set = set(vsm_profiles)
             # Update database if the profile sets differ.
             if vsm_profiles_set.symmetric_difference(plugin_profiles_set):
                 # Add new profiles to database if they were created in VSM
                 for pid in vsm_profiles_set.difference(
                                             plugin_profiles_set):
                     self._add_policy_profile(pid, vsm_profiles[pid],
                                              vsm_ip)
                 # Delete profiles from database if they were deleted in VSM
                 for pid in plugin_profiles_set.difference(
                                                vsm_profiles_set):
                     if not n1kv_db.policy_profile_in_use(pid):
                         self._remove_policy_profile(pid, vsm_ip)
                     else:
                         LOG.warning(_LW('Policy profile %s in use'), pid)
         except (n1kv_exc.VSMError, n1kv_exc.VSMConnectionFailed):
             with excutils.save_and_reraise_exception(reraise=False):
                 LOG.warning(_LW('No policy profile populated from VSM'))
 def sanitize_policy_profile_table(self):
     """Clear policy profiles from stale VSM."""
     db_session = db.get_session()
     hosts = config.get_vsm_hosts()
     vsm_info = db_session.query(
         n1kv_models.PolicyProfile.vsm_ip).distinct()
     if vsm_info is None or hosts is None:
         return
     vsm_ips = [vsm_ip[0] for vsm_ip in vsm_info if vsm_ip[0] not in hosts]
     for vsm_ip in vsm_ips:
         pprofiles = n1kv_db.get_policy_profiles_by_host(vsm_ip, db_session)
         for pprofile in pprofiles:
             # Do not delete profile if it is in use and if it
             # is the only VSM to have it configured
             pp_in_use = n1kv_db.policy_profile_in_use(pprofile['id'],
                                                       db_session)
             num_vsm_using_pp = db_session.query(
                 n1kv_models.PolicyProfile).filter_by(
                 id=pprofile['id']).count()
             if (not pp_in_use) or (num_vsm_using_pp > 1):
                 db_session.delete(pprofile)
                 db_session.flush()
             else:
                 LOG.warning(_LW('Cannot delete policy profile %s '
                                 'as it is in use.'), pprofile['id'])
Example #4
0
 def sanitize_policy_profile_table(self):
     """Clear policy profiles from stale VSM."""
     db_session = db.get_session()
     hosts = config.get_vsm_hosts()
     vsm_info = db_session.query(
         n1kv_models.PolicyProfile.vsm_ip).distinct()
     if vsm_info is None or hosts is None:
         return
     vsm_ips = [vsm_ip[0] for vsm_ip in vsm_info if vsm_ip[0] not in hosts]
     for vsm_ip in vsm_ips:
         pprofiles = n1kv_db.get_policy_profiles_by_host(vsm_ip, db_session)
         for pprofile in pprofiles:
             # Do not delete profile if it is in use and if it
             # is the only VSM to have it configured
             pp_in_use = n1kv_db.policy_profile_in_use(
                 pprofile['id'], db_session)
             num_vsm_using_pp = db_session.query(
                 n1kv_models.PolicyProfile).filter_by(
                     id=pprofile['id']).count()
             if (not pp_in_use) or (num_vsm_using_pp > 1):
                 db_session.delete(pprofile)
                 db_session.flush()
             else:
                 LOG.warning(
                     _LW('Cannot delete policy profile %s '
                         'as it is in use.'), pprofile['id'])