diff options
author | Michael DeHaan <mdehaan@redhat.com> | 2008-08-29 15:31:05 -0400 |
---|---|---|
committer | Michael DeHaan <mdehaan@redhat.com> | 2008-08-29 15:31:05 -0400 |
commit | 3d11fd9fd50714617b7bac7c4c068aa4e369701b (patch) | |
tree | bfe3531d0f546ac3338d18654d8b1f5f4bc89f1d /cobbler/api.py | |
parent | 140c367cb9a913c76fbe02e66da0f14badc50f99 (diff) | |
parent | 1139d5eee52c75dbf10fa11d3644d5c4a37de7b6 (diff) | |
download | cobbler-3d11fd9fd50714617b7bac7c4c068aa4e369701b.tar.gz cobbler-3d11fd9fd50714617b7bac7c4c068aa4e369701b.tar.xz cobbler-3d11fd9fd50714617b7bac7c4c068aa4e369701b.zip |
Merge branch 'devel'
Conflicts:
AUTHORS
CHANGELOG
cobbler.spec
cobbler/api.py
cobbler/remote.py
cobbler/services.py
cobbler/utils.py
setup.py
Diffstat (limited to 'cobbler/api.py')
-rw-r--r-- | cobbler/api.py | 128 |
1 files changed, 109 insertions, 19 deletions
diff --git a/cobbler/api.py b/cobbler/api.py index 70cc73b0..dfcf07ab 100644 --- a/cobbler/api.py +++ b/cobbler/api.py @@ -3,15 +3,23 @@ python API module for Cobbler see source for cobbler.py, or pydoc, for example usage. CLI apps and daemons should import api.py, and no other cobbler code. -Copyright 2006, Red Hat, Inc +Copyright 2006-2008, Red Hat, Inc Michael DeHaan <mdehaan@redhat.com> -This software may be freely redistributed under the terms of the GNU -general public license. +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA """ import config @@ -24,10 +32,12 @@ import action_status import action_validate import action_buildiso import action_replicate +import action_acl from cexceptions import * import sub_process import module_loader import kickgen +import yumgen import logging import os @@ -56,6 +66,7 @@ class BootAPI: """ self.__dict__ = BootAPI.__shared_state + self.perms_ok = False if not BootAPI.__has_loaded: # NOTE: we do not log all API actions, because @@ -64,7 +75,13 @@ class BootAPI: # the logs, so we'll do that logging at CLI # level (and remote.py web service level) instead. - self.logger = self.__setup_logger("api") + try: + self.logger = self.__setup_logger("api") + except CX: + # return to CLI/other but perms are not valid + # perms_ok is False + return + self.logger_remote = self.__setup_logger("remote") BootAPI.__has_loaded = True @@ -83,8 +100,10 @@ class BootAPI: "authz_allowall" ) self.kickgen = kickgen.KickGen(self._config) + self.yumgen = yumgen.YumGen(self._config) self.logger.debug("API handle initialized") - + self.perms_ok = True + def __setup_logger(self,name): return utils.setup_logger(name) @@ -145,6 +164,12 @@ class BootAPI: """ return self._config.repos() + def images(self): + """ + Return the current list of images + """ + return self._config.images() + def settings(self): """ Return the application configuration @@ -166,6 +191,10 @@ class BootAPI: def copy_repo(self, ref, newname): self.log("copy_repo",[ref.name, newname]) return self._config.repos().copy(ref,newname) + + def copy_image(self, ref, newname): + self.log("copy_image",[ref.name, newname]) + return self._config.images().copy(ref,newname) def remove_distro(self, ref, recursive=False): self.log("remove_distro",[ref.name]) @@ -175,13 +204,21 @@ class BootAPI: self.log("remove_profile",[ref.name]) return self._config.profiles().remove(ref.name, recursive=recursive) +<<<<<<< HEAD:cobbler/api.py def remove_system(self,ref,recursive=False): +======= + def remove_system(self,ref, recursive=False): +>>>>>>> devel:cobbler/api.py self.log("remove_system",[ref.name]) return self._config.systems().remove(ref.name) def remove_repo(self, ref,recursive=False): self.log("remove_repo",[ref.name]) return self._config.repos().remove(ref.name) + + def remove_image(self, ref): + self.log("remove_image",[ref.name]) + return self._config.images().remove(ref.name) def rename_distro(self, ref, newname): self.log("rename_distro",[ref.name,newname]) @@ -198,6 +235,10 @@ class BootAPI: def rename_repo(self, ref, newname): self.log("rename_repo",[ref.name,newname]) return self._config.repos().rename(ref,newname) + + def rename_image(self, ref, newname): + self.log("rename_image",[ref.name,newname]) + return self._config.image().rename(ref,newname) def new_distro(self,is_subobject=False): self.log("new_distro",[is_subobject]) @@ -214,6 +255,10 @@ class BootAPI: def new_repo(self,is_subobject=False): self.log("new_repo",[is_subobject]) return self._config.new_repo(is_subobject=is_subobject) + + def new_image(self,is_subobject=False): + self.log("new_image",[is_subobject]) + return self._config.new_image(is_subobject=is_subobject) def add_distro(self, ref, check_for_duplicate_names=False): self.log("add_distro",[ref.name]) @@ -230,18 +275,25 @@ class BootAPI: def add_repo(self, ref, check_for_duplicate_names=False): self.log("add_repo",[ref.name]) return self._config.repos().add(ref,save=True,check_for_duplicate_names=check_for_duplicate_names) + + def add_image(self, ref, check_for_duplicate_names=False): + self.log("add_image",[ref.name]) + return self._config.images().add(ref,save=True,check_for_duplicate_names=check_for_duplicate_names) + + def find_distro(self, name=None, return_list=False, no_errors=False, **kargs): + return self._config.distros().find(name=name, return_list=return_list, no_errors=no_errors, **kargs) - def find_distro(self, name=None, return_list=False, **kargs): - return self._config.distros().find(name=name, return_list=return_list, **kargs) + def find_profile(self, name=None, return_list=False, no_errors=False, **kargs): + return self._config.profiles().find(name=name, return_list=return_list, no_errors=no_errors, **kargs) - def find_profile(self, name=None, return_list=False, **kargs): - return self._config.profiles().find(name=name, return_list=return_list, **kargs) + def find_system(self, name=None, return_list=False, no_errors=False, **kargs): + return self._config.systems().find(name=name, return_list=return_list, no_errors=no_errors, **kargs) - def find_system(self, name=None, return_list=False, **kargs): - return self._config.systems().find(name=name, return_list=return_list, **kargs) + def find_repo(self, name=None, return_list=False, no_errors=False, **kargs): + return self._config.repos().find(name=name, return_list=return_list, no_errors=no_errors, **kargs) - def find_repo(self, name=None, return_list=False, **kargs): - return self._config.repos().find(name=name, return_list=return_list, **kargs) + def find_image(self, name=None, return_list=False, no_errors=False, **kargs): + return self._config.images().find(name=name, return_list=return_list, no_errors=no_errors, **kargs) def dump_vars(self, obj, format=False): return obj.dump_vars(format) @@ -282,6 +334,12 @@ class BootAPI: # run cobbler reposync to apply changes return True + def get_repo_config_for_profile(self,obj): + return self.yumgen.get_yum_config(obj,True) + + def get_repo_config_for_system(self,obj): + return self.yumgen.get_yum_config(obj,False) + def generate_kickstart(self,profile,system): self.log("generate_kickstart") if system: @@ -348,7 +406,7 @@ class BootAPI: reposync = action_reposync.RepoSync(self._config) return reposync.run(name) - def status(self,mode): + def status(self,mode=None): self.log("status") statusifier = action_status.BootStatusReport(self._config,mode) return statusifier.run() @@ -367,6 +425,19 @@ class BootAPI: ) return importer.run() + def acl_config(self,adduser=None,addgroup=None,removeuser=None,removegroup=None): + """ + Configures users/groups to run the cobbler CLI as non-root. + Pass in only one option at a time. Powers "cobbler aclconfig" + """ + acl = action_acl.AclConfig(self._config) + return acl.run( + adduser=adduser, + addgroup=addgroup, + removeuser=removeuser, + removegroup=removegroup + ) + def serialize(self): """ Save the config file(s) to disk. @@ -386,6 +457,13 @@ class BootAPI: """ return self._config.deserialize_raw(collection_name) + def deserialize_item_raw(self,collection_name,obj_name): + """ + Get an object back as raw data. + Can be very fast for shelve or catalog serializers + """ + return self._config.deserialize_item_raw(collection_name,obj_name) + def get_module_by_name(self,module_name): """ Returns a loaded cobbler module named 'name', if one exists, else None. @@ -422,15 +500,27 @@ class BootAPI: self.log("authorize",[user,resource,arg1,arg2,rc],debug=True) return rc - def build_iso(self,iso=None,profiles=None,tempdir=None): + def build_iso(self,iso=None,profiles=None,systems=None,tempdir=None): builder = action_buildiso.BuildIso(self._config) return builder.run( - iso=iso, profiles=profiles, tempdir=tempdir + iso=iso, profiles=profiles, systems=systems, tempdir=tempdir ) - def replicate(self, cobbler_master = None): + def replicate(self, cobbler_master = None, sync_all=False, sync_kickstarts=False, sync_trees=False, sync_repos=False, sync_triggers=False, systems=False): + """ + Pull down metadata from a remote cobbler server that is a master to this server. + Optionally rsync data from it. + """ replicator = action_replicate.Replicate(self._config) - return replicator.run(cobbler_master = cobbler_master) + return replicator.run( + cobbler_master = cobbler_master, + sync_all = sync_all, + sync_kickstarts = sync_kickstarts, + sync_trees = sync_trees, + sync_repos = sync_repos, + sync_triggers = sync_triggers, + include_systems = systems + ) def get_kickstart_templates(self): return utils.get_kickstar_templates(self) |