forked from yegor256/rultor
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yegor256#1041 added docker dameon auto restarter
- Loading branch information
1 parent
e506072
commit 2671fbe
Showing
3 changed files
with
110 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
103 changes: 103 additions & 0 deletions
103
src/main/java/com/rultor/agents/docker/DockerDaemon.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
/** | ||
* Copyright (c) 2009-2016, rultor.com | ||
* All rights reserved. | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: 1) Redistributions of source code must retain the above | ||
* copyright notice, this list of conditions and the following | ||
* disclaimer. 2) Redistributions in binary form must reproduce the above | ||
* copyright notice, this list of conditions and the following | ||
* disclaimer in the documentation and/or other materials provided | ||
* with the distribution. 3) Neither the name of the rultor.com nor | ||
* the names of its contributors may be used to endorse or promote | ||
* products derived from this software without specific prior written | ||
* permission. | ||
* | ||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT | ||
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND | ||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL | ||
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, | ||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | ||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | ||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||
* OF THE POSSIBILITY OF SUCH DAMAGE. | ||
*/ | ||
package com.rultor.agents.docker; | ||
|
||
import com.jcabi.aspects.Immutable; | ||
import com.jcabi.ssh.Shell; | ||
import com.rultor.agents.daemons.ShellCommand; | ||
import java.io.IOException; | ||
import org.apache.commons.lang3.StringUtils; | ||
|
||
/** | ||
* Docker daemon. | ||
* | ||
* @author Armin Braun ([email protected]) | ||
* @version $Id$ | ||
* @since 1.62 | ||
*/ | ||
@Immutable | ||
public final class DockerDaemon { | ||
|
||
/** | ||
* Shell to use. | ||
*/ | ||
private final transient Shell shell; | ||
|
||
/** | ||
* Ctor. | ||
* @param ssh Shell of the Docker daemon host | ||
*/ | ||
public DockerDaemon(final Shell ssh) { | ||
this.shell = ssh; | ||
} | ||
|
||
/** | ||
* Checks if the Docker daemon is running. | ||
* Uses the return status of executing `docker info` in the Docker host's | ||
* root shell to determine the status of the daemon. | ||
* @return True if the Docker daemon is running | ||
* @throws IOException on error | ||
*/ | ||
public boolean running() throws IOException { | ||
return "1\n".equals( | ||
this.exec( | ||
StringUtils.join( | ||
"if pgrep \"docker\" > /dev/null;", | ||
"then echo \"1\"; else; echo \"0\"; fi;" | ||
) | ||
) | ||
); | ||
} | ||
|
||
/** | ||
* Restarts the Docker daemon. | ||
* @throws IOException if restarting the Docker daemon fails | ||
*/ | ||
public void restart() throws IOException { | ||
try { | ||
this.exec("sudo service docker restart"); | ||
} catch (final IOException | IllegalArgumentException ex) { | ||
throw new IOException("Restarting the Docker daemon failed", ex); | ||
} | ||
} | ||
|
||
/** | ||
* Runs a given command on the Docker daemon's host. | ||
* @param cmd String of the command to be run | ||
* @return String of the command's output | ||
* @throws IOException on error in communicating with the SSH shell | ||
* @throws IllegalArgumentException on error in the executed command | ||
*/ | ||
private String exec(final String cmd) | ||
throws IOException, IllegalArgumentException { | ||
return new ShellCommand(this.shell, "/", cmd).exec(); | ||
} | ||
|
||
} |