public String containerImage() { return job.getImage(); }
errors.addAll(validateJobImage(job.getImage())); errors.addAll(validateJobHostName(job.getHostname()));
} else { out.printf("Id: %s%n", job.getId()); out.printf("Image: %s%n", job.getImage()); out.printf("Created: %s%n", job.getCreated() == null ? "" : DATE_FORMATTER.format(new Date(job.getCreated())));
/** * Create docker container configuration for a job. * * @param imageInfo The ImageInfo object. * * @return The ContainerConfig object. */ public ContainerConfig containerConfig(final ImageInfo imageInfo, final Optional<String> dockerVersion) { final ContainerConfig.Builder builder = ContainerConfig.builder(); builder.image(job.getImage()); builder.cmd(job.getCommand()); builder.hostname(job.getHostname()); builder.env(containerEnvStrings()); builder.exposedPorts(containerExposedPorts()); builder.volumes(volumes().keySet()); builder.labels(job.getLabels()); for (final ContainerDecorator decorator : containerDecorators) { decorator.decorateContainerConfig(job, imageInfo, dockerVersion, builder); } return builder.build(); }
assertEquals(BUSYBOX_WITH_DIGEST, matchJobs.get(jobId).getImage());
public String containerImage() { return job.getImage(); }
static String getJobDescription(final Job job) { final String shortHash = job.getId().getHash().substring(0, 7); return String.format("%s (Job %s)", job.getImage(), shortHash); }
void verifyHealthy() throws AssertionError { log.debug("Checking health of {}", job.getImage()); final JobStatus status = Futures.getUnchecked(client.jobStatus(job.getId())); if (status == null) { return; } for (Map.Entry<String, TaskStatus> entry : status.getTaskStatuses().entrySet()) { verifyHealthy(entry.getKey(), entry.getValue()); } }
private void verifyHealthy(final String host, final TaskStatus status) { log.debug("Checking health of {} on {}", job.getImage(), host); final TaskStatus.State state = status.getState(); if (state == TaskStatus.State.FAILED || state == TaskStatus.State.EXITED || state == TaskStatus.State.STOPPED) { // Throw exception which should stop the test dead in it's tracks String stateString = state.toString(); if (status.getThrottled() != ThrottleState.NO) { stateString += format("(%s)", status.getThrottled()); } throw new AssertionError(format( "Unexpected job state %s for job %s with image %s on host %s. Check helios agent " + "logs for details.", stateString, job.getId().toShortString(), job.getImage(), host)); } }
@Override public TemporaryJob deploy(final Job job, final List<String> hosts, final Set<String> waitPorts, final Prober prober, final TemporaryJobReports.ReportWriter reportWriter) { if (!readyToDeploy) { fail("deploy() must be called in a @Before or in the test method, or perhaps you forgot" + " to put @Rule before TemporaryJobs"); } if (hosts.isEmpty()) { fail("at least one host must be explicitly specified, or deploy() must be called with " + "no arguments to automatically select a host"); } log.info("Deploying {} to {}", job.getImage(), Joiner.on(", ").skipNulls().join(hosts)); final TemporaryJob temporaryJob = new TemporaryJob(client, prober, reportWriter, job, hosts, waitPorts, jobDeployedMessageFormat, deployTimeoutMillis); jobs.add(temporaryJob); temporaryJob.deploy(); return temporaryJob; }
@Override public TaskStatus call() throws Exception { final JobStatus status = Futures.getUnchecked(client.jobStatus(job.getId())); if (status == null) { log.debug("Job status not available"); return null; } final TaskStatus taskStatus = status.getTaskStatuses().get(host); if (taskStatus == null) { log.debug("Task status not available on {}", host); return null; } if (!messagePrinted.get() && !isNullOrEmpty(jobDeployedMessageFormat) && !isNullOrEmpty(taskStatus.getContainerId())) { outputDeployedMessage(host, taskStatus.getContainerId()); messagePrinted.set(true); } verifyHealthy(host, taskStatus); final TaskStatus.State state = taskStatus.getState(); log.info("Job state of {}: {}", job.getImage(), state); if (state == TaskStatus.State.RUNNING) { return taskStatus; } return null; } }
@Override protected int runWithJobId(final Namespace options, final HeliosClient client, final PrintStream out, final boolean json, final JobId jobId, final BufferedReader stdin) throws ExecutionException, InterruptedException { final Map<JobId, Job> jobs = client.jobs(jobId.toString()).get(); if (jobs.size() == 0) { out.printf("Unknown job: %s%n", jobId); return 1; } final Job job = Iterables.getOnlyElement(jobs.values()); if (json) { out.println(Json.asPrettyStringUnchecked(job)); } else { out.printf("Id: %s%n", job.getId()); out.printf("Image: %s%n", job.getImage()); out.printf("Hostname: %s%n", job.getHostname()); out.printf("Command: %s%n", quote(job.getCommand())); printMap(out, "Env: ", QUOTE, job.getEnv()); out.printf("Health check: %s%n", formatHealthCheck(job.getHealthCheck())); out.printf("Grace period (seconds): %s%n", job.getGracePeriod()); printMap(out, "Ports: ", FORMAT_PORTMAPPING, job.getPorts()); printMap(out, "Reg: ", FORMAT_SERVICE_PORTS, job.getRegistration()); out.printf("Security options: %s%n", job.getSecurityOpt()); out.printf("Network mode: %s%n", job.getNetworkMode()); out.printf("Token: %s%n", job.getToken()); printVolumes(out, job.getVolumes()); } return 0; }
.tag("jobId", job.getId()) .tag("host", host) .tag("image", job.getImage()); try { final AtomicBoolean messagePrinted = new AtomicBoolean(false);
/** * Create docker container configuration for a job. * @param imageInfo The ImageInfo object. * @param properties Properties to resolve against. * @return The ContainerConfig object. */ public ContainerConfig containerConfig(final ImageInfo imageInfo, final Map<String, String> properties) { final ContainerConfig.Builder builder = ContainerConfig.builder(); builder.image(job.getImage()); builder.hostname(job.getHostname()); builder.cmd(containerCmdStrings(properties)); builder.hostname(containerHostname(properties)); builder.env(containerEnvStrings()); builder.exposedPorts(containerExposedPorts()); builder.volumes(volumes()); for (final ContainerDecorator decorator : containerDecorators) { decorator.decorateContainerConfig(job, imageInfo, builder); } return builder.build(); }