pcs-0.11.6-6
- Rebased to the latest upstream sources (see CHANGELOG.md) Resolves: RHEL-7582, RHEL-7583, RHEL-7669, RHEL-7672, RHEL-7697, RHEL-7698, RHEL-7700, RHEL-7703, RHEL-7719, RHEL-7725, RHEL-7730, RHEL-7738, RHEL-7739, RHEL-7740, RHEL-7744, RHEL-7746 - TLS cipher setting in pcsd now follows system-wide crypto policies by default Resolves: RHEL-7724
This commit is contained in:
parent
1a3ffa6e01
commit
f0557fdd16
10
.gitignore
vendored
10
.gitignore
vendored
@ -207,3 +207,13 @@
|
|||||||
/tilt-2.2.0.gem
|
/tilt-2.2.0.gem
|
||||||
/puma-6.3.0.gem
|
/puma-6.3.0.gem
|
||||||
/pcs-0.11.6.tar.gz
|
/pcs-0.11.6.tar.gz
|
||||||
|
/ffi-1.16.3.gem
|
||||||
|
/puma-6.4.0.gem
|
||||||
|
/rack-2.2.8.gem
|
||||||
|
/rack-protection-3.1.0.gem
|
||||||
|
/sinatra-3.1.0.gem
|
||||||
|
/tilt-2.3.0.gem
|
||||||
|
/pcs-aaa16e0de986890e6ca3038f907bbad331e41a87.tar.gz
|
||||||
|
/pcs-web-ui-0.1.18.tar.gz
|
||||||
|
/pcs-web-ui-node-modules-0.1.18.tar.xz
|
||||||
|
/tornado-6.3.3.tar.gz
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,302 +0,0 @@
|
|||||||
From 24a8e84e3f81fc846a8d60dc636c9d42fc7a0cd8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Miroslav Lisik <mlisik@redhat.com>
|
|
||||||
Date: Tue, 4 Jul 2023 21:43:38 +0200
|
|
||||||
Subject: [PATCH 2/3] fix displaying duplicate records in property commands
|
|
||||||
|
|
||||||
---
|
|
||||||
pcs/cli/cluster_property/output.py | 65 +++++++++----------
|
|
||||||
.../cli/cluster_property/test_command.py | 15 +++++
|
|
||||||
.../tier0/cli/cluster_property/test_output.py | 31 ++++++---
|
|
||||||
.../lib/commands/test_cluster_property.py | 28 ++++++++
|
|
||||||
4 files changed, 93 insertions(+), 46 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/pcs/cli/cluster_property/output.py b/pcs/cli/cluster_property/output.py
|
|
||||||
index c538c5c1..c9c46d1c 100644
|
|
||||||
--- a/pcs/cli/cluster_property/output.py
|
|
||||||
+++ b/pcs/cli/cluster_property/output.py
|
|
||||||
@@ -31,21 +31,15 @@ class PropertyConfigurationFacade:
|
|
||||||
readonly_properties: StringCollection,
|
|
||||||
) -> None:
|
|
||||||
self._properties = properties
|
|
||||||
+ self._first_nvpair_set = (
|
|
||||||
+ self._properties[0].nvpairs if self._properties else []
|
|
||||||
+ )
|
|
||||||
self._properties_metadata = properties_metadata
|
|
||||||
self._readonly_properties = readonly_properties
|
|
||||||
- self._defaults_map = {
|
|
||||||
- metadata.name: metadata.default
|
|
||||||
- for metadata in self._properties_metadata
|
|
||||||
- if metadata.default is not None
|
|
||||||
+ self._defaults_map = self.get_defaults(include_advanced=True)
|
|
||||||
+ self._name_nvpair_dto_map = {
|
|
||||||
+ nvpair_dto.name: nvpair_dto for nvpair_dto in self._first_nvpair_set
|
|
||||||
}
|
|
||||||
- self._name_nvpair_dto_map = (
|
|
||||||
- {
|
|
||||||
- nvpair_dto.name: nvpair_dto
|
|
||||||
- for nvpair_dto in self._properties[0].nvpairs
|
|
||||||
- }
|
|
||||||
- if self._properties
|
|
||||||
- else {}
|
|
||||||
- )
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def from_properties_dtos(
|
|
||||||
@@ -105,17 +99,6 @@ class PropertyConfigurationFacade:
|
|
||||||
return value
|
|
||||||
return self._defaults_map.get(property_name, custom_default)
|
|
||||||
|
|
||||||
- @staticmethod
|
|
||||||
- def _filter_names_advanced(
|
|
||||||
- metadata: ResourceAgentParameterDto,
|
|
||||||
- property_names: Optional[StringSequence] = None,
|
|
||||||
- include_advanced: bool = False,
|
|
||||||
- ) -> bool:
|
|
||||||
- return bool(
|
|
||||||
- (not property_names and (include_advanced or not metadata.advanced))
|
|
||||||
- or (property_names and metadata.name in property_names)
|
|
||||||
- )
|
|
||||||
-
|
|
||||||
def get_defaults(
|
|
||||||
self,
|
|
||||||
property_names: Optional[StringSequence] = None,
|
|
||||||
@@ -123,11 +106,10 @@ class PropertyConfigurationFacade:
|
|
||||||
) -> dict[str, str]:
|
|
||||||
return {
|
|
||||||
metadata.name: metadata.default
|
|
||||||
- for metadata in self._properties_metadata
|
|
||||||
- if metadata.default is not None
|
|
||||||
- and self._filter_names_advanced(
|
|
||||||
- metadata, property_names, include_advanced
|
|
||||||
+ for metadata in self.get_properties_metadata(
|
|
||||||
+ property_names, include_advanced
|
|
||||||
)
|
|
||||||
+ if metadata.default is not None
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_properties_metadata(
|
|
||||||
@@ -135,23 +117,34 @@ class PropertyConfigurationFacade:
|
|
||||||
property_names: Optional[StringSequence] = None,
|
|
||||||
include_advanced: bool = False,
|
|
||||||
) -> Sequence[ResourceAgentParameterDto]:
|
|
||||||
- return [
|
|
||||||
- metadata
|
|
||||||
- for metadata in self._properties_metadata
|
|
||||||
- if self._filter_names_advanced(
|
|
||||||
- metadata, property_names, include_advanced
|
|
||||||
- )
|
|
||||||
- ]
|
|
||||||
+ if property_names:
|
|
||||||
+ filtered_metadata = [
|
|
||||||
+ metadata
|
|
||||||
+ for metadata in self._properties_metadata
|
|
||||||
+ if metadata.name in property_names
|
|
||||||
+ ]
|
|
||||||
+ else:
|
|
||||||
+ filtered_metadata = [
|
|
||||||
+ metadata
|
|
||||||
+ for metadata in self._properties_metadata
|
|
||||||
+ if include_advanced or not metadata.advanced
|
|
||||||
+ ]
|
|
||||||
+ deduplicated_metadata = {
|
|
||||||
+ metadata.name: metadata for metadata in filtered_metadata
|
|
||||||
+ }
|
|
||||||
+ return list(deduplicated_metadata.values())
|
|
||||||
|
|
||||||
def get_name_value_default_list(self) -> list[tuple[str, str, bool]]:
|
|
||||||
name_value_default_list = [
|
|
||||||
(nvpair_dto.name, nvpair_dto.value, False)
|
|
||||||
- for nvpair_dto in self._name_nvpair_dto_map.values()
|
|
||||||
+ for nvpair_dto in self._first_nvpair_set
|
|
||||||
]
|
|
||||||
name_value_default_list.extend(
|
|
||||||
[
|
|
||||||
(metadata_dto.name, metadata_dto.default, True)
|
|
||||||
- for metadata_dto in self._properties_metadata
|
|
||||||
+ for metadata_dto in self.get_properties_metadata(
|
|
||||||
+ include_advanced=True
|
|
||||||
+ )
|
|
||||||
if metadata_dto.name not in self._name_nvpair_dto_map
|
|
||||||
and metadata_dto.default is not None
|
|
||||||
]
|
|
||||||
diff --git a/pcs_test/tier0/cli/cluster_property/test_command.py b/pcs_test/tier0/cli/cluster_property/test_command.py
|
|
||||||
index b54d0e58..f8cc2afa 100644
|
|
||||||
--- a/pcs_test/tier0/cli/cluster_property/test_command.py
|
|
||||||
+++ b/pcs_test/tier0/cli/cluster_property/test_command.py
|
|
||||||
@@ -21,6 +21,21 @@ from pcs_test.tools.misc import dict_to_modifiers
|
|
||||||
|
|
||||||
FIXTURE_PROPERTY_METADATA = ClusterPropertyMetadataDto(
|
|
||||||
properties_metadata=[
|
|
||||||
+ ResourceAgentParameterDto(
|
|
||||||
+ name="property_name",
|
|
||||||
+ shortdesc="Duplicate property",
|
|
||||||
+ longdesc=None,
|
|
||||||
+ type="string",
|
|
||||||
+ default="duplicate_default",
|
|
||||||
+ enum_values=None,
|
|
||||||
+ required=False,
|
|
||||||
+ advanced=False,
|
|
||||||
+ deprecated=False,
|
|
||||||
+ deprecated_by=[],
|
|
||||||
+ deprecated_desc=None,
|
|
||||||
+ unique_group=None,
|
|
||||||
+ reloadable=False,
|
|
||||||
+ ),
|
|
||||||
ResourceAgentParameterDto(
|
|
||||||
name="property_name",
|
|
||||||
shortdesc=None,
|
|
||||||
diff --git a/pcs_test/tier0/cli/cluster_property/test_output.py b/pcs_test/tier0/cli/cluster_property/test_output.py
|
|
||||||
index 0ce8f6a8..59d33466 100644
|
|
||||||
--- a/pcs_test/tier0/cli/cluster_property/test_output.py
|
|
||||||
+++ b/pcs_test/tier0/cli/cluster_property/test_output.py
|
|
||||||
@@ -21,6 +21,7 @@ FIXTURE_TWO_PROPERTY_SETS = [
|
|
||||||
CibNvpairDto(id="", name="readonly2", value="ro_val2"),
|
|
||||||
CibNvpairDto(id="", name="property2", value="val2"),
|
|
||||||
CibNvpairDto(id="", name="property1", value="val1"),
|
|
||||||
+ CibNvpairDto(id="", name="property1", value="duplicate_val1"),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
CibNvsetDto(
|
|
||||||
@@ -39,6 +40,7 @@ FIXTURE_READONLY_PROPERTIES_LIST = ["readonly1", "readonly2"]
|
|
||||||
FIXTURE_TEXT_OUTPUT_FIRST_SET = dedent(
|
|
||||||
"""\
|
|
||||||
Cluster Properties: id1 score=150
|
|
||||||
+ property1=duplicate_val1
|
|
||||||
property1=val1
|
|
||||||
property2=val2
|
|
||||||
readonly1=ro_val1
|
|
||||||
@@ -75,6 +77,7 @@ def fixture_property_metadata(
|
|
||||||
|
|
||||||
|
|
||||||
FIXTURE_PROPERTY_METADATA_LIST = [
|
|
||||||
+ fixture_property_metadata(name="property1", default="duplicate_default1"),
|
|
||||||
fixture_property_metadata(name="property1", default="default1"),
|
|
||||||
fixture_property_metadata(name="property2", default="default2"),
|
|
||||||
fixture_property_metadata(
|
|
||||||
@@ -136,7 +139,7 @@ class TestPropertyConfigurationFacadeGetPropertyValue(TestCase):
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_property_value_from_first_set(self):
|
|
||||||
- self.assertEqual(self.facade.get_property_value("property1"), "val1")
|
|
||||||
+ self.assertEqual(self.facade.get_property_value("property2"), "val2")
|
|
||||||
|
|
||||||
def test_property_value_from_second_set(self):
|
|
||||||
self.assertEqual(self.facade.get_property_value("property3"), None)
|
|
||||||
@@ -152,6 +155,11 @@ class TestPropertyConfigurationFacadeGetPropertyValue(TestCase):
|
|
||||||
"custom",
|
|
||||||
)
|
|
||||||
|
|
||||||
+ def test_property_with_multiple_values(self):
|
|
||||||
+ self.assertEqual(
|
|
||||||
+ self.facade.get_property_value("property1"), "duplicate_val1"
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
|
|
||||||
class TestPropertyConfigurationFacadeGetPropertyValueOrDefault(TestCase):
|
|
||||||
def setUp(self):
|
|
||||||
@@ -163,7 +171,7 @@ class TestPropertyConfigurationFacadeGetPropertyValueOrDefault(TestCase):
|
|
||||||
|
|
||||||
def test_property_value_from_first_set(self):
|
|
||||||
self.assertEqual(
|
|
||||||
- self.facade.get_property_value_or_default("property1"), "val1"
|
|
||||||
+ self.facade.get_property_value_or_default("property2"), "val2"
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_property_value_not_in_set(self):
|
|
||||||
@@ -239,21 +247,22 @@ class TestPropertyConfigurationFacadeGetPropertiesMetadata(TestCase):
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_metadata_without_advanced(self):
|
|
||||||
- metadata = FIXTURE_PROPERTY_METADATA_LIST[0:2]
|
|
||||||
- self.assertEqual(self.facade.get_properties_metadata(), metadata)
|
|
||||||
+ metadata = FIXTURE_PROPERTY_METADATA_LIST[1:3]
|
|
||||||
+ self.assertCountEqual(self.facade.get_properties_metadata(), metadata)
|
|
||||||
|
|
||||||
def test_metadata_with_advanced(self):
|
|
||||||
- metadata = FIXTURE_PROPERTY_METADATA_LIST
|
|
||||||
- self.assertEqual(
|
|
||||||
- self.facade.get_properties_metadata(include_advanced=True), metadata
|
|
||||||
+ metadata = FIXTURE_PROPERTY_METADATA_LIST[1:]
|
|
||||||
+ self.assertCountEqual(
|
|
||||||
+ self.facade.get_properties_metadata(include_advanced=True),
|
|
||||||
+ metadata,
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_metadata_specified(self):
|
|
||||||
metadata = (
|
|
||||||
- FIXTURE_PROPERTY_METADATA_LIST[0:1]
|
|
||||||
+ FIXTURE_PROPERTY_METADATA_LIST[1:2]
|
|
||||||
+ FIXTURE_PROPERTY_METADATA_LIST[-1:]
|
|
||||||
)
|
|
||||||
- self.assertEqual(
|
|
||||||
+ self.assertCountEqual(
|
|
||||||
self.facade.get_properties_metadata(
|
|
||||||
property_names=["property4", "property1"]
|
|
||||||
),
|
|
||||||
@@ -275,6 +284,7 @@ class TestPropertyConfigurationFacadeGetNameValueDefaultList(TestCase):
|
|
||||||
("readonly2", "ro_val2", False),
|
|
||||||
("property2", "val2", False),
|
|
||||||
("property1", "val1", False),
|
|
||||||
+ ("property1", "duplicate_val1", False),
|
|
||||||
("property3", "default3", True),
|
|
||||||
("property4", "default4", True),
|
|
||||||
]
|
|
||||||
@@ -503,7 +513,8 @@ class TestPropertiesToCmd(TestCase):
|
|
||||||
"""\
|
|
||||||
pcs property set --force -- \\
|
|
||||||
property2=val2 \\
|
|
||||||
- property1=val1
|
|
||||||
+ property1=val1 \\
|
|
||||||
+ property1=duplicate_val1
|
|
||||||
"""
|
|
||||||
)
|
|
||||||
self.assert_lines(facade, output)
|
|
||||||
diff --git a/pcs_test/tier0/lib/commands/test_cluster_property.py b/pcs_test/tier0/lib/commands/test_cluster_property.py
|
|
||||||
index c7cb7ae5..c02761a0 100644
|
|
||||||
--- a/pcs_test/tier0/lib/commands/test_cluster_property.py
|
|
||||||
+++ b/pcs_test/tier0/lib/commands/test_cluster_property.py
|
|
||||||
@@ -911,6 +911,10 @@ class TestGetProperties(TestCase):
|
|
||||||
)
|
|
||||||
self.env_assist.assert_reports([])
|
|
||||||
|
|
||||||
+ @mock.patch(
|
|
||||||
+ "pcs.lib.cib.rule.in_effect.has_rule_in_effect_status_tool",
|
|
||||||
+ lambda: True,
|
|
||||||
+ )
|
|
||||||
def test_evaluate_expired_but_no_set_rule(self):
|
|
||||||
self.config.runner.cib.load(
|
|
||||||
crm_config=fixture_crm_config_properties([("set_id", {})])
|
|
||||||
@@ -924,6 +928,30 @@ class TestGetProperties(TestCase):
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
+ @mock.patch(
|
|
||||||
+ "pcs.lib.cib.rule.in_effect.has_rule_in_effect_status_tool",
|
|
||||||
+ lambda: False,
|
|
||||||
+ )
|
|
||||||
+ def test_evaluate_expired_no_status_tool(self):
|
|
||||||
+ self.config.runner.cib.load(
|
|
||||||
+ crm_config=fixture_crm_config_properties([("set_id", {})])
|
|
||||||
+ )
|
|
||||||
+ self.assertEqual(
|
|
||||||
+ self.command(evaluate_expired=True),
|
|
||||||
+ ListCibNvsetDto(
|
|
||||||
+ nvsets=[
|
|
||||||
+ CibNvsetDto(id="set_id", options={}, rule=None, nvpairs=[])
|
|
||||||
+ ]
|
|
||||||
+ ),
|
|
||||||
+ )
|
|
||||||
+ self.env_assist.assert_reports(
|
|
||||||
+ [
|
|
||||||
+ fixture.warn(
|
|
||||||
+ reports.codes.RULE_IN_EFFECT_STATUS_DETECTION_NOT_SUPPORTED,
|
|
||||||
+ )
|
|
||||||
+ ]
|
|
||||||
+ )
|
|
||||||
+
|
|
||||||
|
|
||||||
class TestGetPropertiesMetadata(MetadataErrorMixin, TestCase):
|
|
||||||
_load_cib_when_metadata_error = False
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,55 +0,0 @@
|
|||||||
From e47799cbdd588649872efd24d6bcfa78acb23ecb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Jelinek <tojeline@redhat.com>
|
|
||||||
Date: Tue, 11 Jul 2023 14:09:17 +0200
|
|
||||||
Subject: [PATCH 3/3] use a filter when extracting a config backup tarball
|
|
||||||
|
|
||||||
---
|
|
||||||
pcs/config.py | 26 ++++++++++++++++++++++++--
|
|
||||||
1 file changed, 24 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/pcs/config.py b/pcs/config.py
|
|
||||||
index 56c49aae..d750f52f 100644
|
|
||||||
--- a/pcs/config.py
|
|
||||||
+++ b/pcs/config.py
|
|
||||||
@@ -488,14 +488,36 @@ def config_restore_local(infile_name, infile_obj):
|
|
||||||
if "rename" in extract_info and extract_info["rename"]:
|
|
||||||
if tmp_dir is None:
|
|
||||||
tmp_dir = tempfile.mkdtemp()
|
|
||||||
- tarball.extractall(tmp_dir, [tar_member_info])
|
|
||||||
+ if hasattr(tarfile, "data_filter"):
|
|
||||||
+ # Safe way of extraction is available since Python 3.12,
|
|
||||||
+ # hasattr above checks if it's available.
|
|
||||||
+ # It's also backported to 3.11.4, 3.10.12, 3.9.17.
|
|
||||||
+ # It may be backported to older versions in downstream.
|
|
||||||
+ tarball.extractall(
|
|
||||||
+ tmp_dir, [tar_member_info], filter="data"
|
|
||||||
+ )
|
|
||||||
+ else:
|
|
||||||
+ # Unsafe way of extraction
|
|
||||||
+ # Remove once we don't support Python 3.8 and older
|
|
||||||
+ tarball.extractall(tmp_dir, [tar_member_info])
|
|
||||||
path_full = extract_info["path"]
|
|
||||||
shutil.move(
|
|
||||||
os.path.join(tmp_dir, tar_member_info.name), path_full
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
dir_path = os.path.dirname(extract_info["path"])
|
|
||||||
- tarball.extractall(dir_path, [tar_member_info])
|
|
||||||
+ if hasattr(tarfile, "data_filter"):
|
|
||||||
+ # Safe way of extraction is available since Python 3.12,
|
|
||||||
+ # hasattr above checks if it's available.
|
|
||||||
+ # It's also backported to 3.11.4, 3.10.12, 3.9.17.
|
|
||||||
+ # It may be backported to older versions in downstream.
|
|
||||||
+ tarball.extractall(
|
|
||||||
+ dir_path, [tar_member_info], filter="data"
|
|
||||||
+ )
|
|
||||||
+ else:
|
|
||||||
+ # Unsafe way of extracting
|
|
||||||
+ # Remove once we don't support Python 3.8 and older
|
|
||||||
+ tarball.extractall(dir_path, [tar_member_info])
|
|
||||||
path_full = os.path.join(dir_path, tar_member_info.name)
|
|
||||||
file_attrs = extract_info["attrs"]
|
|
||||||
os.chmod(path_full, file_attrs["mode"])
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,53 +0,0 @@
|
|||||||
From 074e24f039a5bdfa81d17feb390dd342eda5ba73 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ivan Devat <idevat@redhat.com>
|
|
||||||
Date: Fri, 14 Jul 2023 14:44:20 +0200
|
|
||||||
Subject: [PATCH] fix assets url (relative -> absolute)
|
|
||||||
|
|
||||||
---
|
|
||||||
.bin/build.sh | 16 +++++++++++-----
|
|
||||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.bin/build.sh b/.bin/build.sh
|
|
||||||
index 2113eaae..c7f0b4a0 100755
|
|
||||||
--- a/.bin/build.sh
|
|
||||||
+++ b/.bin/build.sh
|
|
||||||
@@ -74,10 +74,15 @@ inject_built_assets() {
|
|
||||||
}
|
|
||||||
|
|
||||||
fix_asset_paths() {
|
|
||||||
- # All assets in index.html uses absolute path. This function makes them
|
|
||||||
- # relative. The index.html is also used by development server which needs
|
|
||||||
- # absolute paths. There is no copy/edit phase in development server, so it is
|
|
||||||
- # done here.
|
|
||||||
+ # All assets in index.html uses absolute path. The index.html is also used by
|
|
||||||
+ # development server which needs absolute paths. There is no copy/edit phase
|
|
||||||
+ # in development server, so it is done here.
|
|
||||||
+ # Here is the absolute path prefixed according to pcsd url namespace for
|
|
||||||
+ # webui.
|
|
||||||
+ # WARNING: Don't use relative path. It works well in dashboard but in the
|
|
||||||
+ # cluster detail the resulting url contains word "cluster" inside, so instead
|
|
||||||
+ # of "/ui/static/..." we get "/ui/cluster/static" and asset loading fails.
|
|
||||||
+ # see: https://bugzilla.redhat.com/show_bug.cgi?id=2222788
|
|
||||||
html=$1
|
|
||||||
path_prefix=$2
|
|
||||||
js_path="$3/"
|
|
||||||
@@ -130,6 +135,7 @@ adapt_for_environment() {
|
|
||||||
}
|
|
||||||
|
|
||||||
use_current_node_modules=${BUILD_USE_CURRENT_NODE_MODULES:-"false"}
|
|
||||||
+url_prefix=${PCSD_BUILD_URL_PREFIX:-"/ui"}
|
|
||||||
node_modules=$(get_path "appNodeModules")
|
|
||||||
node_modules_backup="${node_modules}.build-backup"
|
|
||||||
export BUILD_DIR="${BUILD_DIR:-$(realpath "$(dirname "$0")"/../build)}"
|
|
||||||
@@ -155,7 +161,7 @@ adapt_for_environment \
|
|
||||||
static/js/adapterCockpit.js \
|
|
||||||
"${PCSD_UINIX_SOCKET:-"/var/run/pcsd.socket"}"
|
|
||||||
|
|
||||||
-fix_asset_paths "$BUILD_DIR"/index.html "." \
|
|
||||||
+fix_asset_paths "$BUILD_DIR"/index.html "$url_prefix" \
|
|
||||||
static/js \
|
|
||||||
static/css \
|
|
||||||
manifest.json \
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
25
daemon-fix-serving-static-files.patch
Normal file
25
daemon-fix-serving-static-files.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From bbc3970d2425f403593374a4372c890fbaa04f3f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Jelinek <tojeline@redhat.com>
|
||||||
|
Date: Wed, 22 Nov 2023 10:02:45 +0100
|
||||||
|
Subject: [PATCH] daemon: fix serving static files
|
||||||
|
|
||||||
|
---
|
||||||
|
pcs/daemon/app/ui.py | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/pcs/daemon/app/ui.py b/pcs/daemon/app/ui.py
|
||||||
|
index d839f2c8..eaf6f54f 100644
|
||||||
|
--- a/pcs/daemon/app/ui.py
|
||||||
|
+++ b/pcs/daemon/app/ui.py
|
||||||
|
@@ -102,7 +102,7 @@ class StaticFileMayBe(StaticFile):
|
||||||
|
# spa is probably not installed
|
||||||
|
self.set_status(404, "Not Found")
|
||||||
|
return None
|
||||||
|
- return super().get(*args, **kwargs)
|
||||||
|
+ return await super().get(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def get_routes(
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
From 948eb79f2f4057ac8143242b29e8c164ee4516ed Mon Sep 17 00:00:00 2001
|
From 9848d882dbb050bf9bfb4a4582a921757c0119da Mon Sep 17 00:00:00 2001
|
||||||
From: Ivan Devat <idevat@redhat.com>
|
From: Ivan Devat <idevat@redhat.com>
|
||||||
Date: Tue, 20 Nov 2018 15:03:56 +0100
|
Date: Tue, 20 Nov 2018 15:03:56 +0100
|
||||||
Subject: [PATCH] do not support cluster setup with udp(u) transport in RHEL9
|
Subject: [PATCH] do not support cluster setup with udp(u) transport in RHEL9
|
||||||
@ -9,7 +9,7 @@ Subject: [PATCH] do not support cluster setup with udp(u) transport in RHEL9
|
|||||||
2 files changed, 3 insertions(+)
|
2 files changed, 3 insertions(+)
|
||||||
|
|
||||||
diff --git a/pcs/pcs.8.in b/pcs/pcs.8.in
|
diff --git a/pcs/pcs.8.in b/pcs/pcs.8.in
|
||||||
index 2baf0009..9b2f7388 100644
|
index 55f4b4a9..8cc9360d 100644
|
||||||
--- a/pcs/pcs.8.in
|
--- a/pcs/pcs.8.in
|
||||||
+++ b/pcs/pcs.8.in
|
+++ b/pcs/pcs.8.in
|
||||||
@@ -479,6 +479,8 @@ By default, encryption is enabled with cipher=aes256 and hash=sha256. To disable
|
@@ -479,6 +479,8 @@ By default, encryption is enabled with cipher=aes256 and hash=sha256. To disable
|
||||||
@ -22,10 +22,10 @@ index 2baf0009..9b2f7388 100644
|
|||||||
.br
|
.br
|
||||||
Transport options are: ip_version, netmtu
|
Transport options are: ip_version, netmtu
|
||||||
diff --git a/pcs/usage.py b/pcs/usage.py
|
diff --git a/pcs/usage.py b/pcs/usage.py
|
||||||
index df149e5b..c915b513 100644
|
index cc6c5803..a7d4b24b 100644
|
||||||
--- a/pcs/usage.py
|
--- a/pcs/usage.py
|
||||||
+++ b/pcs/usage.py
|
+++ b/pcs/usage.py
|
||||||
@@ -1486,6 +1486,7 @@ Commands:
|
@@ -1482,6 +1482,7 @@ Commands:
|
||||||
hash=sha256. To disable encryption, set cipher=none and hash=none.
|
hash=sha256. To disable encryption, set cipher=none and hash=none.
|
||||||
|
|
||||||
Transports udp and udpu:
|
Transports udp and udpu:
|
||||||
|
30
fix-routing-of-web-ui-manifest-files.patch
Normal file
30
fix-routing-of-web-ui-manifest-files.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From 3f1bc69cc8394f2748d50b7c4e1d5fc57d825246 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ivan Devat <idevat@redhat.com>
|
||||||
|
Date: Thu, 23 Nov 2023 09:38:45 +0100
|
||||||
|
Subject: [PATCH] fix routing of web-ui manifest*.json files
|
||||||
|
|
||||||
|
---
|
||||||
|
pcs/daemon/app/ui.py | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/pcs/daemon/app/ui.py b/pcs/daemon/app/ui.py
|
||||||
|
index eaf6f54f..f375806d 100644
|
||||||
|
--- a/pcs/daemon/app/ui.py
|
||||||
|
+++ b/pcs/daemon/app/ui.py
|
||||||
|
@@ -127,7 +127,12 @@ def get_routes(
|
||||||
|
|
||||||
|
return [
|
||||||
|
(f"{url_prefix}static/(.*)", StaticFileMayBe, static_path("static")),
|
||||||
|
- (f"{url_prefix}manifest.json", StaticFileMayBe, static_path()),
|
||||||
|
+ (f"{url_prefix}(manifest\\.json)", StaticFileMayBe, static_path()),
|
||||||
|
+ (
|
||||||
|
+ f"{url_prefix}(manifest_test_marks\\.json)",
|
||||||
|
+ StaticFileMayBe,
|
||||||
|
+ static_path(),
|
||||||
|
+ ),
|
||||||
|
(
|
||||||
|
f"{url_prefix}login",
|
||||||
|
Login,
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
32
login-fix-autocomplete-attribute-placement.patch
Normal file
32
login-fix-autocomplete-attribute-placement.patch
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
From b07e80dcef2642b8bbfaa4baf01983b9f9ed1982 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Pospisil <mpospisi@redhat.com>
|
||||||
|
Date: Wed, 22 Nov 2023 17:38:24 +0100
|
||||||
|
Subject: [PATCH] login: fix autocomplete attribute placement
|
||||||
|
|
||||||
|
---
|
||||||
|
packages/app/src/app/view/app/login/LoginForm.tsx | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/packages/app/src/app/view/app/login/LoginForm.tsx b/packages/app/src/app/view/app/login/LoginForm.tsx
|
||||||
|
index e3d2e2c0..7d7781b5 100644
|
||||||
|
--- a/packages/app/src/app/view/app/login/LoginForm.tsx
|
||||||
|
+++ b/packages/app/src/app/view/app/login/LoginForm.tsx
|
||||||
|
@@ -39,7 +39,6 @@ export const LoginForm = (props: {
|
||||||
|
name="pf-login-username-id"
|
||||||
|
value={props.usernameValue}
|
||||||
|
onChange={props.onChangeUsername}
|
||||||
|
- autoComplete="off"
|
||||||
|
{...form.username.mark}
|
||||||
|
/>
|
||||||
|
</FormGroup>
|
||||||
|
@@ -57,6 +56,7 @@ export const LoginForm = (props: {
|
||||||
|
validated="default"
|
||||||
|
value={props.passwordValue}
|
||||||
|
onChange={props.onChangePassword}
|
||||||
|
+ autoComplete="off"
|
||||||
|
{...form.password.mark}
|
||||||
|
/>
|
||||||
|
</FormGroup>
|
||||||
|
--
|
||||||
|
2.41.0
|
||||||
|
|
45
pcs.spec
45
pcs.spec
@ -1,6 +1,6 @@
|
|||||||
Name: pcs
|
Name: pcs
|
||||||
Version: 0.11.6
|
Version: 0.11.6
|
||||||
Release: 5%{?dist}
|
Release: 6%{?dist}
|
||||||
# https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/
|
# https://docs.fedoraproject.org/en-US/packaging-guidelines/LicensingGuidelines/
|
||||||
# https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses
|
# https://fedoraproject.org/wiki/Licensing:Main?rd=Licensing#Good_Licenses
|
||||||
# GPL-2.0-only: pcs
|
# GPL-2.0-only: pcs
|
||||||
@ -19,33 +19,33 @@ Summary: Pacemaker/Corosync Configuration System
|
|||||||
ExclusiveArch: i686 x86_64 s390x ppc64le aarch64
|
ExclusiveArch: i686 x86_64 s390x ppc64le aarch64
|
||||||
|
|
||||||
# When specifying a commit, use its long hash
|
# When specifying a commit, use its long hash
|
||||||
%global version_or_commit %{version}
|
# %%global version_or_commit %%{version}
|
||||||
# %%global version_or_commit 3e479bdb68dc900523a743e7dcb759b501385555
|
%global version_or_commit aaa16e0de986890e6ca3038f907bbad331e41a87
|
||||||
%global pcs_source_name %{name}-%{version_or_commit}
|
%global pcs_source_name %{name}-%{version_or_commit}
|
||||||
|
|
||||||
# ui_commit can be determined by hash, tag or branch
|
# ui_commit can be determined by hash, tag or branch
|
||||||
%global ui_commit 0.1.17
|
%global ui_commit 0.1.18
|
||||||
%global ui_modules_version 0.1.17
|
%global ui_modules_version 0.1.18
|
||||||
%global ui_src_name pcs-web-ui-%{ui_commit}
|
%global ui_src_name pcs-web-ui-%{ui_commit}
|
||||||
|
|
||||||
%global pcs_snmp_pkg_name pcs-snmp
|
%global pcs_snmp_pkg_name pcs-snmp
|
||||||
|
|
||||||
%global pyagentx_version 0.4.pcs.2
|
%global pyagentx_version 0.4.pcs.2
|
||||||
%global tornado_version 6.3.2
|
%global tornado_version 6.3.3
|
||||||
%global dacite_version 1.8.1
|
%global dacite_version 1.8.1
|
||||||
%global version_rubygem_backports 3.24.1
|
%global version_rubygem_backports 3.24.1
|
||||||
%global version_rubygem_childprocess 4.1.0
|
%global version_rubygem_childprocess 4.1.0
|
||||||
%global version_rubygem_ethon 0.16.0
|
%global version_rubygem_ethon 0.16.0
|
||||||
%global version_rubygem_ffi 1.15.5
|
%global version_rubygem_ffi 1.16.3
|
||||||
%global version_rubygem_mustermann 3.0.0
|
%global version_rubygem_mustermann 3.0.0
|
||||||
%global version_rubygem_nio4r 2.5.9
|
%global version_rubygem_nio4r 2.5.9
|
||||||
%global version_rubygem_puma 6.3.0
|
%global version_rubygem_puma 6.4.0
|
||||||
%global version_rubygem_rack 2.2.7
|
%global version_rubygem_rack 2.2.8
|
||||||
%global version_rubygem_rack_protection 3.0.6
|
%global version_rubygem_rack_protection 3.1.0
|
||||||
%global version_rubygem_rack_test 2.1.0
|
%global version_rubygem_rack_test 2.1.0
|
||||||
%global version_rubygem_ruby2_keywords 0.0.5
|
%global version_rubygem_ruby2_keywords 0.0.5
|
||||||
%global version_rubygem_sinatra 3.0.6
|
%global version_rubygem_sinatra 3.1.0
|
||||||
%global version_rubygem_tilt 2.2.0
|
%global version_rubygem_tilt 2.3.0
|
||||||
|
|
||||||
%global required_pacemaker_version 2.1.0
|
%global required_pacemaker_version 2.1.0
|
||||||
|
|
||||||
@ -101,13 +101,12 @@ Source101: https://github.com/ClusterLabs/pcs-web-ui/releases/download/%{ui_comm
|
|||||||
# pcs patches: <= 200
|
# pcs patches: <= 200
|
||||||
# Patch0: bzNUMBER-01-name.patch
|
# Patch0: bzNUMBER-01-name.patch
|
||||||
Patch0: do-not-support-cluster-setup-with-udp-u-transport.patch
|
Patch0: do-not-support-cluster-setup-with-udp-u-transport.patch
|
||||||
Patch1: bz2163953-01-constraint-fixes.patch
|
Patch1: daemon-fix-serving-static-files.patch
|
||||||
Patch2: bz2217850-01-fix-exporting-location-constraints-with-rules.patch
|
Patch2: fix-routing-of-web-ui-manifest-files.patch
|
||||||
Patch3: bz2219407-01-use-a-filter-when-extracting-a-config-backup-tarball.patch
|
|
||||||
|
|
||||||
# ui patches: >200
|
# ui patches: >200
|
||||||
# Patch201: bzNUMBER-01-name.patch
|
# Patch201: bzNUMBER-01-name.patch
|
||||||
Patch201: bz2222788-01-fix-assets-url-relative-absolute.patch
|
Patch201: login-fix-autocomplete-attribute-placement.patch
|
||||||
|
|
||||||
# git for patches
|
# git for patches
|
||||||
BuildRequires: git-core
|
BuildRequires: git-core
|
||||||
@ -300,7 +299,6 @@ update_times_patch %{PATCH201}
|
|||||||
update_times_patch %{PATCH0}
|
update_times_patch %{PATCH0}
|
||||||
update_times_patch %{PATCH1}
|
update_times_patch %{PATCH1}
|
||||||
update_times_patch %{PATCH2}
|
update_times_patch %{PATCH2}
|
||||||
update_times_patch %{PATCH3}
|
|
||||||
|
|
||||||
# generate .tarball-version if building from an untagged commit, not a released version
|
# generate .tarball-version if building from an untagged commit, not a released version
|
||||||
# autogen uses git-version-gen which uses .tarball-version for generating version number
|
# autogen uses git-version-gen which uses .tarball-version for generating version number
|
||||||
@ -342,7 +340,10 @@ update_times_patch %{PATCH3}
|
|||||||
%define debug_package %{nil}
|
%define debug_package %{nil}
|
||||||
|
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
%{configure} --enable-local-build --enable-use-local-cache-only --enable-individual-bundling --enable-booth-enable-authfile-set --enable-booth-enable-authfile-unset PYTHON=%{__python3} ruby_CFLAGS="%{optflags}" ruby_LIBS="%{build_ldflags}"
|
%{configure} --enable-local-build --enable-use-local-cache-only \
|
||||||
|
--enable-individual-bundling --with-pcsd-default-cipherlist='PROFILE=SYSTEM' \
|
||||||
|
--enable-booth-enable-authfile-unset --enable-booth-enable-authfile-set \
|
||||||
|
PYTHON=%{__python3} ruby_CFLAGS="%{optflags}" ruby_LIBS="%{build_ldflags}"
|
||||||
make all
|
make all
|
||||||
|
|
||||||
# build pcs-web-ui
|
# build pcs-web-ui
|
||||||
@ -545,6 +546,14 @@ run_all_tests
|
|||||||
%license pyagentx_LICENSE.txt
|
%license pyagentx_LICENSE.txt
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Nov 13 2023 Michal Pospisil <mpospisi@redhat.com> - 0.11.6-6
|
||||||
|
- Rebased to the latest upstream sources (see CHANGELOG.md)
|
||||||
|
Resolves: RHEL-7582, RHEL-7583, RHEL-7669, RHEL-7672, RHEL-7697, RHEL-7698, RHEL-7700, RHEL-7703, RHEL-7719, RHEL-7725, RHEL-7730, RHEL-7738, RHEL-7739, RHEL-7740, RHEL-7744, RHEL-7746
|
||||||
|
- TLS cipher setting in pcsd now follows system-wide crypto policies by default
|
||||||
|
Resolves: RHEL-7724
|
||||||
|
- Tightened permissions of bundled rubygems to be 755 or stricter
|
||||||
|
Resolves: RHEL-7716
|
||||||
|
|
||||||
* Thu Nov 2 2023 Michal Pospisil <mpospisi@redhat.com> - 0.11.6-5
|
* Thu Nov 2 2023 Michal Pospisil <mpospisi@redhat.com> - 0.11.6-5
|
||||||
- No changes, fixing an error in a new quality control process
|
- No changes, fixing an error in a new quality control process
|
||||||
- Resolves: RHEL-15217
|
- Resolves: RHEL-15217
|
||||||
|
20
sources
20
sources
@ -1,19 +1,19 @@
|
|||||||
SHA512 (pyagentx-0.4.pcs.2.tar.gz) = d4194fec9a3e5fefe3793d49b7fec1feafef294c7e613a06046c2993daeefc5cb39d7c5b2b402ff83e49b2d976953f862264288c758c0be09d997b5323cc558a
|
SHA512 (pyagentx-0.4.pcs.2.tar.gz) = d4194fec9a3e5fefe3793d49b7fec1feafef294c7e613a06046c2993daeefc5cb39d7c5b2b402ff83e49b2d976953f862264288c758c0be09d997b5323cc558a
|
||||||
SHA512 (ffi-1.15.5.gem) = 074df34edffc7038ab08199350a97b32280d61ea15dd85d459b008bd3363ec5403b4e533621c8e460e5288f01fec944bff9b149851b819e85bab75ad2362227c
|
|
||||||
SHA512 (ruby2_keywords-0.0.5.gem) = f6b9078b111e68c0017e0025ecdccb976c7a32f35c1a8adf9fd879db0c91f89eb9bd799f9527a846e28056f2a5fbf0f3610cda9538570288c493613c35c83a6f
|
SHA512 (ruby2_keywords-0.0.5.gem) = f6b9078b111e68c0017e0025ecdccb976c7a32f35c1a8adf9fd879db0c91f89eb9bd799f9527a846e28056f2a5fbf0f3610cda9538570288c493613c35c83a6f
|
||||||
SHA512 (childprocess-4.1.0.gem) = e635c3acfa5ad85891c3879f240c7e96d47d7d5ec3f472f4ce6661552b0fb7bd72c5e3b9fb73f4f9312b749fbe554b4be388e56a31a3c63c39743d055d774def
|
SHA512 (childprocess-4.1.0.gem) = e635c3acfa5ad85891c3879f240c7e96d47d7d5ec3f472f4ce6661552b0fb7bd72c5e3b9fb73f4f9312b749fbe554b4be388e56a31a3c63c39743d055d774def
|
||||||
SHA512 (mustermann-3.0.0.gem) = c33d41281fe2ac80c0af0c5c31dbab2068c73b9da19a4b82b387bbe551019fc115675634d932a8e56b070c3a06a85d830c982a103e6c5193aff8647f599be6e3
|
SHA512 (mustermann-3.0.0.gem) = c33d41281fe2ac80c0af0c5c31dbab2068c73b9da19a4b82b387bbe551019fc115675634d932a8e56b070c3a06a85d830c982a103e6c5193aff8647f599be6e3
|
||||||
SHA512 (ethon-0.16.0.gem) = 3b31affcee0d5a5be05b5497d4a8d13515f8393f54579a3a9c8de49f78d3f065bb92659434b023f0a8bf8e0cccfbc94b617695b93c4d3f744cccd1eff2e68905
|
SHA512 (ethon-0.16.0.gem) = 3b31affcee0d5a5be05b5497d4a8d13515f8393f54579a3a9c8de49f78d3f065bb92659434b023f0a8bf8e0cccfbc94b617695b93c4d3f744cccd1eff2e68905
|
||||||
SHA512 (pcs-web-ui-0.1.17.tar.gz) = a5dd551c47040d9c9a2f714a83b835aaf5cca8d5dd05c83f641ddecdb7d99ac82a3b265df508c0ec1bc51ea572210d6255d79631f4680205c6302cb89460d14c
|
|
||||||
SHA512 (pcs-web-ui-node-modules-0.1.17.tar.xz) = 51f47be3b28a378542ebe862a333e8883bbcf4e40a2aea685986b9d17db91dab01cb3b58c9ffba56f335bedfe0a9477ebb1ff93824228ed5348f864afad5b98d
|
|
||||||
SHA512 (dacite-1.8.1.tar.gz) = 4b40c0bdcf5490bcc77de9e7f04b7267642bcfd41e4168607a5457f38abe3ad4b3041d8a23cb43af76de14eabee45f900ad5ddf7af8f70a2be4850bccc2d3af1
|
SHA512 (dacite-1.8.1.tar.gz) = 4b40c0bdcf5490bcc77de9e7f04b7267642bcfd41e4168607a5457f38abe3ad4b3041d8a23cb43af76de14eabee45f900ad5ddf7af8f70a2be4850bccc2d3af1
|
||||||
SHA512 (nio4r-2.5.9.gem) = d1c52896f186d19eb089a94d74ccadb427e64c204af149aa83a5a4dda3f0edd1bd2bae94afd21fcd58e3c2b9e2c17278a18717c0905de80e45540d13eeefd9e5
|
SHA512 (nio4r-2.5.9.gem) = d1c52896f186d19eb089a94d74ccadb427e64c204af149aa83a5a4dda3f0edd1bd2bae94afd21fcd58e3c2b9e2c17278a18717c0905de80e45540d13eeefd9e5
|
||||||
SHA512 (backports-3.24.1.gem) = b2eeb76ebf8ddfc7e349e125c6b9cffcabe3d184533579dbf2abb5f663ce85f4a6f8b01b67be4030c98f4782c63511046a1a1efa4d573a9aeb700dcbb9f9f566
|
SHA512 (backports-3.24.1.gem) = b2eeb76ebf8ddfc7e349e125c6b9cffcabe3d184533579dbf2abb5f663ce85f4a6f8b01b67be4030c98f4782c63511046a1a1efa4d573a9aeb700dcbb9f9f566
|
||||||
SHA512 (rack-2.2.7.gem) = 81df6b9bbc417f0ddcfe4d3278c3b244ff355d876e6c982b8fdd648d37652034aa11a16baa02d152c8d110c3d2b19c96b81b38f680cb274e5155978d0c21f8be
|
|
||||||
SHA512 (rack-protection-3.0.6.gem) = 4763a0439a3d99cfd799325004c7e6cb46783b3fcd77ea0df08caa6b5cdfc95c6ec96791d79261a0d7df26eb0b084e7ead2cceb05b589617159e948b3172e564
|
|
||||||
SHA512 (rack-test-2.1.0.gem) = e349ce61c3d787e0a772980db697e92212d4d9592ce33f55516d1f85fba55cbe666496c76392679b057786d6dab603d74b83e7bb773ab54940343e36dbf05d6f
|
SHA512 (rack-test-2.1.0.gem) = e349ce61c3d787e0a772980db697e92212d4d9592ce33f55516d1f85fba55cbe666496c76392679b057786d6dab603d74b83e7bb773ab54940343e36dbf05d6f
|
||||||
SHA512 (sinatra-3.0.6.gem) = 3eabaca09d7528fada3c24200014de67678b01a7d1bfe1141f0bad977ebd22eb0e57d286b1e445c2b2d657bcf4b9ff7d2dd06ad3d3b7376c30043dc9961f2856
|
SHA512 (ffi-1.16.3.gem) = b3d823a03055412a85ae3dbc10c3b50615614f0b66830e144ca47610b1f93f588ff693a95d364b4f686968b79bba91f9f9fa60b932479c6bf9ceb10e15575b98
|
||||||
SHA512 (tornado-6.3.2.tar.gz) = dc0ad9b4c0b5597970fd43a577bb9a0883523125cf4e9780f9338431aab1014cb6fc0dda4f3deb3050df657b5acf277cc146ec2195b91154299109ff07482a5c
|
SHA512 (puma-6.4.0.gem) = 3f481bd2bd34ed0d66d86f61d7522a48b4d8bfd36b807a1c47bb3b640bc6050a72f4f710fd4fad16260b560f98050e34faad044a54cb759c7ffe8371c3548c18
|
||||||
SHA512 (tilt-2.2.0.gem) = fd3e01dc58d2a1fb884c9212e6fd3291dcc710b906d23fc86af93d29f1bb2a94edbd5819d8fa91e6184fc2359392a9eb7cbdcdbebd215dacc857a1586500dfc6
|
SHA512 (rack-2.2.8.gem) = 8d12f6ce307f0474529218086c25d9f043b7787c65fab919bf9d706c00b3d61e2460e2fef02134e6e76b721b97cc86d80fa1a22d8adda89b19fc29b21694c15d
|
||||||
SHA512 (puma-6.3.0.gem) = a4bbc965f19a8795e87f7f2cacaf5b63167284f31207dcfb6df6a61d0d1e585d782f0e2fc4155327124163875e2f9fed98eed24d497bc5f79dfbf0be3f16a564
|
SHA512 (rack-protection-3.1.0.gem) = 18a5ffe614a906ca876926bff3e4d1657f0b6963005ee32de80d0ab987b9465f603b30d69f07fd8d8a1ebf4fa85eb89bfd0b607d72387b360d13bea113a63ef7
|
||||||
SHA512 (pcs-0.11.6.tar.gz) = 0a1508d71c17952c3d40c40147cfa05643c34fcdd162603dd6d6c02fd4c6add1e691e3412636875fc6a75f7c533e6867328acc44713752b59d237f866c90f050
|
SHA512 (sinatra-3.1.0.gem) = e2b1f72f6ac57ce56006b6c39c72bec8135a448b2b235d6fd061fe3d02bd32b6bd8521c8083975e2ec758b8ba9634d6bc2e90b0f5ffae954437ffb26f808b50b
|
||||||
|
SHA512 (tilt-2.3.0.gem) = 78a3de34e3d096e40cb245807bad07cc3ebfa192986addbd228c25153166808b379f3ce086ff68fa5959997946187fe8923e84100653b2b109007390969875b3
|
||||||
|
SHA512 (tornado-6.3.3.tar.gz) = d4813de111139da2f5bd390bdd8d456797a48ba2ebe730946aabd66d9269ce4425d9b70ce62aa443ea5590d667b9056766841d99dcb0f383b2c9acd409474c8d
|
||||||
|
SHA512 (pcs-aaa16e0de986890e6ca3038f907bbad331e41a87.tar.gz) = 582a644e7f39902ccb08b64d8c66716f3f98eee98d683ce91ba311ba5134175d44143aecb917b978c1e91ff976701460b7f44d89ef444335707e071591709013
|
||||||
|
SHA512 (pcs-web-ui-0.1.18.tar.gz) = 3c7c90608a2140d366668943e2985267519b9352ab7843b689f3583a577873a292e9746820278fdedba3f6981ca16926a5656d7b7a78c6546c9a7ebb0a396436
|
||||||
|
SHA512 (pcs-web-ui-node-modules-0.1.18.tar.xz) = 237ff976d67a7bf881e45334261af1da32c6330fbf9e7436dcf33e63c9373f85f36db52622676f77e27bb6a853c046223cfe0cca25de68bd004c6535aa077fd7
|
||||||
|
Loading…
Reference in New Issue
Block a user