summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTim Martin <tim.martin@metaswitch.com>2017-04-24 11:18:19 +0100
committerTim Martin <tim@asymptotic.co.uk>2017-05-02 21:51:29 +0100
commit797fdda5b683474c9a50f7e79402df4c49c4212a (patch)
treeef98fd21eff7d690fe758c55512dac90547282ef /src
parent5ebce9c8646f4f0e9fe05614060fa84cb4e31912 (diff)
Added an option for setting restart policy
This requires support for integers in the parameter list, because the maximum retry count is an integer and Docker will not accept a string
Diffstat (limited to 'src')
-rw-r--r--src/builder.rs47
1 files changed, 41 insertions, 6 deletions
diff --git a/src/builder.rs b/src/builder.rs
index 6d56f21..6b0e279 100644
--- a/src/builder.rs
+++ b/src/builder.rs
@@ -255,7 +255,7 @@ impl ContainerListOptionsBuilder {
/// Interface for building a new docker container from an existing image
pub struct ContainerOptions {
pub name: Option<String>,
- params: HashMap<&'static str, String>,
+ params: HashMap<&'static str, Json>,
params_list: HashMap<&'static str, Vec<String>>,
params_hash: HashMap<String, Vec<HashMap<String, String>>>,
}
@@ -331,7 +331,7 @@ impl ContainerOptions {
#[derive(Default)]
pub struct ContainerOptionsBuilder {
name: Option<String>,
- params: HashMap<&'static str, String>,
+ params: HashMap<&'static str, Json>,
params_list: HashMap<&'static str, Vec<String>>,
params_hash: HashMap<String, Vec<HashMap<String, String>>>,
}
@@ -342,7 +342,7 @@ impl ContainerOptionsBuilder {
let params_list = HashMap::new();
let params_hash = HashMap::new();
- params.insert("Image", image.to_owned());
+ params.insert("Image", Json::String(image.to_owned()));
ContainerOptionsBuilder {
name: None,
params: params,
@@ -393,7 +393,7 @@ impl ContainerOptionsBuilder {
pub fn network_mode(&mut self, network: &str) -> &mut ContainerOptionsBuilder {
if !network.is_empty() {
- self.params.insert("HostConfig.NetworkMode", network.to_owned());
+ self.params.insert("HostConfig.NetworkMode", Json::String(network.to_owned()));
}
self
}
@@ -414,7 +414,7 @@ impl ContainerOptionsBuilder {
pub fn entrypoint(&mut self, entrypoint: &str) -> &mut ContainerOptionsBuilder {
if !entrypoint.is_empty() {
- self.params.insert("Entrypoint", entrypoint.to_owned());
+ self.params.insert("Entrypoint", Json::String(entrypoint.to_owned()));
}
self
}
@@ -437,7 +437,21 @@ impl ContainerOptionsBuilder {
pub fn log_driver(&mut self, log_driver: &str) -> &mut ContainerOptionsBuilder {
if !log_driver.is_empty() {
- self.params.insert("HostConfig.LogConfig.Type", log_driver.to_owned());
+ self.params.insert("HostConfig.LogConfig.Type", Json::String(log_driver.to_owned()));
+ }
+ self
+ }
+
+ pub fn restart_policy(&mut self,
+ name: &str,
+ maximum_retry_count: u64)
+ -> &mut ContainerOptionsBuilder {
+ if !name.is_empty() {
+ self.params.insert("HostConfig.RestartPolicy.Name", Json::String(name.to_owned()));
+ }
+ if name == "on-failure" {
+ self.params.insert("HostConfig.RestartPolicy.MaximumRetryCount",
+ Json::U64(maximum_retry_count));
}
self
}
@@ -1002,4 +1016,25 @@ mod tests {
assert_eq!(r#"{"HostConfig":{"LogConfig":{"Type":"fluentd"}},"Image":"test_image"}"#,
options.serialize().unwrap());
}
+
+ /// Test the restart policy settings
+ #[test]
+ fn container_options_restart_policy() {
+ let mut options =
+ ContainerOptionsBuilder::new("test_image")
+ .restart_policy("on-failure", 10)
+ .build();
+
+ assert_eq!(r#"{"HostConfig":{"RestartPolicy":{"MaximumRetryCount":10,"Name":"on-failure"}},"Image":"test_image"}"#,
+ options.serialize().unwrap());
+
+ options =
+ ContainerOptionsBuilder::new("test_image")
+ .restart_policy("always", 0)
+ .build();
+
+ assert_eq!(r#"{"HostConfig":{"RestartPolicy":{"Name":"always"}},"Image":"test_image"}"#,
+ options.serialize().unwrap());
+
+ }
}