in VMExtension/hpcnodemanager.py [0:0]
def install_package(package_name):
if DistroName in ["centos", "redhat", "almalinux", "rocky"]:
cmd = "yum -y install " + package_name
elif DistroName == "ubuntu":
waagent.Log("Updating apt package lists with command: apt-get -y update")
exitcode = waagent.Run("apt-get -y update", chk_err=False)
if exitcode != 0:
waagent.Log("Update apt package lists failed with exitcode: {0}".format(exitcode))
cmd = "apt-get -y install " + package_name
elif DistroName == "suse":
if not os.listdir('/etc/zypp/repos.d'):
waagent.Run("zypper ar http://download.opensuse.org/distribution/13.2/repo/oss/suse/ opensuse")
cmd = "zypper -n --gpg-auto-import-keys install --force-resolution -l " + package_name
else:
cmd = "zypper -n install --force-resolution -l " + package_name
else:
raise Exception("Unsupported Linux Distro.")
waagent.Log("The command to install {0}: {1}".format(package_name, cmd))
attempt = 1
while(True):
waagent.Log("Installing package {0} (Attempt {1})".format(package_name, attempt))
retcode, retoutput = waagent.RunGetOutput(cmd)
if retcode == 0:
waagent.Log("package {0} installation succeeded".format(package_name))
break
else:
waagent.Log("package {0} installation failed {1}:\n {2}".format(package_name, retcode, retoutput))
if attempt < 10:
time.sleep(min(30, pow(2, attempt)))
attempt += 1
if DistroName == 'suse' and retcode == 104:
waagent.Run("zypper ar http://download.opensuse.org/distribution/13.2/repo/oss/suse/ opensuse")
cmd = "zypper -n --gpg-auto-import-keys install --force-resolution -l " + package_name
elif DistroName == "ubuntu":
waagent.Run("apt-get -y update", chk_err=False)
continue
else:
raise Exception("failed to install package {0}:{1}".format(package_name, retcode))