-
Notifications
You must be signed in to change notification settings - Fork 115
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
Enabling Robottelo for IPv6 Testing #14160
Changes from all commits
f7cb5b1
18081c7
b2ec77b
e7848dd
d447cb3
3a63b78
b27a4d0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
jyejare marked this conversation as resolved.
Show resolved
Hide resolved
jyejare marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -73,6 +73,7 @@ def lru_sat_ready_rhel(rhel_ver): | |
rhel_version = rhel_ver or settings.server.version.rhel_version | ||
deploy_args = { | ||
'deploy_rhel_version': rhel_version, | ||
'deploy_network_type': 'ipv6' if settings.server.is_ipv6 else 'ipv4', | ||
'deploy_flavor': settings.flavors.default, | ||
'promtail_config_template_file': 'config_sat.j2', | ||
'workflow': settings.server.deploy_workflows.os, | ||
|
@@ -823,6 +824,7 @@ def register_contenthost( | |
auto_attach=False, | ||
serverurl=None, | ||
baseurl=None, | ||
enable_proxy=False, | ||
): | ||
"""Registers content host on foreman server either by specifying | ||
organization name and activation key name or by specifying organization | ||
|
@@ -879,6 +881,7 @@ def register_contenthost( | |
cmd += f' --serverurl {serverurl}' | ||
if baseurl: | ||
cmd += f' --baseurl {baseurl}' | ||
|
||
return self.execute(cmd) | ||
|
||
def unregister(self): | ||
|
@@ -925,6 +928,13 @@ def put_ssh_key(self, source_key_path, destination_key_name): | |
if result.status != 0: | ||
raise CLIFactoryError(f'Failed to chmod ssh key file:\n{result.stderr}') | ||
|
||
def enable_rhsm_proxy(self, hostname, port=None): | ||
"""Configures proxy for subscription manager""" | ||
cmd = f"subscription-manager config --server.proxy_hostname={hostname}" | ||
if port: | ||
cmd += f' --server.proxy_port={port}' | ||
self.execute(cmd) | ||
|
||
def add_authorized_key(self, pub_key): | ||
"""Inject a public key into the authorized keys file | ||
|
||
|
@@ -1469,7 +1479,7 @@ def install_tracer(self): | |
raise ContentHostError('There was an error installing katello-host-tools-tracer') | ||
self.execute('katello-tracer-upload') | ||
|
||
def register_to_cdn(self, pool_ids=None): | ||
def register_to_cdn(self, pool_ids=None, enable_proxy=False): | ||
"""Subscribe satellite to CDN""" | ||
if pool_ids is None: | ||
pool_ids = [settings.subscription.rhn_poolid] | ||
|
@@ -1479,6 +1489,7 @@ def register_to_cdn(self, pool_ids=None): | |
lce=None, | ||
username=settings.subscription.rhn_username, | ||
password=settings.subscription.rhn_password, | ||
enable_proxy=enable_proxy, | ||
) | ||
if cmd_result.status != 0: | ||
raise ContentHostError( | ||
|
@@ -1633,6 +1644,17 @@ def enable_capsule_downstream_repos(self): | |
snap=settings.capsule.version.snap, | ||
) | ||
|
||
def enable_ipv6_http_proxy(self): | ||
"""Execute procedures for enabling IPv6 HTTP Proxy on Capsule using SM""" | ||
if all([settings.server.is_ipv6, settings.server.http_proxy_ipv6_url]): | ||
url = urlparse(settings.server.http_proxy_ipv6_url) | ||
self.enable_rhsm_proxy(url.hostname, url.port) | ||
|
||
def disable_ipv6_http_proxy(self): | ||
"""Executes procedures for disabling IPv6 HTTP Proxy on Capsule""" | ||
if settings.server.is_ipv6: | ||
self.execute('subscription-manager remove server.proxy_hostname server.proxy_port') | ||
|
||
def capsule_setup(self, sat_host=None, capsule_cert_opts=None, **installer_kwargs): | ||
"""Prepare the host and run the capsule installer""" | ||
self._satellite = sat_host or Satellite() | ||
|
@@ -1756,6 +1778,10 @@ def enable_satellite_or_capsule_module_for_rhel8(self): | |
Note: Make sure required repos are enabled before using this. | ||
""" | ||
if self.os_version.major == 8: | ||
if settings.server.is_ipv6: | ||
self.execute( | ||
f"echo -e 'proxy={settings.server.http_proxy_ipv6_url}' >> /etc/dnf/dnf.conf" | ||
) | ||
Comment on lines
+1781
to
+1784
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why only for RHEL 8? 🤔 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The question is out of scope of this PR. But I think it is because the modularity started in RHEL8 but the condition could be changed to |
||
assert ( | ||
self.execute( | ||
f'dnf -y module enable {self.product_rpm_name}:el{self.os_version.major}' | ||
|
@@ -1798,6 +1824,55 @@ def _swap_nailgun(self, new_version): | |
to_clear = [k for k in sys.modules if 'nailgun' in k] | ||
[sys.modules.pop(k) for k in to_clear] | ||
|
||
def enable_ipv6_http_proxy(self): | ||
"""Execute procedures for enabling IPv6 HTTP Proxy""" | ||
if not all([settings.server.is_ipv6, settings.server.http_proxy_ipv6_url]): | ||
logger.warning( | ||
'The IPv6 HTTP Proxy setting is not enabled. Skipping the IPv6 HTTP Proxy setup.' | ||
) | ||
return None | ||
proxy_name = 'Robottelo IPv6 Automation Proxy' | ||
if not self.cli.HttpProxy.exists(search=('name', proxy_name)): | ||
http_proxy = self.api.HTTPProxy( | ||
name=proxy_name, url=settings.server.http_proxy_ipv6_url | ||
).create() | ||
else: | ||
logger.info( | ||
'The IPv6 HTTP Proxy is already enabled. Skipping the IPv6 HTTP Proxy setup.' | ||
) | ||
http_proxy = self.api.HTTPProxy().search(query={'search': f'name={proxy_name}'})[0] | ||
# Setting HTTP Proxy as default in the settings | ||
self.cli.Settings.set( | ||
{ | ||
'name': 'content_default_http_proxy', | ||
'value': proxy_name, | ||
} | ||
) | ||
self.cli.Settings.set( | ||
{ | ||
'name': 'http_proxy', | ||
'value': settings.server.http_proxy_ipv6_url, | ||
} | ||
) | ||
return http_proxy | ||
|
||
def disable_ipv6_http_proxy(self, http_proxy): | ||
jyejare marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"""Execute procedures for disabling IPv6 HTTP Proxy""" | ||
if http_proxy: | ||
http_proxy.delete() | ||
self.cli.Settings.set( | ||
{ | ||
'name': 'content_default_http_proxy', | ||
'value': '', | ||
} | ||
) | ||
self.cli.Settings.set( | ||
{ | ||
'name': 'http_proxy', | ||
'value': '', | ||
} | ||
) | ||
|
||
@property | ||
def api(self): | ||
"""Import all nailgun entities and wrap them under self.api""" | ||
|
@@ -2326,6 +2401,23 @@ def sync_inventory_status(self, org): | |
) | ||
return inventory_sync | ||
|
||
def register_contenthost( | ||
self, | ||
org='Default_Organization', | ||
lce='Library', | ||
username=settings.server.admin_username, | ||
password=settings.server.admin_password, | ||
enable_proxy=False, | ||
): | ||
"""Satellite Registration to CDN""" | ||
# Enabling proxy for IPv6 | ||
if enable_proxy and all([settings.server.is_ipv6, settings.server.http_proxy_ipv6_url]): | ||
url = urlparse(settings.server.http_proxy_ipv6_url) | ||
self.enable_rhsm_proxy(url.hostname, url.port) | ||
return super().register_contenthost( | ||
org=org, lce=lce, username=username, password=password, enable_proxy=enable_proxy | ||
) | ||
|
||
|
||
class SSOHost(Host): | ||
"""Class for RHSSO functions and setup""" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
seeing
settings.server
section being referenced inContentHostMixins
does not seem right. Can you please use different settings than the server ones?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Its already there used in
_dogfood_helper
function to not surprise :)The only way we have is to override the function in Satellite class, because though its defined in ContentHost class its used for Satellite in this case.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also there are many places in Host classes which are not adhering to the class in which context they are. The best way to clean is to override the method in child class and call super method.
For this PR I don't want to sign up for that work, we could see it as a separate effort.