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

Add options for resource limits to podman_pod #635

Merged
merged 3 commits into from
Sep 8, 2023
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions plugins/module_utils/podman/podman_pod_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,15 @@
recreate=dict(type='bool', default=False),
add_host=dict(type='list', required=False, elements='str'),
cgroup_parent=dict(type='str', required=False),
blkio_weight=dict(type='str', required=False),
blkio_weight_device=dict(type='list', elements='str', required=False),
cpus=dict(type='str', required=False),
cpuset_cpus=dict(type='str', required=False),
cpuset_mems=dict(type='str', required=False),
cpu_shares=dict(type='str', required=False),
device=dict(type='list', elements='str', required=False),
device_read_bps=dict(type='list', elements='str', required=False),
device_write_bps=dict(type='list', elements='str', required=False),
dns=dict(type='list', elements='str', required=False),
dns_opt=dict(type='list', elements='str', required=False),
dns_search=dict(type='list', elements='str', required=False),
Expand All @@ -46,6 +51,8 @@
label=dict(type='dict', required=False),
label_file=dict(type='str', required=False),
mac_address=dict(type='str', required=False),
memory=dict(type='str', required=False),
memory_swap=dict(type='str', required=False),
name=dict(type='str', required=True),
network=dict(type='list', elements='str', required=False),
network_alias=dict(type='list', elements='str', required=False,
Expand Down Expand Up @@ -135,25 +142,52 @@ def addparam_add_host(self, c):
c += ['--add-host', g]
return c

def addparam_blkio_weight(self, c):
self.check_version('--blkio-weight', minv='4.3.0')
return c + ['--blkio-weight', self.params['blkio_weight']]

def addparam_blkio_weight_device(self, c):
self.check_version('--blkio-weight-device', minv='4.3.0')
for dev in self.params['blkio_weight_device']:
c += ['--blkio-weight-device', dev]
return c

def addparam_cgroup_parent(self, c):
return c + ['--cgroup-parent', self.params['cgroup_parent']]

def addparam_cpus(self, c):
self.check_version('--cpus', minv='4.2.0')
return c + ['--cpus', self.params['cpus']]

def addparam_cpuset_cpus(self, c):
self.check_version('--cpus', minv='4.2.0')
return c + ['--cpuset-cpus', self.params['cpuset_cpus']]

def addparam_cpuset_mems(self, c):
self.check_version('--cpuset-mems', minv='4.3.0')
return c + ['--cpuset-mems', self.params['cpuset_mems']]

def addparam_cpu_shares(self, c):
self.check_version('--cpu-shares', minv='4.3.0')
return c + ['--cpu-shares', self.params['cpu_shares']]

def addparam_device(self, c):
for dev in self.params['device']:
c += ['--device', dev]
return c

def addparam_device_read_bps(self, c):
self.check_version('--device-read-bps', minv='4.3.0')
for dev in self.params['device_read_bps']:
c += ['--device-read-bps', dev]
return c

def addparam_device_write_bps(self, c):
self.check_version('--device-write-bps', minv='4.3.0')
for dev in self.params['device_write_bps']:
c += ['--device-write-bps', dev]
return c

def addparam_dns(self, c):
for g in self.params['dns']:
c += ['--dns', g]
Expand Down Expand Up @@ -209,6 +243,14 @@ def addparam_label_file(self, c):
def addparam_mac_address(self, c):
return c + ['--mac-address', self.params['mac_address']]

def addparam_memory(self, c):
self.check_version('--memory', minv='4.2.0')
return c + ['--memory', self.params['memory']]

def addparam_memory_swap(self, c):
self.check_version('--memory-swap', minv='4.3.0')
return c + ['--memory-swap', self.params['memory_swap']]

def addparam_name(self, c):
return c + ['--name', self.params['name']]

Expand Down
40 changes: 40 additions & 0 deletions plugins/modules/podman_pod.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@
type: list
elements: str
required: false
blkio_weight:
description:
- Block IO relative weight. The weight is a value between 10 and 1000.
- This option is not supported on cgroups V1 rootless systems.
type: str
required: false
blkio_weight_device:
description:
- Block IO relative device weight.
type: list
elements: str
required: false
cgroup_parent:
description:
- Path to cgroups under which the cgroup for the pod will be created. If the path
Expand All @@ -61,6 +73,16 @@
Unlike `cpus` this is of type string and parsed as a list of numbers. Format is 0-3,0,1
required: false
type: str
cpuset_mems:
description:
- Memory nodes in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
required: false
type: str
cpu_shares:
description:
- CPU shares (relative weight).
required: false
type: str
device:
description:
- Add a host device to the pod. Optional permissions parameter can be used to specify
Expand All @@ -74,6 +96,12 @@
elements: str
required: false
type: list
device_write_bps:
description:
- Limit write rate (in bytes per second) to a device.
type: list
elements: str
required: false
dns:
description:
- Set custom DNS servers in the /etc/resolv.conf file that will be shared between
Expand Down Expand Up @@ -254,6 +282,18 @@
- Set a static MAC address for the pod's shared network.
type: str
required: false
memory:
description:
- Set memory limit.
- A unit can be b (bytes), k (kibibytes), m (mebibytes), or g (gibibytes).
type: str
required: false
memory_swap:
description:
- Set limit value equal to memory plus swap.
- A unit can be b (bytes), k (kibibytes), m (mebibytes), or g (gibibytes).
type: str
required: false
name:
description:
- Assign a name to the pod.
Expand Down
8 changes: 8 additions & 0 deletions tests/integration/targets/podman_pod/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -925,3 +925,11 @@
args:
apply:
become: true

- name: Test podman_pod for limiting resources
include_tasks: resource-limit.yml
vars:
ansible_python_interpreter: "/usr/bin/python3"
args:
apply:
become: true
38 changes: 38 additions & 0 deletions tests/integration/targets/podman_pod/tasks/resource-limit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
- name: Test podman_pod for limiting resources
block:

- name: Set variables for limiting resources
set_fact:
limit:
blkio_weight: 123
cpuset_mems: '0-1'
cpu_shares: 1024
device_write_bps: ['/dev/zero:1048576']

- name: Create pod for limiting resources
containers.podman.podman_pod:
name: limited-pod
state: created
blkio_weight: "{{ limit.blkio_weight }}"
cpuset_mems: "{{ limit.cpuset_mems }}"
cpu_shares: "{{ limit.cpu_shares }}"
device_write_bps: "{{ limit.device_write_bps }}"

- name: Get information on pod for limiting resources
containers.podman.podman_pod_info:
name: limited-pod
register: pod_info

- name: Check if the result is as expected
assert:
that:
- item.blkio_weight == limit.blkio_weight
- item.cpuset_mems == limit.cpuset_mems
- item.cpu_shares == limit.cpu_shares
with_items: "{{ pod_info.pods }}"

always:
- name: Cleanup
containers.podman.podman_pod:
name: limited-pod
state: absent