[PATCH rhel7-branch] Allow specifying an environment in the kickstart file (#1050994).

David Shea dshea at redhat.com
Tue Feb 4 08:10:39 UTC 2014


On 02/03/2014 10:01 PM, Chris Lumens wrote:
> This is done without introducing any new kickstart syntax.  We just check all
> the groups listed and if any is an environment, select it.  This should work
> for deselecting environments too.

I'm worried about overloading the group syntax instead of using the @^ 
environment group yum syntax uses, since we're going to end up with a 
group and an environment with the same ID at some point. RHEL makes me 
especially nervous, since they don't always follow the convention of 
using -environment in the environment IDs there. Yum makes no attempt to 
look up environments when you give it @whatever, so I think we should 
stick with that.

> ---
>   pyanaconda/packaging/yumpayload.py   | 38 ++++++++++++++++++++++++++++++++----
>   pyanaconda/ui/gui/spokes/software.py | 10 +++++++++-
>   2 files changed, 43 insertions(+), 5 deletions(-)
>
> diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
> index 4b4a226..0cf380b 100644
> --- a/pyanaconda/packaging/yumpayload.py
> +++ b/pyanaconda/packaging/yumpayload.py
> @@ -1365,8 +1365,20 @@ reposdir=%s
>           """
>           self._selectYumGroup("core")
>   
> -        if self.data.packages.default and self.environments:
> -            self.selectEnvironment(self.environments[0])
> +        foundEnv = None
> +
> +        if self.environments:
> +            if self.data.packages.default:
> +                self.selectEnvironment(self.environments[0])
> +            else:
> +                # Look through all groups listed in the kickstart file.  If one
> +                # is an environment, select it now and then mark which one it is
> +                # so we don't later try to select it as a group, too.
> +                for (ndx, grp) in enumerate(self.data.packages.groupList):
> +                    if grp.name in self.environments:
> +                        self.selectEnvironment(grp.name)
> +                        foundEnv = ndx
> +                        break
>   
>           for package in self.data.packages.packageList:
>               try:
> @@ -1374,7 +1386,11 @@ reposdir=%s
>               except NoSuchPackage as e:
>                   self._handleMissing(e)
>   
> -        for group in self.data.packages.groupList:
> +        for (ndx, group) in enumerate(self.data.packages.groupList):
> +            # Skip any previously selected environment.
> +            if ndx == foundEnv:
> +                continue
> +
>               default = False
>               optional = False
>               if group.include == GROUP_DEFAULT:
> @@ -1394,7 +1410,21 @@ reposdir=%s
>               except NoSuchPackage as e:
>                   self._handleMissing(e)
>   
> -        for group in self.data.packages.excludedGroupList:
> +        # And then do the same thing for removing environments as we did for
> +        # adding them earlier.
> +        foundEnv = None
> +        if self.environments:
> +            for (ndx, grp) in enumerate(self.data.packages.excludedGroupList):
> +                if grp.name in self.environments:
> +                    self.deselectEnvironment(grp.name)
> +                    foundEnv = ndx
> +                    break
> +
> +        for (ndx, group) in enumerate(self.data.packages.excludedGroupList):
> +            # Skip any previously selected environment.
> +            if ndx == foundEnv:
> +                continue
> +
>               try:
>                   self._deselectYumGroup(group.name)
>               except NoSuchGroup as e:
> diff --git a/pyanaconda/ui/gui/spokes/software.py b/pyanaconda/ui/gui/spokes/software.py
> index 1f92e3d..b35c5a0 100644
> --- a/pyanaconda/ui/gui/spokes/software.py
> +++ b/pyanaconda/ui/gui/spokes/software.py
> @@ -250,8 +250,16 @@ class SoftwareSelectionSpoke(NormalSpoke):
>   
>           self._environmentStore = self.builder.get_object("environmentStore")
>           self._environmentStore.clear()
> +
> +        # If we don't know what the environment is, perhaps it's listed in the
> +        # kickstart file.  Look in there to see.
>           if self.environment not in self.payload.environments:
> -            self.environment = None
> +            for grp in self.data.packages.groupList:
> +                if grp.name in self.payload.environments:
> +                    self.environment = grp.name
> +                    break
> +            else:
> +                self.environment = None
>   
>           clasess = []
>           firstEnvironment = True



More information about the anaconda-patches mailing list