summaryrefslogtreecommitdiffstats
path: root/cobbler/api.py
diff options
context:
space:
mode:
authorMichael DeHaan <mdehaan@redhat.com>2008-08-29 15:31:05 -0400
committerMichael DeHaan <mdehaan@redhat.com>2008-08-29 15:31:05 -0400
commit3d11fd9fd50714617b7bac7c4c068aa4e369701b (patch)
treebfe3531d0f546ac3338d18654d8b1f5f4bc89f1d /cobbler/api.py
parent140c367cb9a913c76fbe02e66da0f14badc50f99 (diff)
parent1139d5eee52c75dbf10fa11d3644d5c4a37de7b6 (diff)
downloadcobbler-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.py128
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)