137 lines
4.8 KiB
Diff
137 lines
4.8 KiB
Diff
|
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
|
||
|
|