def execute(self, repository, image_name, image_tag, base_image, dockerfile, publish, env): full_image_name = get_image_full(repository, image_name, image_tag) self.dockerfile.write(env, dockerfile=dockerfile, base_image=base_image) self.build(full_image_name) if publish: self.publish(full_image_name)
def test_compile_ast(trainer): trainer.fill_image_name_and_tag() svc, env = trainer.compile_ast() assert env == None assert len(svc['jobs']) == 1 job = svc['jobs'][0] assert len(job['containers']) == 1 assert job['containers'][0]['image'] == get_image_full( REPO_NAME, IMAGE_NAME, IMAGE_TAG)
def add_jobs(self, svc, count, repository, image_name, image_tag, volumes, volume_mounts): full_image_name = get_image_full(repository, image_name, image_tag) svc['jobs'] = [{ "name": image_name, # TODO should parallelism and completion be surfaced ? How would that be implemented in all backends "parallelism": count, "completion": count, "containers": [{ "image": full_image_name, "volumeMounts": volume_mounts }], "volumes": volumes }] return svc
def test_add_training(architecture, job_count): svc = {} repo = 'test' image_name = 'testimage' image_tag = '1.0' full_image_name = get_image_full(repo, image_name, image_tag) exp = { 'jobs': [{ 'name': image_name, 'parallelism': job_count, 'completion': job_count, 'containers': [{ 'image': full_image_name, 'volumeMounts': [] }], 'volumes': [] }] } assert exp == architecture.add_jobs(svc, job_count, repo, image_name, image_tag, [], [])
def add_jobs(self, svc, count, repository, image_name, image_tag, volumes, volume_mounts): full_image_name = get_image_full(repository, image_name, image_tag) tfjobs = [] for ix in range(count): tfjobs.append({ "name": "{}-{}-{}".format(image_name, image_tag, ix), "replicaSpecs": [{ "replicaType": "MASTER", "replicas": 1, "containers": [{ "image": full_image_name, "volumeMounts": volume_mounts }], "volumes": volumes }] }) svc["tfJobs"] = tfjobs return svc
def test_get_image_full(): img = get_image_full(REPO_NAME, IMAGE_NAME, IMAGE_TAG) assert img == '{}/{}:{}'.format(REPO_NAME, IMAGE_NAME, IMAGE_TAG)
def fill_image_name_and_tag(self): if self.image_tag is None: self.image_tag = get_unique_tag() self.full_image_name = get_image_full(self.repository, self.image_name, self.image_tag)