Esempio n. 1
0
File: env.py Progetto: junaruga/pcs
 def get_cib(self, minimal_version=None):
     if self.__loaded_cib_diff_source is not None:
         raise AssertionError("CIB has already been loaded")
     self.__loaded_cib_diff_source = get_cib_xml(self.cmd_runner())
     self.__loaded_cib_to_modify = get_cib(self.__loaded_cib_diff_source)
     if minimal_version is not None:
         upgraded_cib = ensure_cib_version(
             self.cmd_runner(),
             self.__loaded_cib_to_modify,
             minimal_version
         )
         if upgraded_cib is not None:
             self.__loaded_cib_to_modify = upgraded_cib
             self.__loaded_cib_diff_source = etree_to_str(upgraded_cib)
             if not self._cib_upgrade_reported:
                 self.report_processor.process(
                     reports.cib_upgrade_successful()
                 )
             self._cib_upgrade_reported = True
     self.__loaded_cib_diff_source_feature_set = (
         get_cib_crm_feature_set(
             self.__loaded_cib_to_modify,
             none_if_missing=True
         )
         or
         Version(0, 0, 0)
     )
     return self.__loaded_cib_to_modify
Esempio n. 2
0
def verify(env, verbose=False):
    runner = env.cmd_runner()
    dummy_stdout, verify_stderr, verify_returncode = verify_cmd(
        runner,
        verbose=verbose,
    )

    #1) Do not even try to think about upgrading!
    #2) We do not need cib management in env (no need for push...).
    #So env.get_cib is not best choice here (there were considerations to
    #upgrade cib at all times inside env.get_cib). Go to a lower level here.
    if verify_returncode != 0:
        env.report_processor.append(reports.invalid_cib_content(verify_stderr))

        #Cib is sometimes loadable even if `crm_verify` fails (e.g. when
        #fencing topology is invalid). On the other hand cib with id duplication
        #is not loadable.
        #We try extra checks when cib is possible to load.
        cib_xml, dummy_stderr, returncode = get_cib_xml_cmd_results(runner)
        if returncode != 0:
            #can raise; raise LibraryError is better but in this case we prefer
            #be consistent with raising below
            env.report_processor.send()
    else:
        cib_xml = get_cib_xml(runner)

    cib = get_cib(cib_xml)
    fencing_topology.verify(
        env.report_processor, get_fencing_topology(cib), get_resources(cib),
        ClusterState(get_cluster_status_xml(runner)).node_section.nodes)
    #can raise
    env.report_processor.send()
Esempio n. 3
0
 def get_cib(self, minimal_version=None):
     if self.__loaded_cib_diff_source is not None:
         raise AssertionError("CIB has already been loaded")
     self.__loaded_cib_diff_source = get_cib_xml(self.cmd_runner())
     self.__loaded_cib_to_modify = get_cib(self.__loaded_cib_diff_source)
     if minimal_version is not None:
         upgraded_cib = ensure_cib_version(
             self.cmd_runner(),
             self.__loaded_cib_to_modify,
             minimal_version
         )
         if upgraded_cib is not None:
             self.__loaded_cib_to_modify = upgraded_cib
             self.__loaded_cib_diff_source = etree_to_str(upgraded_cib)
             if not self._cib_upgrade_reported:
                 self.report_processor.process(
                     reports.cib_upgrade_successful()
                 )
             self._cib_upgrade_reported = True
     self.__loaded_cib_diff_source_feature_set = (
         get_cib_crm_feature_set(
             self.__loaded_cib_to_modify,
             none_if_missing=True
         )
         or
         Version(0, 0, 0)
     )
     return self.__loaded_cib_to_modify
Esempio n. 4
0
 def test_invalid_xml(self):
     xml = "<invalid><xml />"
     assert_raise_library_error(
         lambda: lib.get_cib(xml),
         (
             Severity.ERROR,
             report_codes.CIB_LOAD_ERROR_BAD_FORMAT,
             {
             }
         )
     )
Esempio n. 5
0
 def test_invalid_xml(self):
     xml = "<invalid><xml />"
     assert_raise_library_error(
         lambda: lib.get_cib(xml),
         (
             Severity.ERROR,
             report_codes.CIB_LOAD_ERROR_BAD_FORMAT,
             {
             }
         )
     )
Esempio n. 6
0
 def get_cib(self, minimal_version=None):
     cib = get_cib(self._get_cib_xml())
     if minimal_version is not None:
         upgraded_cib = ensure_cib_version(self.cmd_runner(), cib,
                                           minimal_version)
         if upgraded_cib is not None:
             cib = upgraded_cib
             if self.is_cib_live and not self._cib_upgraded:
                 self.report_processor.process(
                     reports.cib_upgrade_successful())
             self._cib_upgraded = True
     return cib
Esempio n. 7
0
 def test_invalid_xml(self, xml_fromstring_mock):
     reason = "custom reason"
     xml_fromstring_mock.side_effect = etree.XMLSyntaxError(reason, 1, 1, 1)
     xml = "<invalid><xml />"
     assert_raise_library_error(
         lambda: lib.get_cib(xml),
         fixture.error(
             report_codes.CIB_LOAD_ERROR_BAD_FORMAT,
             reason=f"{reason} (line 1)",
         ),
     )
     xml_fromstring_mock.assert_called_once_with(xml)
Esempio n. 8
0
 def get_cib(self, minimal_version=None):
     cib = get_cib(self._get_cib_xml())
     if minimal_version is not None:
         upgraded_cib = ensure_cib_version(
             self.cmd_runner(),
             cib,
             minimal_version
         )
         if upgraded_cib is not None:
             cib = upgraded_cib
             if self.is_cib_live and not self._cib_upgraded:
                 self.report_processor.process(
                     reports.cib_upgrade_successful()
                 )
             self._cib_upgraded = True
     return cib
Esempio n. 9
0
    def get_cib(
        self,
        minimal_version: Optional[Version] = None,
        nice_to_have_version: Optional[Version] = None,
    ) -> _Element:
        if self.__loaded_cib_diff_source is not None:
            raise AssertionError("CIB has already been loaded")

        self.__loaded_cib_diff_source = get_cib_xml(self.cmd_runner())
        self.__loaded_cib_to_modify = get_cib(self.__loaded_cib_diff_source)

        if (
            nice_to_have_version is not None
            and minimal_version is not None
            and minimal_version >= nice_to_have_version
        ):
            nice_to_have_version = None

        for version, mandatory in (
            (nice_to_have_version, False),
            (minimal_version, True),
        ):
            if version is not None:
                upgraded_cib, was_upgraded = ensure_cib_version(
                    self.cmd_runner(),
                    self.__loaded_cib_to_modify,
                    version,
                    fail_if_version_not_met=mandatory,
                )
                if was_upgraded:
                    self.__loaded_cib_to_modify = upgraded_cib
                    self.__loaded_cib_diff_source = etree_to_str(upgraded_cib)
                    if not self._cib_upgrade_reported:
                        self.report_processor.report(
                            ReportItem.info(
                                reports.messages.CibUpgradeSuccessful()
                            )
                        )
                    self._cib_upgrade_reported = True

        self.__loaded_cib_diff_source_feature_set = get_cib_crm_feature_set(
            self.__loaded_cib_to_modify, none_if_missing=True
        ) or Version(0, 0, 0)
        return self.__loaded_cib_to_modify
Esempio n. 10
0
File: env.py Progetto: nrwahl2/pcs
 def get_cib(self, minimal_version: Optional[Version] = None) -> Element:
     if self.__loaded_cib_diff_source is not None:
         raise AssertionError("CIB has already been loaded")
     self.__loaded_cib_diff_source = get_cib_xml(self.cmd_runner())
     self.__loaded_cib_to_modify = get_cib(self.__loaded_cib_diff_source)
     if minimal_version is not None:
         upgraded_cib = ensure_cib_version(self.cmd_runner(),
                                           self.__loaded_cib_to_modify,
                                           minimal_version)
         if upgraded_cib is not None:
             self.__loaded_cib_to_modify = upgraded_cib
             self.__loaded_cib_diff_source = etree_to_str(upgraded_cib)
             if not self._cib_upgrade_reported:
                 self.report_processor.report(
                     ReportItem.info(
                         reports.messages.CibUpgradeSuccessful()))
             self._cib_upgrade_reported = True
     self.__loaded_cib_diff_source_feature_set = get_cib_crm_feature_set(
         self.__loaded_cib_to_modify, none_if_missing=True) or Version(
             0, 0, 0)
     return self.__loaded_cib_to_modify
Esempio n. 11
0
 def test_success(self):
     xml = "<xml />"
     assert_xml_equal(xml, str(XmlManipulation((lib.get_cib(xml)))))
Esempio n. 12
0
 def test_success(self):
     xml = "<xml />"
     assert_xml_equal(xml, str(XmlManipulation((lib.get_cib(xml)))))