From 8e848fc104ced76b6de79341c5b7ffa18d9d343d Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Tue, 9 May 2017 13:39:05 +0200 Subject: [PATCH] Update --- src/symbols/git/checkout.rs | 2 +- src/symbols/mariadb/database.rs | 52 ++++++++++++++++++++++++ src/symbols/mariadb/mod.rs | 5 +++ src/symbols/mariadb/user.rs | 49 ++++++++++++++++++++++ src/symbols/mod.rs | 1 + src/symbols/nginx/mod.rs | 1 - src/symbols/nginx/server.rs | 12 ++++++ src/symbols/systemd/mod.rs | 3 +- src/symbols/{nginx => systemd}/reload.rs | 20 +++++---- 9 files changed, 133 insertions(+), 12 deletions(-) create mode 100644 src/symbols/mariadb/database.rs create mode 100644 src/symbols/mariadb/mod.rs create mode 100644 src/symbols/mariadb/user.rs rename src/symbols/{nginx => systemd}/reload.rs (51%) diff --git a/src/symbols/git/checkout.rs b/src/symbols/git/checkout.rs index bbac49e..9fd5324 100644 --- a/src/symbols/git/checkout.rs +++ b/src/symbols/git/checkout.rs @@ -57,7 +57,7 @@ impl<'a> Symbol for GitCheckout<'a> { fn execute(&self) -> Result<(), Box> { if let Err(e) = metadata(self.target) { return if e.kind() == io::ErrorKind::NotFound { - try!(self.command_runner.run_with_args("git", &["clone", "-b", self.branch, self.source, self.target])); + try!(self.command_runner.run_with_args("git", &["clone", "--depth", "1", "-b", self.branch, self.source, self.target])); Ok(()) } else { Err(Box::new(e)) diff --git a/src/symbols/mariadb/database.rs b/src/symbols/mariadb/database.rs new file mode 100644 index 0000000..cb5dcff --- /dev/null +++ b/src/symbols/mariadb/database.rs @@ -0,0 +1,52 @@ +use std::borrow::Cow; +use std::error::Error; +use std::fmt; + +use command_runner::CommandRunner; +use symbols::Symbol; + +pub struct MariaDBDatabase<'a> { + db_name: Cow<'a, str>, + seed_file: &'a str, + command_runner: &'a CommandRunner +} + +impl<'a> MariaDBDatabase<'a> { + pub fn new(db_name: Cow<'a, str>, command_runner: &'a CommandRunner) -> MariaDBDatabase<'a> { + MariaDBDatabase { + db_name: db_name, + seed_file: "/root/seedfile.sql", + command_runner: command_runner + } + } + + fn run_sql(&self, sql: &str) -> Result> { + let output = try!(self.command_runner.run_with_args("mariadb", &["--skip-column-names", "-B", "-e", sql])); + if output.status.code() != Some(0) { + return Err(try!(String::from_utf8(output.stderr)).into()); + } + Ok(try!(String::from_utf8(output.stdout))) + } +} + +impl<'a> fmt::Display for MariaDBDatabase<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "MariaDB Database {}", self.db_name) + } +} + +impl<'a> Symbol for MariaDBDatabase<'a> { + fn target_reached(&self) -> Result> { + Ok(try!(self.run_sql(&format!("SHOW DATABASES LIKE '{}'", self.db_name))).trim_right() == self.db_name) + } + + fn execute(&self) -> Result<(), Box> { + try!(self.run_sql(&format!("CREATE DATABASE {}", self.db_name))); + try!(self.command_runner.run_with_args("sh", &["-c", &format!("mariadb '{}' < {}", self.db_name, self.seed_file)])); + Ok(()) + } +} + +#[cfg(test)] +mod test { +} diff --git a/src/symbols/mariadb/mod.rs b/src/symbols/mariadb/mod.rs new file mode 100644 index 0000000..7b6623c --- /dev/null +++ b/src/symbols/mariadb/mod.rs @@ -0,0 +1,5 @@ +mod database; +mod user; + +pub use self::database::MariaDBDatabase; +pub use self::user::MariaDBUser; diff --git a/src/symbols/mariadb/user.rs b/src/symbols/mariadb/user.rs new file mode 100644 index 0000000..277293e --- /dev/null +++ b/src/symbols/mariadb/user.rs @@ -0,0 +1,49 @@ +use std::borrow::Cow; +use std::error::Error; +use std::fmt; + +use command_runner::CommandRunner; +use symbols::Symbol; + +pub struct MariaDBUser<'a> { + user_name: Cow<'a, str>, + command_runner: &'a CommandRunner +} + +impl<'a> MariaDBUser<'a> { + pub fn new(user_name: Cow<'a, str>, command_runner: &'a CommandRunner) -> MariaDBUser<'a> { + MariaDBUser { + user_name: user_name, + command_runner: command_runner + } + } + + fn run_sql(&self, sql: &str) -> Result> { + let output = try!(self.command_runner.run_with_args("mariadb", &["--skip-column-names", "-e", sql])); + if output.status.code() != Some(0) { + return Err(try!(String::from_utf8(output.stderr)).into()); + } + Ok(try!(String::from_utf8(output.stdout))) + } +} + +impl<'a> fmt::Display for MariaDBUser<'a> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "MariaDB User {}", self.user_name) + } +} + +impl<'a> Symbol for MariaDBUser<'a> { + fn target_reached(&self) -> Result> { + Ok(try!(self.run_sql(&format!("SELECT User FROM mysql.user WHERE User = '{}' AND plugin = 'unix_socket'", self.user_name))).trim_right() == self.user_name) + } + + fn execute(&self) -> Result<(), Box> { + try!(self.run_sql(&format!("GRANT ALL ON {0}.* TO {0} IDENTIFIED VIA unix_socket", self.user_name))); + Ok(()) + } +} + +#[cfg(test)] +mod test { +} diff --git a/src/symbols/mod.rs b/src/symbols/mod.rs index 5bf6520..d70b095 100644 --- a/src/symbols/mod.rs +++ b/src/symbols/mod.rs @@ -16,6 +16,7 @@ pub mod file; pub mod git; pub mod hook; pub mod list; +pub mod mariadb; pub mod nginx; pub mod not_a_symlink; pub mod npm; diff --git a/src/symbols/nginx/mod.rs b/src/symbols/nginx/mod.rs index 75c030c..74f47ad 100644 --- a/src/symbols/nginx/mod.rs +++ b/src/symbols/nginx/mod.rs @@ -1,2 +1 @@ -pub mod reload; pub mod server; diff --git a/src/symbols/nginx/server.rs b/src/symbols/nginx/server.rs index 9ee5774..8b80f3c 100644 --- a/src/symbols/nginx/server.rs +++ b/src/symbols/nginx/server.rs @@ -100,6 +100,18 @@ location @proxy {{ NginxServer::new(domain, content, command_runner) } + pub fn new_php(domain: &'a str, socket_path: &'a str, static_path: &'a str, command_runner: &'a CommandRunner) -> Self { + let content = NginxServer::server_config(domain, &format!(" + root {}; + index index.html index.php; + location ~ [^/]\\.php(/|$) {{ + fastcgi_pass unix:{}; + include \"snippets/fastcgi-php.conf\"; + }} +", static_path, socket_path)); + NginxServer::new(domain, content, command_runner) + } + pub fn new_static(domain: &'a str, static_path: &'a str, command_runner: &'a CommandRunner) -> Self { let content = NginxServer::server_config(domain, &format!(" root {}; diff --git a/src/symbols/systemd/mod.rs b/src/symbols/systemd/mod.rs index 75a2027..ec0e263 100644 --- a/src/symbols/systemd/mod.rs +++ b/src/symbols/systemd/mod.rs @@ -1,2 +1,3 @@ -pub mod user_session; pub mod node_js_user_service; +pub mod reload; +pub mod user_session; diff --git a/src/symbols/nginx/reload.rs b/src/symbols/systemd/reload.rs similarity index 51% rename from src/symbols/nginx/reload.rs rename to src/symbols/systemd/reload.rs index 488a7a2..30a18e9 100644 --- a/src/symbols/nginx/reload.rs +++ b/src/symbols/systemd/reload.rs @@ -4,31 +4,33 @@ use std::fmt; use command_runner::CommandRunner; use symbols::Symbol; -pub struct NginxReload<'a> { - command_runner: &'a CommandRunner, +pub struct ReloadService<'a> { + service: &'a str, + command_runner: &'a CommandRunner } -impl<'a> NginxReload<'a> { - pub fn new(command_runner: &'a CommandRunner) -> Self { - NginxReload { +impl<'a> ReloadService<'a> { + pub fn new(service: &'a str, command_runner: &'a CommandRunner) -> Self { + ReloadService { + service: service, command_runner: command_runner } } } -impl<'a> Symbol for NginxReload<'a> { +impl<'a> Symbol for ReloadService<'a> { fn target_reached(&self) -> Result> { Ok(true) } fn execute(&self) -> Result<(), Box> { - try!(self.command_runner.run_with_args("systemctl", &["reload-or-restart", "nginx"])); + try!(self.command_runner.run_with_args("systemctl", &["reload-or-restart", self.service])); Ok(()) } } -impl<'a> fmt::Display for NginxReload<'a> { +impl<'a> fmt::Display for ReloadService<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> Result<(),fmt::Error>{ - write!(f, "Reload nginx server") + write!(f, "Reload service {}", self.service) } }