From 11fbbe4499737d1369fd6800e871fc51d6980f4f Mon Sep 17 00:00:00 2001 From: "hubert.lenoir" Date: Mon, 31 Oct 2016 11:07:18 +0100 Subject: [PATCH] :gift: Issue #32 - Add DOMAIN_NAME for networks --- src/Synchronizer.php | 67 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 7 deletions(-) diff --git a/src/Synchronizer.php b/src/Synchronizer.php index b393ea5..17bb846 100644 --- a/src/Synchronizer.php +++ b/src/Synchronizer.php @@ -126,6 +126,8 @@ private function getHostsLines($container) // Networks if (isset($container['NetworkSettings']['Networks']) && is_array($container['NetworkSettings']['Networks'])) { foreach ($container['NetworkSettings']['Networks'] as $networkName => $conf) { + preg_match(sprintf('/^%s_(.+)$/', $this->getProjectName($container)), $networkName, $matches); + $networkShortName = $matches[1]; $ip = $conf['IPAddress']; $aliases = isset($conf['Aliases']) && is_array($conf['Aliases']) ? $conf['Aliases'] : []; @@ -136,6 +138,12 @@ private function getHostsLines($container) $hosts[] = $alias.'.'.$networkName; } + foreach ($this->getAdditionalContainerHosts($container) as $host) { + if (preg_match('/^(.+):(.+)$/', $host, $matches) && $matches[1] === $networkShortName) { + $hosts[] = $matches[2]; + } + } + $lines[$ip] = sprintf('%s%s', isset($lines[$ip]) ? $lines[$ip].' ' : '', implode(' ', $hosts)); } } @@ -148,22 +156,67 @@ private function getHostsLines($container) } /** - * @param Container $container + * @param array $container + * + * @return string + */ + private function getProjectName($container) + { + if (isset($container['Config']['Labels']['com.docker.compose.project'])) { + return $container['Config']['Labels']['com.docker.compose.project']; + } + + return ''; + } + + /** + * @param array $container * * @return array */ private function getContainerHosts($container) { - $hosts = [substr($container['Name'], 1).$this->tld]; + return array_merge( + [substr($container['Name'], 1).$this->tld], + $this->getAdditionalHosts($container) + ); + } + + /** + * @param array $container + * + * @return array + */ + private function getAdditionalContainerHosts($container) + { + $hosts = []; + + $domainName = $this->getEnv($container, 'DOMAIN_NAME'); + if ($domainName) { + $hosts = array_merge($hosts, explode(',', $domainName)); + } + + return $hosts; + } + + /** + * @param array $container + * @param string $name + * @param string $default + * + * @return string + */ + private function getEnv($container, $name, $default = null) + { if (isset($container['Config']['Env']) && is_array($container['Config']['Env'])) { - $env = $container['Config']['Env']; - foreach (preg_grep('/DOMAIN_NAME=/', $env) as $row) { - $row = substr($row, strlen('DOMAIN_NAME=')); - $hosts = array_merge($hosts, explode(',', $row)); + foreach ($container['Config']['Env'] as $env) { + if (preg_match(sprintf('/^%s=(.*)$/', $name), $env, $matches)) { + return $matches[1]; + } } } - return $hosts; + return $default; } /**