[Cluster-devel] conga/ricci docs/rpm_api.html modules/rpm/Pack ...
kupcevic at sourceware.org
kupcevic at sourceware.org
Thu Oct 12 19:13:12 UTC 2006
CVSROOT: /cvs/cluster
Module name: conga
Changes by: kupcevic at sourceware.org 2006-10-12 19:13:11
Modified files:
ricci/docs : rpm_api.html
ricci/modules/rpm: PackageHandler.cpp PackageHandler.h
RpmModule.cpp
Log message:
rpm module: enable upgrade of packages, but only if requested
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/docs/rpm_api.html.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/RpmModule.cpp.diff?cvsroot=cluster&r1=1.2&r2=1.3
--- conga/ricci/docs/rpm_api.html 2006/04/12 15:47:09 1.1
+++ conga/ricci/docs/rpm_api.html 2006/10/12 19:13:11 1.2
@@ -93,10 +93,11 @@
</P>
<UL>
<P ALIGN=LEFT>Install/upgrade rpms and sets from repository.</P>
- <P>Input variables: <BR>- ârpmsâ (list_xml) â list of rpms to
+ <P>Input variables: <BR>- ârpmsâ (list_xml) â optional, list of rpms to
install/upgrade. Rpm format <rpm name=ârpm nameâ/>. <BR>-
- âsetsâ (list_xml) â list of sets to install/upgrade. Set
- format <set name=âset nameâ/>.
+ âsetsâ (list_xml) â optional, list of sets to install/upgrade. Set
+ format <set name=âset nameâ/>. <BR>-
+ âupgradeâ (boolean) â optional (defaults to true), upgrade already installed packages/sets.
</P>
<P>No output variables.
</P>
@@ -121,4 +122,4 @@
<P><BR><BR>
</P>
</BODY>
-</HTML>
\ No newline at end of file
+</HTML>
--- conga/ricci/modules/rpm/PackageHandler.cpp 2006/10/11 22:33:43 1.8
+++ conga/ricci/modules/rpm/PackageHandler.cpp 2006/10/12 19:13:11 1.9
@@ -155,10 +155,11 @@
if (rpms.empty())
return true;
- //if (!available())
- // return rpms.empty();
-
if (RHEL4) {
+ // TODO: fix up2date handling
+
+ throw String("RHEL4 not supported, yet");
+
String out, err;
int status;
vector<String> args;
@@ -171,8 +172,7 @@
return true;
} else if (FC5 || FC6 || RHEL5) {
- // install
- vector<String> rpms_to_install;
+ vector<String> rpms_to_install, rpms_to_upgrade;
String out, err;
int status;
vector<String> args;
@@ -198,6 +198,8 @@
}
if (install)
rpms_to_install.push_back(*rpm);
+ else
+ rpms_to_upgrade.push_back(*rpm);
}
if (!rpms_to_install.empty()) {
out = err = "";
@@ -213,21 +215,21 @@
if (status)
return false;
}
+ if (!rpms_to_upgrade.empty()) {
+ out = err = "";
+ args.clear();
+ args.push_back("-y");
+ args.push_back("update");
+ for (vector<String>::const_iterator rpm = rpms_to_upgrade.begin();
+ rpm != rpms_to_upgrade.end();
+ rpm++)
+ args.push_back(*rpm);
+ if (utils::execute(YUM_PATH, args, out, err, status, false))
+ throw command_not_found_error_msg(YUM_PATH);
+ if (status)
+ return false;
+ }
return true;
- /*
- // update
- out = err = "";
- args.clear();
- args.push_back("-y");
- args.push_back("update");
- for (vector<String>::const_iterator rpm = rpms.begin();
- rpm != rpms.end();
- rpm++)
- args.push_back(*rpm);
- if (utils::execute(YUM_PATH, args, out, err, status, false))
- throw command_not_found_error_msg(YUM_PATH);
- return !status;
- */
} else
return false;
}
@@ -551,11 +553,9 @@
void
PackageHandler::install(const std::list<Package>& packages,
- const std::list<PackageSet>& sets)
+ const std::list<PackageSet>& sets,
+ bool upgrade)
{
- if (!repo_available())
- throw String("System not configured to use repositories");
-
vector<String> rpms;
PackageHandler h_pre;
@@ -565,12 +565,25 @@
String name(iter->name);
map<String, Package>::iterator pack_iter = h_pre.packages().find(name);
if (pack_iter == h_pre.packages().end())
- throw String("package ") + name + " not present in repository";
+ throw String("package ") + name + " present neither locally nor in repository";
else {
- if (pack_iter->second.repo_version.empty())
- throw String("package ") + name + " not present in repository";
- else
- rpms.push_back(name);
+ String curr_ver(pack_iter->second.version);
+ String repo_ver(pack_iter->second.repo_version);
+ if (curr_ver.empty()) {
+ // not installed
+ if (repo_ver.empty())
+ throw String("package ") + name + " not present in repository";
+ else
+ rpms.push_back(name);
+ } else {
+ // already installed
+ if (upgrade) {
+ if (repo_ver.empty())
+ throw String("package ") + name + " not present in repository";
+ else if (repo_ver > curr_ver)
+ rpms.push_back(name);
+ }
+ }
}
}
@@ -580,21 +593,40 @@
String name(iter->name);
map<String, PackageSet>::iterator set_iter = h_pre.sets().find(name);
if (set_iter == h_pre.sets().end())
- throw String("set ") + name + " not present in repository";
+ throw String("set ") + name + " present neither locally nor in repository";
else {
PackageSet& p_set = set_iter->second;
- if (p_set.in_repo)
- for (list<String>::const_iterator name_iter = p_set.packages.begin();
- name_iter != p_set.packages.end();
- name_iter++)
- rpms.push_back(*name_iter);
- else
- throw String("packages of set ") + name + " not present in repository";
+ if (p_set.installed) {
+ // already installed
+ if (upgrade) {
+ if (p_set.in_repo) {
+ if (p_set.upgradeable)
+ for (list<String>::const_iterator name_iter = p_set.packages.begin();
+ name_iter != p_set.packages.end();
+ name_iter++)
+ rpms.push_back(*name_iter);
+ } else
+ throw String("packages of set ") + name + " not present in repository";
+ }
+ } else {
+ // not installed
+ if (p_set.in_repo)
+ for (list<String>::const_iterator name_iter = p_set.packages.begin();
+ name_iter != p_set.packages.end();
+ name_iter++)
+ rpms.push_back(*name_iter);
+ else
+ throw String("packages of set ") + name + " not present in repository";
+ }
}
}
- if (!_pi.install(rpms))
- throw String("unable to install packages");
+ if (!_pi.install(rpms)) {
+ String msg("Failed to install packages");
+ if (!repo_available())
+ msg += ": System not configured to use repositories";
+ throw msg;
+ }
}
--- conga/ricci/modules/rpm/PackageHandler.h 2006/08/15 00:06:48 1.4
+++ conga/ricci/modules/rpm/PackageHandler.h 2006/10/12 19:13:11 1.5
@@ -108,7 +108,8 @@
static PackageSet build_linux_virtual_server_set();
static void install(const std::list<Package>& packages,
- const std::list<PackageSet>& sets);
+ const std::list<PackageSet>& sets,
+ bool upgrade=true);
private:
--- conga/ricci/modules/rpm/RpmModule.cpp 2006/08/10 22:53:08 1.2
+++ conga/ricci/modules/rpm/RpmModule.cpp 2006/10/12 19:13:11 1.3
@@ -64,6 +64,7 @@
install(const VarMap& args)
{
list<XMLObject> rpms_list, sets_list;
+ bool upgrade;
try{
VarMap::const_iterator iter = args.find("rpms");
if (iter != args.end())
@@ -72,8 +73,13 @@
iter = args.find("sets");
if (iter != args.end())
sets_list = iter->second.get_list_XML();
+
+ upgrade = true;
+ iter = args.find("upgrade");
+ if (iter != args.end())
+ upgrade = iter->second.get_bool();
} catch ( String e ) {
- throw APIerror(e);
+ throw APIerror(e);
}
// command
@@ -101,7 +107,7 @@
}
}
- PackageHandler::install(rpms, sets);
+ PackageHandler::install(rpms, sets, upgrade);
return VarMap();
}
More information about the Cluster-devel
mailing list