Compare commits
10 Commits
e3313bd1c5
...
f6b57b310d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6b57b310d | ||
|
|
b751171e52 | ||
|
|
7c79dc7822 | ||
|
|
12a024ef83 | ||
|
|
d0aece5c27 | ||
|
|
a26166d729 | ||
|
|
d6bc7c8c1c | ||
|
|
6442d892b3 | ||
|
|
9e0abd6418 | ||
|
|
49b0328d72 |
@ -1,72 +0,0 @@
|
|||||||
From cc9b7996e542640bb19365822344298a04b18e44 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paula Gombar <gombarica@gmail.com>
|
|
||||||
Date: Wed, 18 Nov 2020 12:24:33 -0800
|
|
||||||
Subject: [PATCH 1/3] update array.tostring() and json.loads without encoding
|
|
||||||
for py3.9
|
|
||||||
|
|
||||||
---
|
|
||||||
azurelinuxagent/common/osutil/bigip.py | 7 ++++++-
|
|
||||||
azurelinuxagent/common/osutil/default.py | 6 +++++-
|
|
||||||
tests/protocol/test_imds.py | 4 ++--
|
|
||||||
3 files changed, 13 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/azurelinuxagent/common/osutil/bigip.py b/azurelinuxagent/common/osutil/bigip.py
|
|
||||||
index 61d3c695f911..ceadf8ca2066 100644
|
|
||||||
--- a/azurelinuxagent/common/osutil/bigip.py
|
|
||||||
+++ b/azurelinuxagent/common/osutil/bigip.py
|
|
||||||
@@ -280,7 +280,12 @@ class BigIpOSUtil(DefaultOSUtil):
|
|
||||||
if retsize == (expected * struct_size):
|
|
||||||
logger.warn(('SIOCGIFCONF returned more than {0} up '
|
|
||||||
'network interfaces.'), expected)
|
|
||||||
- sock = buff.tostring()
|
|
||||||
+ try:
|
|
||||||
+ # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
|
|
||||||
+ sock = buff.tostring()
|
|
||||||
+ except AttributeError:
|
|
||||||
+ sock = buff.tobytes()
|
|
||||||
+
|
|
||||||
for i in range(0, struct_size * expected, struct_size):
|
|
||||||
iface = self._format_single_interface_name(sock, i)
|
|
||||||
|
|
||||||
diff --git a/azurelinuxagent/common/osutil/default.py b/azurelinuxagent/common/osutil/default.py
|
|
||||||
index 521776818e64..6179061756e3 100644
|
|
||||||
--- a/azurelinuxagent/common/osutil/default.py
|
|
||||||
+++ b/azurelinuxagent/common/osutil/default.py
|
|
||||||
@@ -758,7 +758,11 @@ class DefaultOSUtil(object):
|
|
||||||
logger.warn(('SIOCGIFCONF returned more than {0} up '
|
|
||||||
'network interfaces.'), expected)
|
|
||||||
|
|
||||||
- ifconf_buff = buff.tostring()
|
|
||||||
+ try:
|
|
||||||
+ # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
|
|
||||||
+ ifconf_buff = buff.tostring()
|
|
||||||
+ except AttributeError:
|
|
||||||
+ ifconf_buff = buff.tobytes()
|
|
||||||
|
|
||||||
ifaces = {}
|
|
||||||
for i in range(0, array_size, struct_size):
|
|
||||||
diff --git a/tests/protocol/test_imds.py b/tests/protocol/test_imds.py
|
|
||||||
index a730ded03525..47462fd25ac3 100644
|
|
||||||
--- a/tests/protocol/test_imds.py
|
|
||||||
+++ b/tests/protocol/test_imds.py
|
|
||||||
@@ -109,7 +109,7 @@ class TestImds(AgentTestCase):
|
|
||||||
"zone": "In"
|
|
||||||
}'''
|
|
||||||
|
|
||||||
- data = json.loads(s, encoding='utf-8')
|
|
||||||
+ data = json.loads(s)
|
|
||||||
|
|
||||||
compute_info = imds.ComputeInfo()
|
|
||||||
set_properties("compute", compute_info, data)
|
|
||||||
@@ -258,7 +258,7 @@ class TestImds(AgentTestCase):
|
|
||||||
"version": "{3}"
|
|
||||||
}}'''.format(publisher, offer, sku, version)
|
|
||||||
|
|
||||||
- data = json.loads(s, encoding='utf-8')
|
|
||||||
+ data = json.loads(s)
|
|
||||||
compute_info = imds.ComputeInfo()
|
|
||||||
set_properties("compute", compute_info, data)
|
|
||||||
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
@ -1,90 +0,0 @@
|
|||||||
From 66f600ed3d9f22c2aa6790002507d0c821a7fd0c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paula Gombar <gombarica@gmail.com>
|
|
||||||
Date: Tue, 8 Dec 2020 18:38:33 -0800
|
|
||||||
Subject: [PATCH 2/3] handle py3.9 check in future.py
|
|
||||||
|
|
||||||
---
|
|
||||||
azurelinuxagent/common/future.py | 13 ++++++++++++-
|
|
||||||
azurelinuxagent/common/osutil/bigip.py | 8 +++-----
|
|
||||||
azurelinuxagent/common/osutil/default.py | 9 ++-------
|
|
||||||
3 files changed, 17 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/azurelinuxagent/common/future.py b/azurelinuxagent/common/future.py
|
|
||||||
index 577fb12e186e..0f76aceba786 100644
|
|
||||||
--- a/azurelinuxagent/common/future.py
|
|
||||||
+++ b/azurelinuxagent/common/future.py
|
|
||||||
@@ -103,4 +103,15 @@ def get_openwrt_platform():
|
|
||||||
elif product_matches:
|
|
||||||
if product_matches.group(1) == "OpenWrt":
|
|
||||||
result[0] = "openwrt"
|
|
||||||
- return result
|
|
||||||
\ No newline at end of file
|
|
||||||
+ return result
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+def array_to_string_or_bytes(buffer):
|
|
||||||
+ # Python 3.9 removed the tostring() method on arrays, the new alias is tobytes()
|
|
||||||
+ if sys.version_info[0] == 2:
|
|
||||||
+ return buffer.tostring()
|
|
||||||
+
|
|
||||||
+ if sys.version_info[0] == 3 and sys.version_info[1] <= 8:
|
|
||||||
+ return buffer.tostring()
|
|
||||||
+
|
|
||||||
+ return buffer.tobytes()
|
|
||||||
diff --git a/azurelinuxagent/common/osutil/bigip.py b/azurelinuxagent/common/osutil/bigip.py
|
|
||||||
index ceadf8ca2066..cc1b64143c12 100644
|
|
||||||
--- a/azurelinuxagent/common/osutil/bigip.py
|
|
||||||
+++ b/azurelinuxagent/common/osutil/bigip.py
|
|
||||||
@@ -24,6 +24,8 @@ import socket
|
|
||||||
import struct
|
|
||||||
import time
|
|
||||||
|
|
||||||
+from azurelinuxagent.common.future import array_to_string_or_bytes
|
|
||||||
+
|
|
||||||
try:
|
|
||||||
# WAAgent > 2.1.3
|
|
||||||
import azurelinuxagent.common.logger as logger
|
|
||||||
@@ -280,12 +282,8 @@ class BigIpOSUtil(DefaultOSUtil):
|
|
||||||
if retsize == (expected * struct_size):
|
|
||||||
logger.warn(('SIOCGIFCONF returned more than {0} up '
|
|
||||||
'network interfaces.'), expected)
|
|
||||||
- try:
|
|
||||||
- # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
|
|
||||||
- sock = buff.tostring()
|
|
||||||
- except AttributeError:
|
|
||||||
- sock = buff.tobytes()
|
|
||||||
|
|
||||||
+ sock = array_to_string_or_bytes(buff)
|
|
||||||
for i in range(0, struct_size * expected, struct_size):
|
|
||||||
iface = self._format_single_interface_name(sock, i)
|
|
||||||
|
|
||||||
diff --git a/azurelinuxagent/common/osutil/default.py b/azurelinuxagent/common/osutil/default.py
|
|
||||||
index 6179061756e3..c1ca15cf64ef 100644
|
|
||||||
--- a/azurelinuxagent/common/osutil/default.py
|
|
||||||
+++ b/azurelinuxagent/common/osutil/default.py
|
|
||||||
@@ -41,7 +41,7 @@ import azurelinuxagent.common.utils.fileutil as fileutil
|
|
||||||
import azurelinuxagent.common.utils.shellutil as shellutil
|
|
||||||
import azurelinuxagent.common.utils.textutil as textutil
|
|
||||||
from azurelinuxagent.common.exception import OSUtilError
|
|
||||||
-from azurelinuxagent.common.future import ustr
|
|
||||||
+from azurelinuxagent.common.future import ustr, array_to_string_or_bytes
|
|
||||||
from azurelinuxagent.common.utils.cryptutil import CryptUtil
|
|
||||||
from azurelinuxagent.common.utils.flexible_version import FlexibleVersion
|
|
||||||
from azurelinuxagent.common.utils.networkutil import RouteEntry, NetworkInterfaceCard
|
|
||||||
@@ -758,12 +758,7 @@ class DefaultOSUtil(object):
|
|
||||||
logger.warn(('SIOCGIFCONF returned more than {0} up '
|
|
||||||
'network interfaces.'), expected)
|
|
||||||
|
|
||||||
- try:
|
|
||||||
- # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
|
|
||||||
- ifconf_buff = buff.tostring()
|
|
||||||
- except AttributeError:
|
|
||||||
- ifconf_buff = buff.tobytes()
|
|
||||||
-
|
|
||||||
+ ifconf_buff = array_to_string_or_bytes(buff)
|
|
||||||
ifaces = {}
|
|
||||||
for i in range(0, array_size, struct_size):
|
|
||||||
iface = ifconf_buff[i:i+IFNAMSIZ].split(b'\0', 1)[0]
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
From 90f1a4862cf63df4a96ad912effcfb54192ad4d7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paula Gombar <gombarica@gmail.com>
|
|
||||||
Date: Tue, 8 Dec 2020 18:53:57 -0800
|
|
||||||
Subject: [PATCH 3/3] fix pylint
|
|
||||||
|
|
||||||
---
|
|
||||||
azurelinuxagent/common/future.py | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/azurelinuxagent/common/future.py b/azurelinuxagent/common/future.py
|
|
||||||
index 0f76aceba786..a6796f19fec2 100644
|
|
||||||
--- a/azurelinuxagent/common/future.py
|
|
||||||
+++ b/azurelinuxagent/common/future.py
|
|
||||||
@@ -106,12 +106,12 @@ def get_openwrt_platform():
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
-def array_to_string_or_bytes(buffer):
|
|
||||||
+def array_to_string_or_bytes(buff):
|
|
||||||
# Python 3.9 removed the tostring() method on arrays, the new alias is tobytes()
|
|
||||||
if sys.version_info[0] == 2:
|
|
||||||
- return buffer.tostring()
|
|
||||||
+ return buff.tostring()
|
|
||||||
|
|
||||||
if sys.version_info[0] == 3 and sys.version_info[1] <= 8:
|
|
||||||
- return buffer.tostring()
|
|
||||||
+ return buff.tostring()
|
|
||||||
|
|
||||||
- return buffer.tobytes()
|
|
||||||
+ return buff.tobytes()
|
|
||||||
--
|
|
||||||
2.26.2
|
|
||||||
|
|
||||||
@ -1,64 +0,0 @@
|
|||||||
From 3420fef144cf9a5be62cfae16f64c298ca397a17 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paula Gombar <gombarica@gmail.com>
|
|
||||||
Date: Wed, 2 Dec 2020 21:36:41 -0800
|
|
||||||
Subject: [PATCH] Fix distro resolution for RedHat (#2083)
|
|
||||||
|
|
||||||
vkuznets: cherry-picking the primary change of the commit (adding 'rhel')
|
|
||||||
only, pylint changes require additional commits.
|
|
||||||
|
|
||||||
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
|
||||||
---
|
|
||||||
azurelinuxagent/common/osutil/factory.py | 4 +---
|
|
||||||
tests/common/osutil/test_factory.py | 14 ++++++++++++++
|
|
||||||
2 files changed, 15 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/azurelinuxagent/common/osutil/factory.py b/azurelinuxagent/common/osutil/factory.py
|
|
||||||
index 69f8430052d5..caecaa0887e2 100644
|
|
||||||
--- a/azurelinuxagent/common/osutil/factory.py
|
|
||||||
+++ b/azurelinuxagent/common/osutil/factory.py
|
|
||||||
@@ -97,9 +97,7 @@ def _get_osutil(distro_name, distro_code_name, distro_version, distro_full_name)
|
|
||||||
else:
|
|
||||||
return DebianOSBaseUtil()
|
|
||||||
|
|
||||||
- if distro_name == "redhat" \
|
|
||||||
- or distro_name == "centos" \
|
|
||||||
- or distro_name == "oracle":
|
|
||||||
+ if distro_name in ("redhat", "rhel", "centos", "oracle"):
|
|
||||||
if Version(distro_version) < Version("7"):
|
|
||||||
return Redhat6xOSUtil()
|
|
||||||
else:
|
|
||||||
diff --git a/tests/common/osutil/test_factory.py b/tests/common/osutil/test_factory.py
|
|
||||||
index aa7daebcf25f..2ac0849f75c9 100644
|
|
||||||
--- a/tests/common/osutil/test_factory.py
|
|
||||||
+++ b/tests/common/osutil/test_factory.py
|
|
||||||
@@ -188,6 +188,13 @@ class TestOsUtilFactory(AgentTestCase):
|
|
||||||
self.assertTrue(type(ret) == Redhat6xOSUtil)
|
|
||||||
self.assertEquals(ret.get_service_name(), "waagent")
|
|
||||||
|
|
||||||
+ ret = _get_osutil(distro_name="rhel",
|
|
||||||
+ distro_code_name="",
|
|
||||||
+ distro_full_name="",
|
|
||||||
+ distro_version="6")
|
|
||||||
+ self.assertTrue(type(ret) == Redhat6xOSUtil)
|
|
||||||
+ self.assertEquals(ret.get_service_name(), "waagent")
|
|
||||||
+
|
|
||||||
ret = _get_osutil(distro_name="centos",
|
|
||||||
distro_code_name="",
|
|
||||||
distro_full_name="",
|
|
||||||
@@ -209,6 +216,13 @@ class TestOsUtilFactory(AgentTestCase):
|
|
||||||
self.assertTrue(type(ret) == RedhatOSUtil)
|
|
||||||
self.assertEquals(ret.get_service_name(), "waagent")
|
|
||||||
|
|
||||||
+ ret = _get_osutil(distro_name="rhel",
|
|
||||||
+ distro_code_name="",
|
|
||||||
+ distro_full_name="",
|
|
||||||
+ distro_version="7")
|
|
||||||
+ self.assertTrue(type(ret) == RedhatOSUtil)
|
|
||||||
+ self.assertEquals(ret.get_service_name(), "waagent")
|
|
||||||
+
|
|
||||||
ret = _get_osutil(distro_name="centos",
|
|
||||||
distro_code_name="",
|
|
||||||
distro_full_name="",
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
||||||
@ -2,31 +2,22 @@
|
|||||||
%global dracut_modname 97walinuxagent
|
%global dracut_modname 97walinuxagent
|
||||||
|
|
||||||
Name: WALinuxAgent
|
Name: WALinuxAgent
|
||||||
Version: 2.2.52
|
Version: 2.10.0.8
|
||||||
Release: 1
|
Release: 1
|
||||||
Summary: The Microsoft Azure Linux Agent
|
Summary: The Microsoft Azure Linux Agent
|
||||||
|
|
||||||
License: ASL 2.0
|
License: Apache-2.0
|
||||||
URL: https://github.com/Azure/%{name}
|
URL: https://github.com/Azure/%{name}
|
||||||
Source0: https://github.com/Azure/%{name}/archive/v%{version}.tar.gz
|
Source0: https://github.com/Azure/%{name}/archive/v%{version}.tar.gz
|
||||||
Source1: module-setup.sh
|
Source1: module-setup.sh
|
||||||
|
|
||||||
# Python3.9 fixes
|
|
||||||
Patch0: 0001-update-array.tostring-and-json.loads-without-encodin.patch
|
|
||||||
Patch1: 0002-handle-py3.9-check-in-future.py.patch
|
|
||||||
Patch2: 0003-fix-pylint.patch
|
|
||||||
Patch3: 0004-Fix-distro-resolution-for-RedHat-2083.patch
|
|
||||||
|
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
BuildRequires: python3-setuptools
|
BuildRequires: python3-setuptools
|
||||||
BuildRequires: python3-distro
|
BuildRequires: python3-distro
|
||||||
Requires: %name-udev = %version-%release
|
Requires: %name-udev = %version-%release
|
||||||
Requires: openssh
|
Requires: openssh openssh-server openssl parted python3-pyasn1 iptables
|
||||||
Requires: openssh-server
|
|
||||||
Requires: openssl
|
|
||||||
Requires: parted
|
|
||||||
Requires: python3-pyasn1
|
|
||||||
BuildRequires: systemd
|
BuildRequires: systemd
|
||||||
Requires(post): systemd
|
Requires(post): systemd
|
||||||
Requires(preun): systemd
|
Requires(preun): systemd
|
||||||
@ -56,10 +47,6 @@ Udev rules specific to Microsoft Azure Virtual Machines.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p1
|
|
||||||
%patch1 -p1
|
|
||||||
%patch2 -p1
|
|
||||||
%patch3 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%py3_build
|
%py3_build
|
||||||
@ -84,10 +71,9 @@ sed -i 's,#!/usr/bin/env python,#!/usr/bin/python2,' %{buildroot}%{_sbindir}/waa
|
|||||||
%else
|
%else
|
||||||
rm -f %{buildroot}%{_sbindir}/waagent2.0
|
rm -f %{buildroot}%{_sbindir}/waagent2.0
|
||||||
%endif
|
%endif
|
||||||
sed -i 's,/usr/bin/python ,/usr/bin/python3 ,' %{buildroot}%{_unitdir}/waagent.service
|
sed -i 's,/usr/bin/python ,/usr/bin/python3 ,' %{buildroot}/lib/systemd/system/waagent.service
|
||||||
|
|
||||||
mv %{buildroot}%{_sysconfdir}/logrotate.d/waagent.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
|
mv %{buildroot}%{_sysconfdir}/logrotate.d/waagent.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
|
||||||
mv %{buildroot}%{_sysconfdir}/logrotate.d/waagent-extn.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/%{name}-extn
|
|
||||||
|
|
||||||
install -m0755 -D -t %{buildroot}%{_prefix}/lib/dracut/modules.d/%{dracut_modname}/ %{SOURCE1}
|
install -m0755 -D -t %{buildroot}%{_prefix}/lib/dracut/modules.d/%{dracut_modname}/ %{SOURCE1}
|
||||||
|
|
||||||
@ -101,14 +87,15 @@ install -m0755 -D -t %{buildroot}%{_prefix}/lib/dracut/modules.d/%{dracut_modnam
|
|||||||
%systemd_postun_with_restart waagent.service
|
%systemd_postun_with_restart waagent.service
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%doc Changelog LICENSE.txt NOTICE README.md
|
%doc LICENSE.txt NOTICE README.md
|
||||||
%ghost %{_localstatedir}/log/waagent.log
|
%ghost %{_localstatedir}/log/waagent.log
|
||||||
%dir %attr(0700, root, root) %{_sharedstatedir}/waagent
|
%dir %attr(0700, root, root) %{_sharedstatedir}/waagent
|
||||||
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
|
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
|
||||||
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}-extn
|
|
||||||
%{_sbindir}/waagent
|
%{_sbindir}/waagent
|
||||||
%config(noreplace) %{_sysconfdir}/waagent.conf
|
%config(noreplace) %{_sysconfdir}/waagent.conf
|
||||||
%{_unitdir}/waagent.service
|
/lib/systemd/system//waagent.service
|
||||||
|
/lib/systemd/system//azure.slice
|
||||||
|
/lib/systemd/system//azure-vmextensions.slice
|
||||||
%{python3_sitelib}/azurelinuxagent
|
%{python3_sitelib}/azurelinuxagent
|
||||||
%{python3_sitelib}/*.egg-info
|
%{python3_sitelib}/*.egg-info
|
||||||
|
|
||||||
@ -122,5 +109,20 @@ install -m0755 -D -t %{buildroot}%{_prefix}/lib/dracut/modules.d/%{dracut_modnam
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Apr 12 2024 duyiwei <duyiwei@kylinos.cn> - 2.10.0.8-1
|
||||||
|
- upgrade version to 2.10.0.9
|
||||||
|
|
||||||
|
* Wed Jan 03 2024 lijian <lijian2@kylinos.cn> - 2.9.1.1-1
|
||||||
|
- upgrade version to 2.9.1.1
|
||||||
|
|
||||||
|
* Mon Jun 12 2023 duyiwei <duyiwei@kylinos.cn> - 2.9.0.4-1
|
||||||
|
- upgrade version to 2.9.0.4
|
||||||
|
|
||||||
|
* Tue Nov 08 2022 duyiwei <duyiwei@kylinos.cn> - 2.8.0.11-1
|
||||||
|
- upgrade to 2.8.0.11
|
||||||
|
|
||||||
|
* Fri Jun 10 2022 fushanqing <fushanqing@kylinos.cn> - 2.5.0.2-1
|
||||||
|
- update to 2.5.0.2
|
||||||
|
|
||||||
* Thu Feb 17 2022 fushanqing <fushanqing@kylinos.cn> - 2.2.52-1
|
* Thu Feb 17 2022 fushanqing <fushanqing@kylinos.cn> - 2.2.52-1
|
||||||
- Initial package
|
- Initial package
|
||||||
|
|||||||
4
WALinuxAgent.yaml
Normal file
4
WALinuxAgent.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
version_control: github
|
||||||
|
src_repo: Azure/WALinuxAgent
|
||||||
|
tag_prefix: ^v
|
||||||
|
separator: .
|
||||||
BIN
v2.10.0.8.tar.gz
Normal file
BIN
v2.10.0.8.tar.gz
Normal file
Binary file not shown.
BIN
v2.2.52.tar.gz
BIN
v2.2.52.tar.gz
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user