Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redhat subscription #20729

Merged
merged 8 commits into from
Feb 7, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
104 changes: 65 additions & 39 deletions lib/ansible/modules/packaging/os/redhat_subscription.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,11 @@
version_added: "2.1"
consumer_id:
description:
- References an existing consumer ID to resume using a previous registration for this system. If the system's identity certificate is lost or corrupted, this option allows it to resume using its previous identity and subscriptions. The default is to not specify a consumer ID so a new ID is created.
- |
References an existing consumer ID to resume using a previous registration
for this system. If the system's identity certificate is lost or corrupted,
this option allows it to resume using its previous identity and subscriptions.
The default is to not specify a consumer ID so a new ID is created.
required: False
default: null
version_added: "2.1"
Expand Down Expand Up @@ -166,6 +170,9 @@
from ansible.module_utils.six.moves import configparser


SUBMAN_CMD = None


class RegistrationBase(object):
def __init__(self, module, username=None, password=None):
self.module = module
Expand Down Expand Up @@ -258,9 +265,9 @@ def configure(self, **kwargs):
# Pass supplied **kwargs as parameters to subscription-manager. Ignore
# non-configuration parameters and replace '_' with '.'. For example,
# 'server_hostname' becomes '--system.hostname'.
for k,v in kwargs.items():
for k, v in kwargs.items():
if re.search(r'^(system|rhsm)_', k):
args.append('--%s=%s' % (k.replace('_','.'), v))
args.append('--%s=%s' % (k.replace('_', '.'), v))

self.module.run_command(args, check_rc=True)

Expand All @@ -272,10 +279,6 @@ def is_registered(self):
* Boolean - whether the current system is currently registered to
RHSM.
'''
# Quick version...
if False:
return os.path.isfile('/etc/pki/consumer/cert.pem') and \
os.path.isfile('/etc/pki/consumer/key.pem')

args = [SUBMAN_CMD, 'identity']
rc, stdout, stderr = self.module.run_command(args, check_rc=False)
Expand All @@ -285,7 +288,8 @@ def is_registered(self):
return False

def register(self, username, password, autosubscribe, activationkey, org_id,
consumer_type, consumer_name, consumer_id, force_register, environment):
consumer_type, consumer_name, consumer_id, force_register, environment,
rhsm_baseurl, server_insecure):
'''
Register the current system to the provided RHSM or Sat6 server
Raises:
Expand All @@ -297,6 +301,12 @@ def register(self, username, password, autosubscribe, activationkey, org_id,
if force_register:
args.extend(['--force'])

if rhsm_baseurl:
args.extend(['--baseurl', rhsm_baseurl])

if server_insecure:
args.extend(['--insecure'])

if activationkey:
args.extend(['--activationkey', activationkey])
args.extend(['--org', org_id])
Expand Down Expand Up @@ -366,30 +376,29 @@ def subscribe(self, regexp):
return subscribed_pool_ids

def update_subscriptions(self, regexp):
changed=False
changed = False
consumed_pools = RhsmPools(self.module, consumed=True)
pool_ids_to_keep = [p.get_pool_id() for p in consumed_pools.filter(regexp)]

serials_to_remove=[p.Serial for p in consumed_pools if p.get_pool_id() not in pool_ids_to_keep]
serials_to_remove = [p.Serial for p in consumed_pools if p.get_pool_id() not in pool_ids_to_keep]
serials = self.unsubscribe(serials=serials_to_remove)

subscribed_pool_ids = self.subscribe(regexp)

if subscribed_pool_ids or serials:
changed=True
changed = True
return {'changed': changed, 'subscribed_pool_ids': subscribed_pool_ids,
'unsubscribed_serials': serials}



class RhsmPool(object):
'''
Convenience class for housing subscription information
'''

def __init__(self, module, **kwargs):
self.module = module
for k,v in kwargs.items():
for k, v in kwargs.items():
setattr(self, k, v)

def __str__(self):
Expand Down Expand Up @@ -441,7 +450,7 @@ def _load_product_list(self, consumed=False):
continue
# If a colon ':' is found, parse
elif ':' in line:
(key, value) = line.split(':',1)
(key, value) = line.split(':', 1)
key = key.strip().replace(" ", "") # To unify
value = value.strip()
if key in ['ProductName', 'SubscriptionName']:
Expand All @@ -451,7 +460,7 @@ def _load_product_list(self, consumed=False):
# Associate value with most recently recorded product
products[-1].__setattr__(key, value)
# FIXME - log some warning?
#else:
# else:
# warnings.warn("Unhandled subscription key/value: %s/%s" % (key,value))
return products

Expand All @@ -471,27 +480,44 @@ def main():
rhsm = Rhsm(None)

module = AnsibleModule(
argument_spec = dict(
state = dict(default='present', choices=['present', 'absent']),
username = dict(default=None, required=False),
password = dict(default=None, required=False, no_log=True),
server_hostname = dict(default=rhsm.config.get_option('server.hostname'), required=False),
server_insecure = dict(default=rhsm.config.get_option('server.insecure'), required=False),
rhsm_baseurl = dict(default=rhsm.config.get_option('rhsm.baseurl'), required=False),
autosubscribe = dict(default=False, type='bool'),
activationkey = dict(default=None, required=False),
org_id = dict(default=None, required=False),
environment = dict(default=None, required=False, type='str'),
pool = dict(default='^$', required=False, type='str'),
consumer_type = dict(default=None, required=False),
consumer_name = dict(default=None, required=False),
consumer_id = dict(default=None, required=False),
force_register = dict(default=False, type='bool'),
),
required_together = [ ['username', 'password'], ['activationkey', 'org_id'] ],
mutually_exclusive = [ ['username', 'activationkey'] ],
required_if = [ [ 'state', 'present', ['username', 'activationkey'], True ] ],
)
argument_spec=dict(
state=dict(default='present',
choices=['present', 'absent']),
username=dict(default=None,
required=False),
password=dict(default=None,
required=False,
no_log=True),
server_hostname=dict(default=rhsm.config.get_option('server.hostname'),
required=False),
server_insecure=dict(default=rhsm.config.get_option('server.insecure'),
required=False),
rhsm_baseurl=dict(default=rhsm.config.get_option('rhsm.baseurl'),
required=False),
autosubscribe=dict(default=False,
type='bool'),
activationkey=dict(default=None,
required=False),
org_id=dict(default=None,
required=False),
environment=dict(default=None,
required=False, type='str'),
pool=dict(default='^$',
required=False,
type='str'),
consumer_type=dict(default=None,
required=False),
consumer_name=dict(default=None,
required=False),
consumer_id=dict(default=None,
required=False),
force_register=dict(default=False,
type='bool'),
),
required_together=[['username', 'password'], ['activationkey', 'org_id']],
mutually_exclusive=[['username', 'activationkey']],
required_if=[['state', 'present', ['username', 'activationkey'], True]],
)

rhsm.module = module
state = module.params['state']
Expand All @@ -500,7 +526,7 @@ def main():
server_hostname = module.params['server_hostname']
server_insecure = module.params['server_insecure']
rhsm_baseurl = module.params['rhsm_baseurl']
autosubscribe = module.params['autosubscribe'] == True
autosubscribe = module.params['autosubscribe']
activationkey = module.params['activationkey']
org_id = module.params['org_id']
environment = module.params['environment']
Expand Down Expand Up @@ -533,8 +559,8 @@ def main():
rhsm.enable()
rhsm.configure(**module.params)
rhsm.register(username, password, autosubscribe, activationkey, org_id,
consumer_type, consumer_name, consumer_id, force_register,
environment)
consumer_type, consumer_name, consumer_id, force_register,
environment, rhsm_baseurl, server_insecure)
subscribed_pool_ids = rhsm.subscribe(pool)
except Exception:
e = get_exception()
Expand Down
1 change: 0 additions & 1 deletion test/sanity/pep8/legacy-files.txt
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,6 @@ lib/ansible/modules/packaging/os/homebrew.py
lib/ansible/modules/packaging/os/openbsd_pkg.py
lib/ansible/modules/packaging/os/opkg.py
lib/ansible/modules/packaging/os/pacman.py
lib/ansible/modules/packaging/os/redhat_subscription.py
lib/ansible/modules/packaging/os/rhn_register.py
lib/ansible/modules/packaging/os/swdepot.py
lib/ansible/modules/packaging/os/yum.py
Expand Down