From cb5b8dcd6b35f33c4c3012c7791b8eaeb3de2afb Mon Sep 17 00:00:00 2001 From: Tim Docker Date: Tue, 19 Feb 2019 07:43:24 +1100 Subject: [PATCH] Make the server names associated with an endpoint a list rather than a singleton Reviewers: jeeva Subscribers: #helix_omniscient Differential Revision: http://phab.helixta.com.au/D22288 --- adl/config.adl | 2 +- src/ADL/Config.hs | 10 +++++----- src/Commands/ProxyMode.hs | 4 ++-- src/Commands/ProxyMode/LocalState.hs | 14 +++++++------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/adl/config.adl b/adl/config.adl index 96914ce..22ab79c 100644 --- a/adl/config.adl +++ b/adl/config.adl @@ -63,7 +63,7 @@ union MachineLabel { // A proxy exposed endpoint struct EndPoint { EndPointLabel label; - String serverName; + Vector serverNames; EndPointType etype; }; diff --git a/src/ADL/Config.hs b/src/ADL/Config.hs index f514da8..43c2a0d 100644 --- a/src/ADL/Config.hs +++ b/src/ADL/Config.hs @@ -85,26 +85,26 @@ instance AdlValue DeployMode where data EndPoint = EndPoint { ep_label :: ADL.Types.EndPointLabel - , ep_serverName :: T.Text + , ep_serverNames :: [T.Text] , ep_etype :: EndPointType } deriving (Prelude.Eq,Prelude.Ord,Prelude.Show) -mkEndPoint :: ADL.Types.EndPointLabel -> T.Text -> EndPointType -> EndPoint -mkEndPoint label serverName etype = EndPoint label serverName etype +mkEndPoint :: ADL.Types.EndPointLabel -> [T.Text] -> EndPointType -> EndPoint +mkEndPoint label serverNames etype = EndPoint label serverNames etype instance AdlValue EndPoint where atype _ = "config.EndPoint" jsonGen = genObject [ genField "label" ep_label - , genField "serverName" ep_serverName + , genField "serverNames" ep_serverNames , genField "etype" ep_etype ] jsonParser = EndPoint <$> parseField "label" - <*> parseField "serverName" + <*> parseField "serverNames" <*> parseField "etype" data EndPointType diff --git a/src/Commands/ProxyMode.hs b/src/Commands/ProxyMode.hs index 3e6014d..c12ab76 100644 --- a/src/Commands/ProxyMode.hs +++ b/src/Commands/ProxyMode.hs @@ -66,8 +66,8 @@ showStatus showSlaves = do T.putStrLn "Endpoints:" for_ (pmEndPoints pm) $ \ep -> do let etype = case ep_etype ep of - Ep_httpOnly -> "(" <> ep_serverName ep <> ":80)" - Ep_httpsWithRedirect _ -> "(" <> ep_serverName ep <> ":80,443)" + Ep_httpOnly -> "(" <> T.intercalate ", " [sn <> ":80" |sn <- ep_serverNames ep ] <> ")" + Ep_httpsWithRedirect _ -> "(" <> T.intercalate ", " [sn <> ":80,443" |sn <- ep_serverNames ep ] <> ")" let connected = case SM.lookup (ep_label ep) (s_connections state) of Nothing -> "(not connected)" Just deployLabel -> deployLabel diff --git a/src/Commands/ProxyMode/LocalState.hs b/src/Commands/ProxyMode/LocalState.hs index 2dbcc60..8813c67 100644 --- a/src/Commands/ProxyMode/LocalState.hs +++ b/src/Commands/ProxyMode/LocalState.hs @@ -171,8 +171,8 @@ generateLocalSslCertificate = do tcfg <- getToolConfig pm <- getProxyModeConfig proxyDir <- getProxyDir - let serverNames = [serverName | - EndPoint{ep_serverName=serverName,ep_etype=Ep_httpsWithRedirect Scm_generated} <- M.elems (SM.toMap (pm_endPoints pm))] + let serverNames = concat [serverNames | + EndPoint{ep_serverNames=serverNames,ep_etype=Ep_httpsWithRedirect Scm_generated} <- M.elems (SM.toMap (pm_endPoints pm))] ledir = tc_letsencryptPrefixDir tcfg lewwwdir = tc_letsencryptWwwDir tcfg certbotCmd = T.intercalate " " ( @@ -271,7 +271,7 @@ writeNginxConfig tcfg path eps = T.writeFile path (T.intercalate "\n" lines) serverBlock (ep@EndPoint{ep_etype=Ep_httpOnly},Just d) = [ " server {" , " listen 80;" - , " server_name " <> ep_serverName ep <> ";" + , " server_name " <> T.intercalate " " (ep_serverNames ep) <> ";" , " location / {" , " proxy_set_header Host $host;" , " proxy_pass http://localhost:" <> showText (d_port d) <> "/;" @@ -281,14 +281,14 @@ writeNginxConfig tcfg path eps = T.writeFile path (T.intercalate "\n" lines) serverBlock (ep@EndPoint{ep_etype=Ep_httpOnly},Nothing) = [ " server {" , " listen 80;" - , " server_name " <> ep_serverName ep <> ";" + , " server_name " <> T.intercalate " " (ep_serverNames ep) <> ";" , " return 503;" , " }" ] serverBlock (ep@EndPoint{ep_etype=Ep_httpsWithRedirect certMode},Just d) = [ " server {" , " listen 80;" - , " server_name " <> ep_serverName ep <> ";" + , " server_name " <> T.intercalate " " (ep_serverNames ep) <> ";" , " location '/.well-known/acme-challenge' {" , " default_type \"text/plain\";" , " alias " <> tc_letsencryptWwwDir tcfg <> "/.well-known/acme-challenge;" @@ -299,7 +299,7 @@ writeNginxConfig tcfg path eps = T.writeFile path (T.intercalate "\n" lines) , " }" , " server {" , " listen 443 ssl;" - , " server_name " <> ep_serverName ep <> ";" + , " server_name " <> T.intercalate " " (ep_serverNames ep) <> ";" , " ssl_certificate " <> sslCertPath certMode <> ";" , " ssl_certificate_key " <> sslCertKeyPath certMode <> ";" , " location / {" @@ -311,7 +311,7 @@ writeNginxConfig tcfg path eps = T.writeFile path (T.intercalate "\n" lines) serverBlock (ep@EndPoint{ep_etype=Ep_httpsWithRedirect certMode},Nothing) = [ " server {" , " listen 80;" - , " server_name " <> ep_serverName ep <> ";" + , " server_name " <> T.intercalate " " (ep_serverNames ep) <> ";" , " location '/.well-known/acme-challenge' {" , " default_type \"text/plain\";" , " alias " <> tc_letsencryptWwwDir tcfg <> "/.well-known/acme-challenge;"