WALinuxAgent/0001-Rudimentary-Fedora-OS-implementation.patch

137 lines
4.8 KiB
Diff
Raw Normal View History

From e236dc20fbda54d040960615a93565be9c4bdae7 Mon Sep 17 00:00:00 2001
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: Fri, 22 Apr 2022 16:16:19 +0200
Subject: [PATCH] Rudimentary Fedora OS implementation
Content-Type: text/plain
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
azurelinuxagent/common/osutil/factory.py | 4 ++
azurelinuxagent/common/osutil/fedora.py | 75 ++++++++++++++++++++++++
setup.py | 6 ++
3 files changed, 85 insertions(+)
create mode 100644 azurelinuxagent/common/osutil/fedora.py
diff --git a/azurelinuxagent/common/osutil/factory.py b/azurelinuxagent/common/osutil/factory.py
index b8f4291b3ea4..625978569880 100644
--- a/azurelinuxagent/common/osutil/factory.py
+++ b/azurelinuxagent/common/osutil/factory.py
@@ -39,6 +39,7 @@ from .suse import SUSEOSUtil, SUSE11OSUtil
from .photonos import PhotonOSUtil
from .ubuntu import UbuntuOSUtil, Ubuntu12OSUtil, Ubuntu14OSUtil, \
UbuntuSnappyOSUtil, Ubuntu16OSUtil, Ubuntu18OSUtil
+from .fedora import FedoraOSUtil
def get_osutil(distro_name=DISTRO_NAME,
@@ -138,5 +139,8 @@ def _get_osutil(distro_name, distro_code_name, distro_version, distro_full_name)
if distro_name == "openwrt":
return OpenWRTOSUtil()
+ if distro_name == "fedora":
+ return FedoraOSUtil()
+
logger.warn("Unable to load distro implementation for {0}. Using default distro implementation instead.", distro_name)
return DefaultOSUtil()
diff --git a/azurelinuxagent/common/osutil/fedora.py b/azurelinuxagent/common/osutil/fedora.py
new file mode 100644
index 000000000000..480f139a87ed
--- /dev/null
+++ b/azurelinuxagent/common/osutil/fedora.py
@@ -0,0 +1,75 @@
+#
+# Copyright 2022 Red Hat Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Requires Python 2.6+ and Openssl 1.0+
+#
+
+import azurelinuxagent.common.utils.shellutil as shellutil
+from azurelinuxagent.common.osutil.default import DefaultOSUtil
+
+
+class FedoraOSUtil(DefaultOSUtil):
+
+ def __init__(self):
+ super(FedoraOSUtil, self).__init__()
+ self.agent_conf_file_path = '/etc/waagent.conf'
+
+ @staticmethod
+ def get_systemd_unit_file_install_path():
+ return '/usr/lib/systemd/system'
+
+ @staticmethod
+ def get_agent_bin_path():
+ return '/usr/sbin'
+
+ def is_dhcp_enabled(self):
+ return True
+
+ def start_network(self):
+ pass
+
+ def restart_if(self, ifname=None, retries=None, wait=None):
+ retry_limit = retries+1
+ for attempt in range(1, retry_limit):
+ return_code = shellutil.run("ip link set {0} down && ip link set {0} up".format(ifname))
+ if return_code == 0:
+ return
+ logger.warn("failed to restart {0}: return code {1}".format(ifname, return_code))
+ if attempt < retry_limit:
+ logger.info("retrying in {0} seconds".format(wait))
+ time.sleep(wait)
+ else:
+ logger.warn("exceeded restart retries")
+
+ def restart_ssh_service(self):
+ shellutil.run('systemctl restart sshd')
+
+ def stop_dhcp_service(self):
+ pass
+
+ def start_dhcp_service(self):
+ pass
+
+ def start_agent_service(self):
+ return shellutil.run('systemctl start waagent', chk_err=False)
+
+ def stop_agent_service(self):
+ return shellutil.run('systemctl stop waagent', chk_err=False)
+
+ def get_dhcp_pid(self):
+ return self._get_dhcp_pid(["pidof", "dhclient"])
+
+ def conf_sshd(self, disable_password):
+ pass
diff --git a/setup.py b/setup.py
index 12c9e1d61979..b0acead305b5 100755
--- a/setup.py
+++ b/setup.py
@@ -238,6 +238,12 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912
set_conf_files(data_files, src=["config/photonos/waagent.conf"])
set_systemd_files(data_files, dest=systemd_dir_path,
src=["init/photonos/waagent.service"])
+ elif name == 'fedora':
+ set_bin_files(data_files, dest=agent_bin_path)
+ set_conf_files(data_files)
+ set_logrotate_files(data_files)
+ set_udev_files(data_files)
+ set_systemd_files(data_files, dest=systemd_dir_path)
else:
# Use default setting
set_bin_files(data_files, dest=agent_bin_path)
--
2.35.1