From 4bf1c82868357e5c357e0b656419af37a99a8545 Mon Sep 17 00:00:00 2001 From: Michael Fenn Date: Tue, 6 Aug 2013 16:01:12 -0400 Subject: Get profile by building metadata instead of guessing Rather than doing some ad-hoc lookups of internal data structures stpierre suggested that it'd be better to use the normal metadata build procedures. This implements that and adjusts the tests. --- src/lib/Bcfg2/Server/Plugins/Metadata.py | 15 +++++++++------ .../Testlib/TestServer/TestPlugins/TestMetadata.py | 3 +++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py index e62b3f77f..cc0456334 100644 --- a/src/lib/Bcfg2/Server/Plugins/Metadata.py +++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py @@ -978,18 +978,21 @@ class Metadata(Bcfg2.Server.Plugin.Metadata, self.logger.error(msg) raise Bcfg2.Server.Plugin.PluginExecutionError(msg) - profiles = [g for g in self.clientgroups[client] - if g in self.groups and self.groups[g].is_profile] - if profiles != [profile]: + metadata = self.core.build_metadata(client) + if metadata.profile != profile: self.logger.info("Changing %s profile from %s to %s" % - (client, profiles, profile)) + (client, metadata.profile, profile)) self.update_client(client, dict(profile=profile)) if client in self.clientgroups: - for prof in profiles: - self.clientgroups[client].remove(prof) + if metadata.profile in self.clientgroups[client]: + self.clientgroups[client].remove(metadata.profile) self.clientgroups[client].append(profile) else: self.clientgroups[client] = [profile] + else: + self.logger.debug( + "Ignoring %s request to change profile from %s to %s" + % (client, metadata.profile, profile)) else: self.logger.info("Creating new client: %s, profile %s" % (client, profile)) diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestMetadata.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestMetadata.py index 1273f0d30..32c893548 100644 --- a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestMetadata.py +++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestMetadata.py @@ -885,6 +885,9 @@ class TestMetadata(_TestMetadata, TestClientRunHooks, TestDatabaseBacked): metadata = self.load_clients_data(metadata=self.load_groups_data()) if not metadata._use_db: metadata.clients_xml.write = Mock() + metadata.core.build_metadata = Mock() + metadata.core.build_metadata.side_effect = \ + lambda c: metadata.get_initial_metadata(c) metadata.set_profile("client1", "group2", None) mock_update_client.assert_called_with("client1", -- cgit v1.2.3-1-g7c22