Add support for installing yum packages

This commit is contained in:
Pádraig Brady 2012-06-27 17:49:06 +01:00
parent 83d60c4dec
commit 7dfb05653c
2 changed files with 85 additions and 1 deletions

View File

@ -0,0 +1,79 @@
From b36b33335c4872bc1bef5bcece33c3ea43de4ea5 Mon Sep 17 00:00:00 2001
From: Tomas Karasek <tomas.karasek@cern.ch>
Date: Wed, 27 Jun 2012 16:48:15 +0100
Subject: [PATCH] support package installation using 'yum'
---
cloudinit/CloudConfig/__init__.py | 42 +++++++++++++++++++++++++++++++++---
1 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/cloudinit/CloudConfig/__init__.py b/cloudinit/CloudConfig/__init__.py
index a16bdde..6a7005a 100644
--- a/cloudinit/CloudConfig/__init__.py
+++ b/cloudinit/CloudConfig/__init__.py
@@ -27,6 +27,7 @@ import traceback
import os
import subprocess
import time
+import platform
per_instance = cloudinit.per_instance
per_always = cloudinit.per_always
@@ -253,6 +254,27 @@ def run_per_instance(name, func, args, clear_on_fail=False):
raise
+def get_package_manager():
+ if 'linux_distribution' in platform.__dict__:
+ distname, _, _ = platform.linux_distribution(
+ full_distribution_name=0)
+ else:
+ distname, _, _ = platform.dist()
+ yum_dists = ['redhat', 'fedora', 'centos']
+ apt_dists = ['debian', 'ubuntu']
+ if distname.lower() in yum_dists:
+ return 'yum'
+ elif distname.lower() in apt_dists:
+ return 'apt'
+ elif os.system('yum --help >/dev/null 2>&1'):
+ return 'yum'
+ elif os.system('apt-get --help >/dev/null 2>&1'):
+ return 'apt'
+
+
+_PACKAGE_MANAGER = get_package_manager()
+
+
# apt_get top level command (install, update...), and args to pass it
def apt_get(tlc, args=None):
if args is None:
@@ -265,10 +287,22 @@ def apt_get(tlc, args=None):
subprocess.check_call(cmd, env=e)
-def update_package_sources():
- run_per_instance("update-sources", apt_get, ("update",))
+def yum(tlc, args=None):
+ if args is None:
+ args = []
+ cmd = ['yum', '-y', tlc]
+ cmd.extend(args)
+ subprocess.check_call(cmd)
def install_packages(pkglist):
- update_package_sources()
- apt_get("install", pkglist)
+ if _PACKAGE_MANAGER == "yum":
+ run_per_instance("update-sources", yum, ("makecache",))
+ yum("install", pkglist)
+ elif _PACKAGE_MANAGER == "apt":
+ run_per_instance("update-sources", apt_get, ("update",))
+ apt_get("install", pkglist)
+ else:
+ raise Exception("Unknown distribution, unable to install packages %s" %
+ pkglist)
+
--
1.7.6.4

View File

@ -2,7 +2,7 @@
Name: cloud-init
Version: 0.6.3
Release: 0.2.bzr532%{?dist}
Release: 0.3.bzr532%{?dist}
Summary: Cloud instance init scripts
Group: System Environment/Base
@ -18,6 +18,7 @@ Patch0: cloud-init-0.6.3-fedora.patch
Patch1: cloud-init-0.6.3-no-runparts.patch
# https://bugs.launchpad.net/cloud-init/+bug/970071
Patch2: cloud-init-0.6.3-lp970071.patch
Patch3: cloud-init-0.6.3-yum.patch
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -53,6 +54,7 @@ ssh keys and to let the user run various scripts.
%patch0 -p0
%patch1 -p0
%patch2 -p1
%patch3 -p1
cp -p %{SOURCE2} README.fedora
@ -134,6 +136,9 @@ fi
%changelog
* Wed Jun 27 2012 Pádraig Brady <P@draigBrady.com> - 0.6.3-0.3.bzr532
- Add support for installing yum packages
* Sat Mar 31 2012 Andy Grimm <agrimm@gmail.com> - 0.6.3-0.2.bzr532
- Fixed incorrect interpretation of relative path for
AuthorizedKeysFile (BZ #735521)