Fixed subscription-manager registration

Optional channel should not be enabled by default and relevant OS channel
should be enabled by default. This patch is implementing those features.

Priority of plugin serverprep has been changed since we need repositories
before we touch any other packstack plugins.

Change-Id: Id5a8e89c7bb817c99b398ef0053e1c35a7a21cab
Fixes: rhbz#1093482
This commit is contained in:
Martin Magr 2014-06-19 15:35:22 +02:00
parent 4956435397
commit ed5928bdf5
3 changed files with 43 additions and 27 deletions

View File

@ -83,6 +83,19 @@ def initConfig(controller):
"NEED_CONFIRM": False,
"CONDITION": False},
{"CMD_OPTION": "rhn-enable-optional",
"USAGE": "To enable RHEL optional repos use value \"y\"",
"PROMPT": "To enable RHEL optional repos use value \"y\"",
"OPTION_LIST": ["y", "n"],
"VALIDATORS": [validators.validate_options],
"DEFAULT_VALUE": "y",
"MASK_INPUT": False,
"LOOSE_VALIDATION": True,
"CONF_NAME": "CONFIG_RH_OPTIONAL",
"USE_DEFAULT": False,
"NEED_CONFIRM": False,
"CONDITION": False},
{"CMD_OPTION": "rhn-satellite-server",
"USAGE": ("To subscribe each server with RHN Satellite,fill "
"Satellite's URL here. Note that either satellite's "
@ -346,10 +359,11 @@ def run_rhn_reg(host, server_url, username=None, password=None,
server.execute(mask_list=mask)
def run_rhsm_reg(host, username, password):
def run_rhsm_reg(config, host, username, password):
"""
Registers given host to Red Hat Repositories via subscription manager.
"""
releasever = config['HOST_DETAILS'][host]['release'].split('.')[0]
server = utils.ScriptRunner(host)
# register host
@ -360,12 +374,16 @@ def run_rhsm_reg(host, username, password):
# subscribe to required channel
cmd = ('subscription-manager list --consumed | grep -i openstack || '
'subscription-manager subscribe --pool %s')
pool = ("$(subscription-manager list --available | "
"grep -e 'Red Hat OpenStack' -m 1 -A 2 | grep 'Pool Id' | "
"awk '{print $3}')")
pool = ("$(subscription-manager list --available"
" | grep -e -m1 -A15 'Red Hat Enterprise Linux OpenStack Platform'"
" | grep -i 'Pool ID:' | awk '{print $3}')")
server.append(cmd % pool)
if config['CONFIG_RH_OPTIONAL'] == 'y':
server.append("subscription-manager repos "
"--enable rhel-6-server-optional-rpms")
"--enable rhel-%s-server-optional-rpms" % releasever)
server.append("subscription-manager repos "
"--enable rhel-%s-server-openstack-5.0-rpms" % releasever)
server.append("yum clean all")
server.append("rpm -q --whatprovides yum-utils || "
@ -507,7 +525,7 @@ def server_prep(config, messages):
for hostname in filtered_hosts(config):
# Subscribe to Red Hat Repositories if configured
if rh_username:
run_rhsm_reg(hostname, rh_username, rh_password)
run_rhsm_reg(config, hostname, rh_username, rh_password)
# Subscribe to RHN Satellite if configured
if sat_url and hostname not in sat_registered:

View File

@ -18,11 +18,9 @@ import os
from unittest import TestCase
from test_base import PackstackTestCaseMixin
from packstack.plugins import serverprep_949
from packstack.plugins import serverprep_001
from packstack.installer.setup_controller import Controller
serverprep_949.controller = Controller()
class OSPluginUtilsTestCase(PackstackTestCaseMixin, TestCase):
def test_rhn_creds_quoted(self):
@ -30,30 +28,30 @@ class OSPluginUtilsTestCase(PackstackTestCaseMixin, TestCase):
# On non-RHEL, the CONFIG_{RH,SATELLITE} options are never set,
# i.e. this test would always fail. Therefore, only run it on RHEL.
if not serverprep_949.is_rhel():
if not serverprep_001.is_rhel():
return
password = "dasd|'asda%><?"
serverprep_949.controller.CONF["CONFIG_KEYSTONE_HOST"] = "1.2.3.4"
serverprep_949.controller.CONF["CONFIG_USE_EPEL"] = "n"
serverprep_949.controller.CONF["CONFIG_REPO"] = ""
serverprep_949.controller.CONF["CONFIG_RH_USER"] = "testuser"
serverprep_949.controller.CONF["CONFIG_RH_PW"] = password
serverprep_949.controller.CONF["CONFIG_RH_BETA_REPO"] = "n"
serverprep_001.controller.CONF["CONFIG_KEYSTONE_HOST"] = "1.2.3.4"
serverprep_001.controller.CONF["CONFIG_USE_EPEL"] = "n"
serverprep_001.controller.CONF["CONFIG_REPO"] = ""
serverprep_001.controller.CONF["CONFIG_RH_USER"] = "testuser"
serverprep_001.controller.CONF["CONFIG_RH_PW"] = password
serverprep_001.controller.CONF["CONFIG_RH_BETA_REPO"] = "n"
serverprep_949.controller.CONF["CONFIG_SATELLITE_FLAGS"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_URL"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_USER"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_PW"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_CACERT"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_AKEY"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_PROFILE"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_PROXY"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_PROXY_USER"] = ""
serverprep_949.controller.CONF["CONFIG_SATELLITE_PROXY_PW"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_FLAGS"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_URL"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_USER"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_PW"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_CACERT"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_AKEY"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_PROFILE"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_PROXY"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_PROXY_USER"] = ""
serverprep_001.controller.CONF["CONFIG_SATELLITE_PROXY_PW"] = ""
serverprep_949.serverprep(serverprep_949.controller.CONF)
serverprep_001.serverprep(serverprep_001.controller.CONF)
self.assertNotEqual(
self.fake_popen.data.find('--password="%s"' % password), -1