From 6e3d16458cb3b406fb6ca27d22497a523377a5f7 Mon Sep 17 00:00:00 2001 From: azw Date: Fri, 4 Mar 2022 18:57:49 +0800 Subject: [PATCH] 1 --- deploy_docker.py | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 deploy_docker.py diff --git a/deploy_docker.py b/deploy_docker.py new file mode 100644 index 0000000..36f70b0 --- /dev/null +++ b/deploy_docker.py @@ -0,0 +1,95 @@ +# -*- coding: utf-8 -*- +# in prod-salt-01 ,run start ,bound,remove docker ,get gz file from 10.10.2.3 +from fabric import Connection +import os +import pdb + + +#todo :remove dock image && docker +class DeployDocker: + + def __init__(self) -> None: + self.target = os.path.abspath('.').split('/')[-1].strip() + self.image_name = f"{self.target.split('.')[0]}:{'.'.join(self.target.split('.')[1:])}" + self.hostip = '10.10.2.3' + self.remote_base_dir = "/tmp/miles" + self.base_image = "k_ub20:v1" + self.remote_dir = f"{self.remote_base_dir}/{self.target}" + self.user = "root" + self.docker_files = "Dockerfile" + + def _check_result(self, data): + if data.exited == 0: + print(f"run {data.command} Success!\n{data.stdout.strip()}") + return True + else: + print( + f"run {data.command} Failed!\n{data.stdout.strip()}\t{data.stderr.strip()}" + ) + return False + + def _pre_start(self): + sync_cmd = f"rsync -av ../{self.target} root@{self.hostip}:{self.remote_base_dir}" + with Connection(host=self.hostip, user=self.user) as c: + result = c.local(sync_cmd) + assert result.exited == 0 + return True + + def _build_docker(self): + with Connection(host=self.hostip, user=self.user) as c: + + cmd = f"cd {self.remote_dir} && docker build -t {self.image_name} -f {self.docker_files} ." + result = c.run(cmd) + assert result.exited == 0 + #self._check_result(result) + return True + + def _run_docker(self): + with Connection(host=self.hostip, user=self.user) as c: + #pdb.set_trace() + run_docker = f"docker run -d {self.image_name} bash" + result = c.run(run_docker) + assert result.exited == 0 + find_docker = f"docker ps -a --filter ancestor={self.image_name}" + result_find = c.run(find_docker).stdout.strip() + container_id = result_find.split('\n')[-1].split(" ")[0] + assert container_id + get_gz_cmd = f"docker cp {container_id}:/app/target/app.tar.gz {self.remote_dir}/app.tar.gz" + result_get_docker = c.run(get_gz_cmd) + assert result_get_docker.exited == 0 + remote_file = f"{self.remote_dir}/app.tar.gz" + local_file = f"./target/{self.target}.tar.gz" + result_get_remote = c.local( + f"rsync root@{self.hostip}:/{remote_file} {local_file}") + assert result_get_remote.exited == 0 + self._clean() + return True + + def _clean(self): + with Connection(host=self.hostip, user=self.user) as c: + find_docker = f"docker ps -a --filter ancestor={self.image_name}" + result_find = c.run(find_docker).stdout.strip() + container_id = result_find.split('\n')[-1].split(" ")[0] + assert container_id + remove_docker = f"docker stop {container_id} && docker rm {container_id} &&docker image rm {self.image_name}" + return True + + def _start(self): + if self._build_docker(): + if self._run_docker(): + return True + else: + self._clean() + return False + else: + return False + + def run(self): + if self._pre_start(): + if self._start(): + return True + + +if __name__ == "__main__": + dd = DeployDocker() + dd.run() \ No newline at end of file