Skip to content

Commit

Permalink
Improve idempotency for networking in podman_container
Browse files Browse the repository at this point in the history
Related: containers#555
Signed-off-by: Sagi Shnaidman <sshnaidm@redhat.com>
  • Loading branch information
sshnaidm committed May 23, 2024
1 parent e1e4e75 commit c7a6086
Showing 1 changed file with 1 addition and 47 deletions.
48 changes: 1 addition & 47 deletions plugins/module_utils/podman/podman_container_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -885,10 +885,6 @@ def default_dict(self):
if (LooseVersion(self.version) >= LooseVersion('1.8.0')
and LooseVersion(self.version) < LooseVersion('1.9.0')):
self.defaults['cpu_shares'] = 1024
if (LooseVersion(self.version) >= LooseVersion('2.0.0')):
self.defaults['network'] = ["slirp4netns"]
if (LooseVersion(self.version) >= LooseVersion('5.0.0')):
self.defaults['network'] = ["pasta"]
if (LooseVersion(self.version) >= LooseVersion('3.0.0')):
self.defaults['log_level'] = "warning"
return self.defaults
Expand Down Expand Up @@ -1315,49 +1311,7 @@ def diffparam_mount(self):
return self._diff_generic('mount', '--mount')

def diffparam_network(self):
net_mode_before = self.info['hostconfig']['networkmode']
net_mode_after = ''
before = list(self.info['networksettings'].get('networks', {}))
# Remove default 'podman' network in v3 for comparison
if before == ['podman']:
before = []
# Special case for options for slirp4netns rootless networking from v2
if net_mode_before == 'slirp4netns' and 'createcommand' in self.info['config']:
cr_net = [i.lower() for i in self._createcommand('--network')]
for cr_net_opt in cr_net:
if 'slirp4netns:' in cr_net_opt:
before = [cr_net_opt]
if net_mode_before == 'pasta':
cr_net = [i.lower() for i in self._createcommand('--network')]
for cr_net_opt in cr_net:
if 'pasta:' in cr_net_opt:
before = [cr_net_opt]
after = self.params['network'] or []
after = [i.lower() for i in after]
# If container is in pod and no networks are provided
if not self.module_params['network'] and self.params['pod']:
after = before
return self._diff_update_and_compare('network', before, after)
# Check special network modes
if after in [['bridge'], ['host'], ['slirp4netns'], ['none'], ['pasta']]:
net_mode_after = after[0]
# If changes are only for network mode and container has no networks
if net_mode_after and not before:
# Remove differences between v1 and v2
net_mode_after = net_mode_after.replace('bridge', 'default')
net_mode_after = net_mode_after.replace('slirp4netns', 'default')
net_mode_after = net_mode_after.replace('pasta', 'default')
net_mode_before = net_mode_before.replace('bridge', 'default')
net_mode_before = net_mode_before.replace('slirp4netns', 'default')
net_mode_before = net_mode_before.replace('pasta', 'default')
return self._diff_update_and_compare('network', net_mode_before, net_mode_after)
# If container is attached to network of a different container
if "container" in net_mode_before:
for netw in after:
if "container" in netw:
before = after = netw
before, after = sorted(list(set(before))), sorted(list(set(after)))
return self._diff_update_and_compare('network', before, after)
return self._diff_generic('network', '--network')

def diffparam_network_aliases(self):
return self._diff_generic('network_aliases', '--network-alias')
Expand Down

0 comments on commit c7a6086

Please sign in to comment.