mirror of
https://github.com/containers/podman-compose.git
synced 2025-02-16 18:31:34 +01:00
apply formating and add pylintrc
This commit is contained in:
parent
844c23d553
commit
4733c7ef94
13
.pylintrc
Normal file
13
.pylintrc
Normal file
@ -0,0 +1,13 @@
|
||||
[MESSAGES CONTROL]
|
||||
disable=W0614,C0410,C0321,C0111,I0011,C0103
|
||||
# allow _ for ignored variables
|
||||
# allow generic names like a,b,c and i,j,k,l,m,n and x,y,z
|
||||
# allow k,v for key/value
|
||||
# allow e for exceptions, it for iterator
|
||||
# allow w,h for width, height
|
||||
# allow op for operation/operator/opcode
|
||||
# allow t, t0, t1, t2, and t3 for time
|
||||
# allow dt for delta time
|
||||
# allow db for database
|
||||
# allow ls for list
|
||||
good-names=_,a,b,c,dt,db,e,f,fn,fd,i,j,k,v,kv,kw,l,m,n,ls,t,t0,t1,t2,t3,w,h,x,y,z,it,op
|
@ -21,12 +21,17 @@ import yaml
|
||||
|
||||
# helpers
|
||||
|
||||
|
||||
def try_int(i, fallback=None):
|
||||
try: return int(i)
|
||||
except ValueError: pass
|
||||
except TypeError: pass
|
||||
try:
|
||||
return int(i)
|
||||
except ValueError:
|
||||
pass
|
||||
except TypeError:
|
||||
pass
|
||||
return fallback
|
||||
|
||||
|
||||
def norm_as_list(src):
|
||||
"""
|
||||
given a dictionary {key1:value1, key2: None} or list
|
||||
@ -42,6 +47,7 @@ def norm_as_list(src):
|
||||
dst = [src]
|
||||
return dst
|
||||
|
||||
|
||||
def norm_as_dict(src):
|
||||
"""
|
||||
given a list ["key1=value1", "key2"]
|
||||
@ -80,6 +86,7 @@ def adj_hosts(services, cnt, dst = "127.0.0.1"):
|
||||
extra_hosts.append("{}:{}".format(alias, dst))
|
||||
cnt["extra_hosts"] = extra_hosts
|
||||
|
||||
|
||||
def move_list(dst, containers, key):
|
||||
"""
|
||||
move key (like port forwarding) from containers to dst (a pod or a infra container)
|
||||
@ -90,7 +97,9 @@ def move_list(dst, containers, key):
|
||||
if a0:
|
||||
a.update(a0)
|
||||
del cnt[key]
|
||||
if a: dst[key] = list(a)
|
||||
if a:
|
||||
dst[key] = list(a)
|
||||
|
||||
|
||||
def move_port_fw(dst, containers):
|
||||
"""
|
||||
@ -98,6 +107,7 @@ def move_port_fw(dst, containers):
|
||||
"""
|
||||
move_list(dst, containers, "ports")
|
||||
|
||||
|
||||
def move_extra_hosts(dst, containers):
|
||||
"""
|
||||
move port forwarding from containers to dst (a pod or a infra container)
|
||||
@ -108,10 +118,13 @@ def move_extra_hosts(dst, containers):
|
||||
# transformations
|
||||
|
||||
transformations = {}
|
||||
|
||||
|
||||
def trans(func):
|
||||
transformations[func.__name__.replace("tr_", "")] = func
|
||||
return func
|
||||
|
||||
|
||||
@trans
|
||||
def tr_identity(project_name, services, given_containers):
|
||||
containers = []
|
||||
@ -119,6 +132,7 @@ def tr_identity(project_name, services, given_containers):
|
||||
containers.append(dict(cnt))
|
||||
return [], containers
|
||||
|
||||
|
||||
@trans
|
||||
def tr_publishall(project_name, services, given_containers):
|
||||
containers = []
|
||||
@ -129,6 +143,7 @@ def tr_publishall(project_name, services, given_containers):
|
||||
containers.append(cnt)
|
||||
return [], containers
|
||||
|
||||
|
||||
@trans
|
||||
def tr_hostnet(project_name, services, given_containers):
|
||||
containers = []
|
||||
@ -139,6 +154,7 @@ def tr_hostnet(project_name, services, given_containers):
|
||||
containers.append(cnt)
|
||||
return [], containers
|
||||
|
||||
|
||||
@trans
|
||||
def tr_cntnet(project_name, services, given_containers):
|
||||
containers = []
|
||||
@ -154,13 +170,15 @@ def tr_cntnet(project_name, services, given_containers):
|
||||
cnt["depends"] = deps
|
||||
# adjust hosts to point to localhost, TODO: adjust host env
|
||||
adj_hosts(services, cnt, '127.0.0.1')
|
||||
if "hostname" in cnt: del cnt["hostname"]
|
||||
if "hostname" in cnt:
|
||||
del cnt["hostname"]
|
||||
containers.append(cnt)
|
||||
move_port_fw(infra, containers)
|
||||
move_extra_hosts(infra, containers)
|
||||
containers.insert(0, infra)
|
||||
return [], containers
|
||||
|
||||
|
||||
@trans
|
||||
def tr_1pod(project_name, services, given_containers):
|
||||
"""
|
||||
@ -178,6 +196,7 @@ def tr_1pod(project_name, services, given_containers):
|
||||
containers.append(cnt)
|
||||
return [pod], containers
|
||||
|
||||
|
||||
@trans
|
||||
def tr_1podfw(project_name, services, given_containers):
|
||||
pods, containers = tr_1pod(project_name, services, given_containers)
|
||||
@ -185,19 +204,24 @@ def tr_1podfw(project_name, services, given_containers):
|
||||
move_port_fw(pod, containers)
|
||||
return pods, containers
|
||||
|
||||
|
||||
def down(project_name, dirname, pods, containers, dry_run, podman_path):
|
||||
for cnt in containers:
|
||||
cmd = """{} stop -t=1 '{name}'""".format(podman_path, **cnt)
|
||||
print(cmd)
|
||||
if dry_run == False: subprocess.Popen(cmd, shell = True).wait()
|
||||
if dry_run == False:
|
||||
subprocess.Popen(cmd, shell=True).wait()
|
||||
for cnt in containers:
|
||||
cmd = """{} rm '{name}'""".format(podman_path, **cnt)
|
||||
print(cmd)
|
||||
if dry_run == False: subprocess.Popen(cmd, shell = True).wait()
|
||||
if dry_run == False:
|
||||
subprocess.Popen(cmd, shell=True).wait()
|
||||
for pod in pods:
|
||||
cmd = """{} pod rm '{name}'""".format(podman_path, **pod)
|
||||
print(cmd)
|
||||
if dry_run == False: subprocess.Popen(cmd, shell = True).wait()
|
||||
if dry_run == False:
|
||||
subprocess.Popen(cmd, shell=True).wait()
|
||||
|
||||
|
||||
def container_to_args(cnt, dirname, podman_path):
|
||||
pod = cnt.get('pod') or ''
|
||||
@ -264,32 +288,41 @@ def container_to_args(cnt, dirname, podman_path):
|
||||
args.extend(command)
|
||||
return args
|
||||
|
||||
|
||||
def rec_deps(services, container_by_name, cnt, init_service):
|
||||
deps = cnt["_deps"]
|
||||
for dep in deps:
|
||||
dep_cnts = services.get(dep)
|
||||
if not dep_cnts: continue
|
||||
if not dep_cnts:
|
||||
continue
|
||||
dep_cnt = container_by_name.get(dep_cnts[0])
|
||||
if dep_cnt:
|
||||
# TODO: avoid creating loops, A->B->A
|
||||
if init_service and init_service in dep_cnt["_deps"]: continue
|
||||
new_deps = rec_deps(services, container_by_name, dep_cnt, init_service)
|
||||
if init_service and init_service in dep_cnt["_deps"]:
|
||||
continue
|
||||
new_deps = rec_deps(services, container_by_name,
|
||||
dep_cnt, init_service)
|
||||
deps.update(new_deps)
|
||||
return deps
|
||||
|
||||
|
||||
def flat_deps(services, container_by_name):
|
||||
for name, cnt in container_by_name.items():
|
||||
deps = set([(c.split(":")[0] if ":" in c else c) for c in cnt.get("links", []) ])
|
||||
deps = set([(c.split(":")[0] if ":" in c else c)
|
||||
for c in cnt.get("links", [])])
|
||||
deps.update(cnt.get("depends", []))
|
||||
cnt["_deps"] = deps
|
||||
for name, cnt in container_by_name.items():
|
||||
rec_deps(services, container_by_name, cnt, cnt.get('_service'))
|
||||
|
||||
|
||||
def up(project_name, dirname, pods, containers, no_cleanup, dry_run, podman_path):
|
||||
if dry_run == False: os.chdir(dirname)
|
||||
if dry_run == False:
|
||||
os.chdir(dirname)
|
||||
|
||||
# no need remove them if they have same hash label
|
||||
if no_cleanup == False: down(project_name, dirname, pods, containers, dry_run, podman_path)
|
||||
if no_cleanup == False:
|
||||
down(project_name, dirname, pods, containers, dry_run, podman_path)
|
||||
|
||||
for pod in pods:
|
||||
args = [
|
||||
@ -314,7 +347,9 @@ def up(project_name, dirname, pods, containers, no_cleanup, dry_run, podman_path
|
||||
if dry_run == False:
|
||||
subprocess.Popen(args).wait()
|
||||
# subprocess.Popen(args, bufsize = 0, executable = None, stdin = None, stdout = None, stderr = None, preexec_fn = None, close_fds = False, shell = False, cwd = None, env = None, universal_newlines = False, startupinfo = None, creationflags = 0)
|
||||
if dry_run == False: time.sleep(1)
|
||||
if dry_run == False:
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def main(command, filename, project_name, no_ansi, no_cleanup, dry_run, transform_policy, podman_path, host_env=None):
|
||||
filename = os.path.realpath(filename)
|
||||
@ -326,7 +361,9 @@ def main(command, filename, project_name, no_ansi, no_cleanup, dry_run, transfor
|
||||
podman_path = os.path.realpath(podman_path)
|
||||
else:
|
||||
# this also works if podman hasn't been installed now
|
||||
if dry_run == False: raise IOError("Binary {} has not been found.".format(podman_path))
|
||||
if dry_run == False:
|
||||
raise IOError(
|
||||
"Binary {} has not been found.".format(podman_path))
|
||||
|
||||
if not project_name:
|
||||
project_name = dir_basename
|
||||
@ -361,7 +398,8 @@ def main(command, filename, project_name, no_ansi, no_cleanup, dry_run, transfor
|
||||
)
|
||||
container_names_by_service[service_name].append(name)
|
||||
# print(service_name,service_desc)
|
||||
cnt = dict(name = name, num = num, service_name = service_name, **service_desc)
|
||||
cnt = dict(name=name, num=num,
|
||||
service_name=service_name, **service_desc)
|
||||
labels = norm_as_list(cnt.get('labels'))
|
||||
labels.extend(podman_compose_labels)
|
||||
labels.extend([
|
||||
@ -378,15 +416,18 @@ def main(command, filename, project_name, no_ansi, no_cleanup, dry_run, transfor
|
||||
given_containers.sort(key=lambda c: len(c.get('_deps') or []))
|
||||
#print("sorted:", [c["name"] for c in given_containers])
|
||||
tr = transformations[transform_policy]
|
||||
pods, containers = tr(project_name, container_names_by_service, given_containers)
|
||||
pods, containers = tr(
|
||||
project_name, container_names_by_service, given_containers)
|
||||
cmd = command[0]
|
||||
if cmd == "up":
|
||||
up(project_name, dirname, pods, containers, no_cleanup, dry_run, podman_path)
|
||||
up(project_name, dirname, pods, containers,
|
||||
no_cleanup, dry_run, podman_path)
|
||||
elif cmd == "down":
|
||||
down(project_name, dirname, pods, containers, dry_run, podman_path)
|
||||
else:
|
||||
raise NotImplementedError("command {} is not implemented".format(cmd))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('command', metavar='command',
|
||||
|
Loading…
Reference in New Issue
Block a user