mirror of https://github.com/containers/podman.git
				
				
				
			Merge pull request #20363 from ygalblum/quadlet-kube-oneshot-test
System Test - Quadlet kube oneshot
This commit is contained in:
		
						commit
						5853e2bee9
					
				|  | @ -67,6 +67,9 @@ Quadlet will set it to `notify` for `.container` and `.kube` files and to `onesh | ||||||
| However, `Type` may be explicitly set to `oneshot` for `.container` and `.kube` files when no containers are expected | However, `Type` may be explicitly set to `oneshot` for `.container` and `.kube` files when no containers are expected | ||||||
| to run once `podman` exits. | to run once `podman` exits. | ||||||
| 
 | 
 | ||||||
|  | When setting `Type=oneshot`, it is recommended to also set `RemainAfterExit=yes` to prevent the service state | ||||||
|  | from becoming `inactive (dead)` | ||||||
|  | 
 | ||||||
| Examples for such cases: | Examples for such cases: | ||||||
| - `.container` file with an image that exits after their entrypoint has finished | - `.container` file with an image that exits after their entrypoint has finished | ||||||
| `` | `` | ||||||
|  |  | ||||||
|  | @ -1139,4 +1139,111 @@ EOF | ||||||
|     run_podman image rm --ignore $image_for_test |     run_podman image rm --ignore $image_for_test | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @test "quadlet - kube oneshot" { | ||||||
|  |     local quadlet_tmpdir=$PODMAN_TMPDIR/quadlets | ||||||
|  |     local test_random_string=$(random_string) | ||||||
|  | 
 | ||||||
|  |     local quadlet_kube_volume_name=test-volume_$test_random_string | ||||||
|  |     local quadlet_kube_volume_yaml_file=$PODMAN_TMPDIR/volume_$test_random_string.yaml | ||||||
|  |     cat > $quadlet_kube_volume_yaml_file <<EOF | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: PersistentVolumeClaim | ||||||
|  | metadata: | ||||||
|  |   name: $quadlet_kube_volume_name | ||||||
|  | spec: | ||||||
|  |   accessModes: | ||||||
|  |   - ReadWriteOnce | ||||||
|  |   resources: | ||||||
|  |     requests: | ||||||
|  |       storage: 1Gi | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  |     local quadlet_kube_volume_unit_file=$PODMAN_TMPDIR/volume_$test_random_string.kube | ||||||
|  |     cat > $quadlet_kube_volume_unit_file <<EOF | ||||||
|  | [Kube] | ||||||
|  | Yaml=$quadlet_kube_volume_yaml_file | ||||||
|  | 
 | ||||||
|  | [Service] | ||||||
|  | Type=oneshot | ||||||
|  | RemainAfterExit=yes | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  |     local pod_name="test_pod_$test_random_string" | ||||||
|  |     local container_name="test" | ||||||
|  |     local quadlet_kube_pod_yaml_file=$PODMAN_TMPDIR/pod_$test_random_string.yaml | ||||||
|  |     cat > $quadlet_kube_pod_yaml_file <<EOF | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Pod | ||||||
|  | metadata: | ||||||
|  |   labels: | ||||||
|  |     app: test | ||||||
|  |   name: $pod_name | ||||||
|  | spec: | ||||||
|  |   containers: | ||||||
|  |   - command: | ||||||
|  |     - "sh" | ||||||
|  |     args: | ||||||
|  |     - "-c" | ||||||
|  |     - "echo STARTED CONTAINER; top -b" | ||||||
|  |     image: $IMAGE | ||||||
|  |     name: $container_name | ||||||
|  |     volumeMounts: | ||||||
|  |     - name: storage | ||||||
|  |       mountPath: /mnt/storage | ||||||
|  |   volumes: | ||||||
|  |   - name: storage | ||||||
|  |     persistentVolumeClaim: | ||||||
|  |       claimName: $quadlet_kube_volume_name | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  |     # Use the same directory for all quadlet files to make sure later steps access previous ones | ||||||
|  |     mkdir $quadlet_tmpdir | ||||||
|  | 
 | ||||||
|  |     # Have quadlet create the systemd unit file for the kube based volume unit | ||||||
|  |     run_quadlet "$quadlet_kube_volume_unit_file" "$quadlet_tmpdir" | ||||||
|  |     # Save the volume service name since the variable will be overwritten | ||||||
|  |     local volume_service=$QUADLET_SERVICE_NAME | ||||||
|  | 
 | ||||||
|  |     # Volume should not exist | ||||||
|  |     run_podman 1 volume exists ${quadlet_kube_volume_name} | ||||||
|  | 
 | ||||||
|  |     local quadlet_kube_pod_unit_file=$PODMAN_TMPDIR/pod_$test_random_string.kube | ||||||
|  |     cat > $quadlet_kube_pod_unit_file <<EOF | ||||||
|  | [Kube] | ||||||
|  | Yaml=$quadlet_kube_pod_yaml_file | ||||||
|  | 
 | ||||||
|  | [Unit] | ||||||
|  | Requires=$volume_service | ||||||
|  | After=$volume_service | ||||||
|  | EOF | ||||||
|  | 
 | ||||||
|  |     # Have quadlet create the systemd unit file for the pod unit | ||||||
|  |     run_quadlet "$quadlet_kube_pod_unit_file" "$quadlet_tmpdir" | ||||||
|  |     local pod_service=$QUADLET_SERVICE_NAME | ||||||
|  | 
 | ||||||
|  |     service_setup $pod_service | ||||||
|  | 
 | ||||||
|  |     # Volume system unit should be active | ||||||
|  |     run systemctl show --property=ActiveState "$volume_service" | ||||||
|  |     assert "$output" = "ActiveState=active" \ | ||||||
|  |            "quadlet - kube oneshot: volume should be active via dependency but is not" | ||||||
|  | 
 | ||||||
|  |     # Volume should exist | ||||||
|  |     run_podman volume exists ${quadlet_kube_volume_name} | ||||||
|  | 
 | ||||||
|  |     run_podman container inspect --format "{{(index .Mounts 0).Type}}" $pod_name-$container_name | ||||||
|  |     assert "$output" = "volume" \ | ||||||
|  |            "quadlet - kube oneshot: volume .Type" | ||||||
|  | 
 | ||||||
|  |     run_podman container inspect --format "{{(index .Mounts 0).Name}}" $pod_name-$container_name | ||||||
|  |     assert "$output" = "$quadlet_kube_volume_name" \ | ||||||
|  |            "quadlet - kube oneshot: volume .Name" | ||||||
|  | 
 | ||||||
|  |     # Shutdown the service and remove the volume | ||||||
|  |     service_cleanup $pod_service inactive | ||||||
|  |     run_podman volume rm $quadlet_kube_volume_name | ||||||
|  |     run_podman rmi --ignore $(pause_image) | ||||||
|  | } | ||||||
|  | 
 | ||||||
| # vim: filetype=sh | # vim: filetype=sh | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue