From e236dc20fbda54d040960615a93565be9c4bdae7 Mon Sep 17 00:00:00 2001 From: Vitaly Kuznetsov Date: Fri, 22 Apr 2022 16:16:19 +0200 Subject: [PATCH] Rudimentary Fedora OS implementation Content-Type: text/plain Signed-off-by: Vitaly Kuznetsov --- 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