[PATCH] Add support for the realm command
Vratislav Podzimek
vpodzime at redhat.com
Thu May 9 19:24:01 UTC 2013
On Thu, 2013-05-09 at 13:15 -0400, Chris Lumens wrote:
> > diff --git a/anaconda.spec.in b/anaconda.spec.in
> > index 34c580e..b07831b 100644
> > --- a/anaconda.spec.in
> > +++ b/anaconda.spec.in
> > @@ -21,7 +21,7 @@ Source0: %{name}-%{version}.tar.bz2
> > %define gconfversion 2.28.1
> > %define intltoolver 0.31.2-3
> > %define libnlver 1.0
> > -%define pykickstartver 1.99.28
> > +%define pykickstartver 1.99.29
> > %define yumver 3.4.3-32
> > %define partedver 1.8.1
> > %define pypartedver 2.5-2
>
> This is going to end up being 1.99.30.
>
> > @@ -368,6 +369,81 @@ class BTRFSData(commands.btrfs.F17_BTRFSData):
> >
> > storage.createDevice(request)
> >
> > +
> > +class Realm(commands.realm.F19_Realm):
> > + def __init__(self, *args):
> > + commands.realm.F19_Realm.__init__(self, *args)
> > + self.packages = []
> > + self.discovered = ""
> > +
> > + def setup(self):
> > + if not self.join_realm:
> > + return
> > +
> > + try:
> > + argv = ["realm", "discover", "--verbose"] + \
> > + self.discover_options + [self.join_realm]
> > + proc = subprocess.Popen(argv, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
> > + output, stderr = proc.communicate()
> > + # might contain useful information for users who use
> > + # use the realm kickstart command
> > + log.info("Realm discover stderr:\n%s" % stderr)
> > + except OSError as msg:
> > + # TODO: A lousy way of propagating what will usually be
> > + # 'no such realm'
> > + log.error("Error running realm %s: %s", argv, msg)
> > + return
> > +
> > + # Now parse the output for the required software. First line is the
> > + # realm name, and following lines are information as "name: value"
> > + self.packages = ["realmd"]
> > + self.discovered = ""
> > +
> > + lines = output.split("\n")
> > + if not lines:
> > + return
> > + self.discovered = lines.pop(0).strip()
> > + log.info("Realm discovered: %s" % self.discovered)
> > + for line in lines:
> > + parts = line.split(":", 1)
> > + if len(parts) == 2 and parts[0].strip() == "required-package":
> > + self.packages.append(parts[1].strip())
> > +
> > + log.info("Realm %s needs packages %s" %
> > + (self.discovered, ", ".join(self.packages)))
> > +
> > + def execute(self, *args):
> > + if not self.discovered:
> > + return
> > + for arg in self.join_args:
> > + if arg.startswith("--no-password") or arg.startswith("--one-time-password"):
> > + pw_args = []
> > + break
> > + else:
> > + # no explicit password arg using implicit --no-password
> > + pw_args = ["--no-password"]
> > +
> > + argv = ["realm", "join", "--install", ROOT_PATH, "--verbose"] + \
> > + pw_args + self.join_args
> > + rc = -1
> > + try:
> > + proc = subprocess.Popen(argv, stdout=subprocess.PIPE,
> > + stderr=subprocess.PIPE)
> > + output, stderr = proc.communicate()
> > + # might contain useful information for users who use
> > + # use the realm kickstart command
> > + log.info("Realm join stderr:\n%s" % stderr)
> > + rc = proc.returncode
> > + except OSError as msg:
> > + log.error("Error running %s: %s", argv, msg)
> > +
> > + if rc != 0:
> > + log.error("Command failure: %s: %d", argv, rc)
> > + return
> > +
> > + log.info("Joined realm %s", self.join_realm)
> > +
> > +
> > class ClearPart(commands.clearpart.F17_ClearPart):
> > def parse(self, args):
> > retval = commands.clearpart.F17_ClearPart.parse(self, args)
>
> Just curious - why not use iutil.execWithCapture here instead of
> subprocess directly?
Because the execWithCapture returns stdout and stderr mixed together.
--
Vratislav Podzimek
Anaconda Rider | Red Hat, Inc. | Brno - Czech Republic
More information about the anaconda-patches
mailing list