diff --git a/bin/py3/waagent b/bin/py3/waagent new file mode 100755 index 000000000..516993de7 --- /dev/null +++ b/bin/py3/waagent @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +# +# Azure Linux Agent +# +# Copyright 2015 Microsoft Corporation +# +# 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+ +# +# Implements parts of RFC 2131, 1541, 1497 and +# http://msdn.microsoft.com/en-us/library/cc227282%28PROT.10%29.aspx +# http://msdn.microsoft.com/en-us/library/cc227259%28PROT.13%29.aspx +# + +import os +import sys + +if sys.version_info[0] == 2: + import imp +else: + import importlib + +if __name__ == '__main__' : + import azurelinuxagent.agent as agent + """ + Invoke main method of agent + """ + agent.main() + +if __name__ == 'waagent': + """ + Load waagent2.0 to support old version of extensions + """ + if sys.version_info[0] == 3: + raise ImportError("waagent2.0 doesn't support python3") + bin_path = os.path.dirname(os.path.abspath(__file__)) + agent20_path = os.path.join(bin_path, "waagent2.0") + if not os.path.isfile(agent20_path): + raise ImportError("Can't load waagent") + agent20 = imp.load_source('waagent', agent20_path) + __all__ = dir(agent20) + diff --git a/init/sles/waagent.service b/init/sles/waagent.service new file mode 100644 index 000000000..39d01d1c4 --- /dev/null +++ b/init/sles/waagent.service @@ -0,0 +1,16 @@ +[Unit] +Description=Azure Linux Agent +Wants=network-online.target sshd.service sshd-keygen.service +After=network-online.target + +ConditionFileIsExecutable=/usr/sbin/waagent +ConditionPathExists=/etc/waagent.conf + +[Service] +Type=simple +ExecStart=/usr/bin/python3 -u /usr/sbin/waagent -daemon +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target diff --git a/setup.py b/setup.py index c258e4b87..23680ed86 100755 --- a/setup.py +++ b/setup.py @@ -43,7 +43,6 @@ def set_bin_files(data_files, dest, src=None): src = ["bin/waagent", "bin/waagent2.0"] data_files.append((dest, src)) - def set_conf_files(data_files, dest="/etc", src=None): if src is None: src = ["config/waagent.conf"] @@ -96,8 +95,8 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912 systemd_dir_path = osutil.get_systemd_unit_file_install_path() agent_bin_path = osutil.get_agent_bin_path() - set_bin_files(data_files, dest=agent_bin_path) if name == 'redhat' or name == 'centos': # pylint: disable=R1714 + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files) set_logrotate_files(data_files) set_udev_files(data_files) @@ -110,11 +109,13 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912 # TODO this is a mitigation to systemctl bug on 7.1 set_sysv_files(data_files) elif name == 'arch': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/arch/waagent.conf"]) set_udev_files(data_files) set_systemd_files(data_files, dest=systemd_dir_path, src=["init/arch/waagent.service"]) elif name == 'coreos': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, dest="/usr/share/oem", src=["config/coreos/waagent.conf"]) set_logrotate_files(data_files) @@ -122,16 +123,19 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912 set_files(data_files, dest="/usr/share/oem", src=["init/coreos/cloud-config.yml"]) elif "Clear Linux" in fullname: + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, dest="/usr/share/defaults/waagent", src=["config/clearlinux/waagent.conf"]) set_systemd_files(data_files, dest=systemd_dir_path, src=["init/clearlinux/waagent.service"]) elif name == 'mariner': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, dest="/etc", src=["config/mariner/waagent.conf"]) set_systemd_files(data_files, dest=systemd_dir_path, src=["init/mariner/waagent.service"]) elif name == 'ubuntu': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/ubuntu/waagent.conf"]) set_logrotate_files(data_files) set_udev_files(data_files) @@ -153,6 +157,7 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912 "init/ubuntu/azure-vmextensions.slice" ]) elif name == 'suse' or name == 'opensuse': # pylint: disable=R1714 + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/suse/waagent.conf"]) set_logrotate_files(data_files) set_udev_files(data_files) @@ -165,19 +170,32 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912 else: # sles 12+ and openSUSE 13.2+ use systemd set_systemd_files(data_files, dest=systemd_dir_path) + elif name == 'sles': # sles 15+ distro named as sles + set_bin_files(data_files, dest=agent_bin_path, + src = ["bin/py3/waagent", "bin/waagent2.0"]) + set_conf_files(data_files, src=["config/suse/waagent.conf"]) + set_logrotate_files(data_files) + set_udev_files(data_files) + # sles 15+ uses systemd and python3 + set_systemd_files(data_files, dest=systemd_dir_path, + src=["init/sles/waagent.service"]) elif name == 'freebsd': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/freebsd/waagent.conf"]) set_freebsd_rc_files(data_files) elif name == 'openbsd': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/openbsd/waagent.conf"]) set_openbsd_rc_files(data_files) elif name == 'debian': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/debian/waagent.conf"]) set_logrotate_files(data_files) set_udev_files(data_files, dest="/lib/udev/rules.d") if debian_has_systemd(): set_systemd_files(data_files, dest=systemd_dir_path) elif name == 'iosxe': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files, src=["config/iosxe/waagent.conf"]) set_logrotate_files(data_files) set_udev_files(data_files) @@ -186,11 +204,13 @@ def get_data_files(name, version, fullname): # pylint: disable=R0912 # TODO this is a mitigation to systemctl bug on 7.1 set_sysv_files(data_files) elif name == 'openwrt': + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files) set_logrotate_files(data_files) set_sysv_files(data_files, dest='/etc/init.d', src=["init/openwrt/waagent"]) else: # Use default setting + set_bin_files(data_files, dest=agent_bin_path) set_conf_files(data_files) set_logrotate_files(data_files) set_udev_files(data_files)