generate: container: Create new ContainerOptions class for read_only and Co
Signed-off-by: Enno Tensing <tenno@suij.in>
This commit is contained in:
parent
e4ec47401e
commit
147e5630aa
1 changed files with 63 additions and 27 deletions
|
@ -608,17 +608,69 @@ class Dns:
|
||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class ContainerOptions:
|
||||||
|
"""Container-Meta settings."""
|
||||||
|
|
||||||
|
privileged: bool = False
|
||||||
|
read_only: bool = False
|
||||||
|
replace: bool = False
|
||||||
|
restart: str = "no"
|
||||||
|
pull_policy: str = "always"
|
||||||
|
timezone: str = "local"
|
||||||
|
is_valid: bool = False
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_json(cls, val: ConfigValue, logger: Log) -> Self:
|
||||||
|
"""Create from JSON."""
|
||||||
|
if val is None:
|
||||||
|
# Should not happen!
|
||||||
|
return cls()
|
||||||
|
if not isinstance(val, dict):
|
||||||
|
logger.log_error("Container config is invalid!")
|
||||||
|
return cls()
|
||||||
|
|
||||||
|
privileged = maybe_or(val, "privileged", _or=False)
|
||||||
|
read_only = maybe_or(val, "read_only", _or=False)
|
||||||
|
replace = maybe_or(val, "replace", _or=False)
|
||||||
|
restart = maybe_or(val, "restart", "no")
|
||||||
|
pull_policy = maybe_or(val, "pull_policy", "always")
|
||||||
|
timezone = maybe_or(val, "timezone", "local")
|
||||||
|
|
||||||
|
return cls(
|
||||||
|
privileged,
|
||||||
|
read_only,
|
||||||
|
replace,
|
||||||
|
restart,
|
||||||
|
pull_policy,
|
||||||
|
timezone,
|
||||||
|
is_valid=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
def command(self) -> str:
|
||||||
|
"""Option for podman conainter create."""
|
||||||
|
cmd = ""
|
||||||
|
if self.privileged:
|
||||||
|
cmd += "\t--privileged \\\n"
|
||||||
|
if self.read_only:
|
||||||
|
cmd += "\t--read-only \\\n"
|
||||||
|
if self.replace:
|
||||||
|
cmd += "\t--replace \\\n"
|
||||||
|
if self.restart != "":
|
||||||
|
cmd += f"\t--restart={self.restart} \\\n"
|
||||||
|
if self.pull_policy != "":
|
||||||
|
cmd += f"\t--pull-policy={self.pull_policy} \\\n"
|
||||||
|
if self.timezone != "":
|
||||||
|
cmd += f"\t--tz={self.timezone} \\\n"
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
class Container:
|
class Container:
|
||||||
"""Container."""
|
"""Container."""
|
||||||
|
|
||||||
name: str
|
name: str
|
||||||
image: Image
|
image: Image
|
||||||
privileged: bool
|
ct_opts: ContainerOptions
|
||||||
read_only: bool
|
|
||||||
replace: bool
|
|
||||||
restart: str
|
|
||||||
pull_policy: str
|
|
||||||
timezone: str
|
|
||||||
network: Network
|
network: Network
|
||||||
dns: Dns
|
dns: Dns
|
||||||
ports: Ports
|
ports: Ports
|
||||||
|
@ -640,12 +692,9 @@ class Container:
|
||||||
if image is None:
|
if image is None:
|
||||||
logger.log_error("No image set, aborting!")
|
logger.log_error("No image set, aborting!")
|
||||||
return
|
return
|
||||||
privileged = maybe(json, "privileged")
|
ct_opts = ContainerOptions.from_json(json, logger)
|
||||||
read_only = maybe(json, "read_only")
|
if not ct_opts.is_valid:
|
||||||
replace = maybe(json, "replace")
|
return
|
||||||
pull_policy = maybe_or(json, "pull_policy", "always")
|
|
||||||
restart = maybe_or(json, "restart", "no")
|
|
||||||
timezone = maybe_or(json, "timezone", "local")
|
|
||||||
network = maybe(json, "network")
|
network = maybe(json, "network")
|
||||||
dns = maybe(json, "dns")
|
dns = maybe(json, "dns")
|
||||||
ports = maybe(json, "ports")
|
ports = maybe(json, "ports")
|
||||||
|
@ -656,12 +705,7 @@ class Container:
|
||||||
accounting = maybe(json, "accounting")
|
accounting = maybe(json, "accounting")
|
||||||
self.name = str(name)
|
self.name = str(name)
|
||||||
self.image = Image.from_json(image, logger)
|
self.image = Image.from_json(image, logger)
|
||||||
self.privileged = privileged is not None and bool(privileged)
|
self.ct_opts = ct_opts
|
||||||
self.read_only = read_only is not None and bool(read_only)
|
|
||||||
self.replace = replace is not None and bool(replace)
|
|
||||||
self.pull_policy = str(pull_policy)
|
|
||||||
self.restart = str(restart)
|
|
||||||
self.timezone = str(timezone)
|
|
||||||
self.network = Network.from_json(network, logger)
|
self.network = Network.from_json(network, logger)
|
||||||
self.dns = Dns.from_json(dns, logger)
|
self.dns = Dns.from_json(dns, logger)
|
||||||
self.ports = Ports.from_json(ports, logger)
|
self.ports = Ports.from_json(ports, logger)
|
||||||
|
@ -702,15 +746,7 @@ class Container:
|
||||||
cmd = f"# Create container {self.name}\n"
|
cmd = f"# Create container {self.name}\n"
|
||||||
cmd += "podman container create \\\n"
|
cmd += "podman container create \\\n"
|
||||||
cmd += f"\t--name={self.name} \\\n"
|
cmd += f"\t--name={self.name} \\\n"
|
||||||
if self.privileged:
|
cmd += f"{self.ct_opts.command()}"
|
||||||
cmd += "\t--privileged \\\n"
|
|
||||||
if self.replace:
|
|
||||||
cmd += "\t--replace \\\n"
|
|
||||||
if self.read_only:
|
|
||||||
cmd += "\t--read-only \\\n"
|
|
||||||
cmd += f"\t--restart={self.restart} \\\n"
|
|
||||||
cmd += f"\t--pull={self.pull_policy} \\\n"
|
|
||||||
cmd += f"\t--tz={self.timezone} \\\n"
|
|
||||||
cmd += f"{self.network.command()}"
|
cmd += f"{self.network.command()}"
|
||||||
cmd += f"{self.dns.command()}"
|
cmd += f"{self.dns.command()}"
|
||||||
cmd += f"{self.ports.command()}"
|
cmd += f"{self.ports.command()}"
|
||||||
|
|
Loading…
Add table
Reference in a new issue