diff options
author | doug tangren <d.tangren@gmail.com> | 2017-05-02 18:52:12 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-02 18:52:12 -0400 |
commit | 577aedb66283c8b30d1e0989a249e1087e7d7633 (patch) | |
tree | ef98fd21eff7d690fe758c55512dac90547282ef | |
parent | e57f0932741003ded8913de2385d5ce6672e645e (diff) | |
parent | 797fdda5b683474c9a50f7e79402df4c49c4212a (diff) |
Merge pull request #60 from timmartin/restart-policy
Added support for setting a restart policy on a container
-rw-r--r-- | src/builder.rs | 55 |
1 files changed, 45 insertions, 10 deletions
diff --git a/src/builder.rs b/src/builder.rs index aa5b7df..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 } @@ -965,7 +979,7 @@ mod tests { let builder = ContainerOptionsBuilder::new("test_image"); let options = builder.build(); - assert_eq!("{\"HostConfig\":{},\"Image\":\"test_image\"}", + assert_eq!(r#"{"HostConfig":{},"Image":"test_image"}"#, options.serialize().unwrap()); } @@ -976,7 +990,7 @@ mod tests { .env(vec!["foo", "bar"]) .build(); - assert_eq!("{\"Env\":[\"foo\",\"bar\"],\"HostConfig\":{},\"Image\":\"test_image\"}", + assert_eq!(r#"{"Env":["foo","bar"],"HostConfig":{},"Image":"test_image"}"#, options.serialize().unwrap()); } @@ -987,7 +1001,7 @@ mod tests { .network_mode("host") .build(); - assert_eq!("{\"HostConfig\":{\"NetworkMode\":\"host\"},\"Image\":\"test_image\"}", + assert_eq!(r#"{"HostConfig":{"NetworkMode":"host"},"Image":"test_image"}"#, options.serialize().unwrap()); } @@ -999,7 +1013,28 @@ mod tests { .log_driver("fluentd") .build(); - assert_eq!("{\"HostConfig\":{\"LogConfig\":{\"Type\":\"fluentd\"}},\"Image\":\"test_image\"}", + 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()); + + } } |