Repository: ansible/ansible-navigator (language: python)

Issue:
Allow more mount options
##### ISSUE TYPE

- Bug Report

##### SUMMARY

Not all correct podman mountpoint options are not supported (like `:O`).

##### ANSIBLE-NAVIGATOR VERSION

<!--- Paste, BELOW THIS COMMENT, verbatim output from "ansible-navigator --version" between quotes below -->

```
ansible-navigator 2.1.0
```

##### CONFIGURATION

<!--- Paste verbatim output from `ansible-navigator.yaml` file or
      any other custom setting file defined by `ANSIBLE_NAVIGATOR_CONFIG`
      environment variable below (if present).-->
N/A

##### LOG FILE

```
$ ansible-navigator inventory -i snow.yml --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O
Warning: Issues were found while applying the settings.
   Hint: Command provided: 'inventory -i snow.yml --eev /etc/pki/ca-trust:/etc/pki/ca-trust:O'

  Error: The following execution-environment.volume-mounts entry could not be parsed: /etc/pki/ca-trust:/etc/pki/ca-trust:O (Command
         line). Errors were found: Unrecognized option: 'O', available options include 'Z' and/or 'z'.
   Hint: Try again with format <source-path>:<destination-path>:<options>'. Note: options is optional.

   Note: Configuration failed, using default log file location. (/home/testuser/ansible-navigator.log) Log level set to debug
   Hint: Review the hints and log file to see what went wrong.
```

##### STEPS TO REPRODUCE

Try to use `--eev /etc/pki/ca-trust:/etc/pki/ca-trust:O'`.

##### EXPECTED RESULTS

To pass the mountpoint how it was in version 1.1.0.

##### ACTUAL RESULTS

End up in error.

##### ADDITIONAL INFORMATION

Looks like problem is here: 
https://github.com/ansible/ansible-navigator/blob/fb8fef009444eeca0b275b4da0beba5653813016/src/ansible_navigator/configuration_subsystem/definitions.py#L314


Discussion / hints:
Thanks @jskacel for logging the issue here! We'll look forward adding support for other VolumeMount options. 
This will be super helpful :)

Fix patch:
diff --git a/src/ansible_navigator/configuration_subsystem/definitions.py b/src/ansible_navigator/configuration_subsystem/definitions.py
index 7397cd19c..76c8ba659 100644
--- a/src/ansible_navigator/configuration_subsystem/definitions.py
+++ b/src/ansible_navigator/configuration_subsystem/definitions.py
@@ -320,6 +320,15 @@ class VolumeMountOption(Enum):
     keep in mind that we support both runtimes.
     """
 
+    # Overlay
+    OVERLAY = "O"
+
+    # Read Only
+    ro = "ro"  # pylint: disable=invalid-name
+
+    # Read Write
+    rw = "rw"  # pylint: disable=invalid-name
+
     # Relabel as private
     Z = "Z"
 


Test patch:
diff --git a/tests/unit/configuration_subsystem/post_processors/test_execution_environment_volume_mounts.py b/tests/unit/configuration_subsystem/post_processors/test_execution_environment_volume_mounts.py
index a22a9d34f..a2c6f7528 100644
--- a/tests/unit/configuration_subsystem/post_processors/test_execution_environment_volume_mounts.py
+++ b/tests/unit/configuration_subsystem/post_processors/test_execution_environment_volume_mounts.py
@@ -60,6 +60,21 @@ def __str__(self):
         expected=["/tmp:/tmp:Z"],
         source=C.USER_CLI,
     ),
+    Scenario(
+        current=[["/tmp:/tmp:O"]],
+        expected=["/tmp:/tmp:O"],
+        source=C.USER_CLI,
+    ),
+    Scenario(
+        current=[["/tmp:/tmp:ro"]],
+        expected=["/tmp:/tmp:ro"],
+        source=C.USER_CLI,
+    ),
+    Scenario(
+        current=[["/tmp:/tmp:rw"]],
+        expected=["/tmp:/tmp:rw"],
+        source=C.USER_CLI,
+    ),
     Scenario(
         current=[["/tmp:/tmp:Y"]],
         exit_message_substr="Unrecognized option: 'Y'",
@@ -130,6 +145,11 @@ def __str__(self):
         expected=["/tmp:/tmp:Z"],
         source=C.USER_CFG,
     ),
+    Scenario(
+        current=[{"src": "/tmp", "dest": "/tmp", "options": "O"}],
+        expected=["/tmp:/tmp:O"],
+        source=C.USER_CFG,
+    ),
     Scenario(
         current=[{"src": "~", "dest": "/tmp", "options": "Z"}],
         expected=[f"{Path.home()}:/tmp:Z"],
@@ -159,6 +179,16 @@ def __str__(self):
         expected=["/tmp:/tmp:Z,z"],
         source=C.USER_CFG,
     ),
+    Scenario(
+        current=[{"src": "/tmp", "dest": "/tmp", "options": "O,z"}],
+        expected=["/tmp:/tmp:O,z"],
+        source=C.USER_CFG,
+    ),
+    Scenario(
+        current=[{"src": "/tmp", "dest": "/tmp", "options": "0,z"}],
+        exit_message_substr="Unrecognized option: '0'",
+        source=C.USER_CFG,
+    ),
     Scenario(
         current=[{"src": "/tmp", "dest": "/tmp", "options": "Z,y"}],
         exit_message_substr="Unrecognized option: 'y'",