Statistics
| Branch: | Tag: | Revision:

root / src / Ganeti / Path.hs @ 59881a0b

History | View | Annotate | Download (4.1 kB)

1 9eeb0aa5 Michael Hanselmann
{-| Path-related helper functions.
2 9eeb0aa5 Michael Hanselmann
3 9eeb0aa5 Michael Hanselmann
-}
4 9eeb0aa5 Michael Hanselmann
5 9eeb0aa5 Michael Hanselmann
{-
6 9eeb0aa5 Michael Hanselmann
7 582bfaf6 Jose A. Lopes
Copyright (C) 2012, 2014 Google Inc.
8 9eeb0aa5 Michael Hanselmann
9 9eeb0aa5 Michael Hanselmann
This program is free software; you can redistribute it and/or modify
10 9eeb0aa5 Michael Hanselmann
it under the terms of the GNU General Public License as published by
11 9eeb0aa5 Michael Hanselmann
the Free Software Foundation; either version 2 of the License, or
12 9eeb0aa5 Michael Hanselmann
(at your option) any later version.
13 9eeb0aa5 Michael Hanselmann
14 9eeb0aa5 Michael Hanselmann
This program is distributed in the hope that it will be useful, but
15 9eeb0aa5 Michael Hanselmann
WITHOUT ANY WARRANTY; without even the implied warranty of
16 9eeb0aa5 Michael Hanselmann
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17 9eeb0aa5 Michael Hanselmann
General Public License for more details.
18 9eeb0aa5 Michael Hanselmann
19 9eeb0aa5 Michael Hanselmann
You should have received a copy of the GNU General Public License
20 9eeb0aa5 Michael Hanselmann
along with this program; if not, write to the Free Software
21 9eeb0aa5 Michael Hanselmann
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 9eeb0aa5 Michael Hanselmann
02110-1301, USA.
23 9eeb0aa5 Michael Hanselmann
24 9eeb0aa5 Michael Hanselmann
-}
25 9eeb0aa5 Michael Hanselmann
26 29a30533 Iustin Pop
module Ganeti.Path
27 29a30533 Iustin Pop
  ( dataDir
28 29a30533 Iustin Pop
  , runDir
29 29a30533 Iustin Pop
  , logDir
30 29a30533 Iustin Pop
  , socketDir
31 9d049fb4 Klaus Aehlig
  , defaultMasterSocket
32 29a30533 Iustin Pop
  , defaultQuerySocket
33 59881a0b Petr Pudlak
  , defaultWConfdSocket
34 29a30533 Iustin Pop
  , confdHmacKey
35 29a30533 Iustin Pop
  , clusterConfFile
36 4b7863cb Klaus Aehlig
  , watcherPauseFile
37 29a30533 Iustin Pop
  , nodedCertFile
38 b3cc1646 Helga Velroyen
  , nodedClientCertFile
39 1db32048 Iustin Pop
  , queueDir
40 1db32048 Iustin Pop
  , jobQueueSerialFile
41 582bfaf6 Jose A. Lopes
  , jobQueueLockFile
42 582bfaf6 Jose A. Lopes
  , jobQueueDrainFile
43 1db32048 Iustin Pop
  , jobQueueArchiveSubDir
44 74b25887 Michele Tartara
  , instanceReasonDir
45 74b25887 Michele Tartara
  , getInstReasonFilename
46 29a30533 Iustin Pop
  ) where
47 9eeb0aa5 Michael Hanselmann
48 9eeb0aa5 Michael Hanselmann
import System.FilePath
49 2f441f72 Michael Hanselmann
import System.Posix.Env (getEnvDefault)
50 2f441f72 Michael Hanselmann
51 f81d41cc Jose A. Lopes
import AutoConf
52 9eeb0aa5 Michael Hanselmann
53 29a30533 Iustin Pop
-- | Simple helper to concat two paths.
54 29a30533 Iustin Pop
pjoin :: IO String -> String -> IO String
55 29a30533 Iustin Pop
pjoin a b = do
56 29a30533 Iustin Pop
  a' <- a
57 29a30533 Iustin Pop
  return $ a' </> b
58 29a30533 Iustin Pop
59 29a30533 Iustin Pop
-- | Returns the root directory, which can be either the real root or
60 29a30533 Iustin Pop
-- the virtual root.
61 29a30533 Iustin Pop
getRootDir :: IO FilePath
62 29a30533 Iustin Pop
getRootDir = getEnvDefault "GANETI_ROOTDIR" ""
63 29a30533 Iustin Pop
64 29a30533 Iustin Pop
-- | Prefixes a path with the current root directory.
65 29a30533 Iustin Pop
addNodePrefix :: FilePath -> IO FilePath
66 29a30533 Iustin Pop
addNodePrefix path = do
67 29a30533 Iustin Pop
  root <- getRootDir
68 29a30533 Iustin Pop
  return $ root ++ path
69 29a30533 Iustin Pop
70 29a30533 Iustin Pop
-- | Directory for data.
71 29a30533 Iustin Pop
dataDir :: IO FilePath
72 f81d41cc Jose A. Lopes
dataDir = addNodePrefix $ AutoConf.localstatedir </> "lib" </> "ganeti"
73 9eeb0aa5 Michael Hanselmann
74 1db32048 Iustin Pop
-- | Helper for building on top of dataDir (internal).
75 1db32048 Iustin Pop
dataDirP :: FilePath -> IO FilePath
76 1db32048 Iustin Pop
dataDirP = (dataDir `pjoin`)
77 1db32048 Iustin Pop
78 29a30533 Iustin Pop
-- | Directory for runtime files.
79 29a30533 Iustin Pop
runDir :: IO FilePath
80 f81d41cc Jose A. Lopes
runDir = addNodePrefix $ AutoConf.localstatedir </> "run" </> "ganeti"
81 9eeb0aa5 Michael Hanselmann
82 29a30533 Iustin Pop
-- | Directory for log files.
83 29a30533 Iustin Pop
logDir :: IO FilePath
84 f81d41cc Jose A. Lopes
logDir = addNodePrefix $ AutoConf.localstatedir </> "log" </> "ganeti"
85 9eeb0aa5 Michael Hanselmann
86 29a30533 Iustin Pop
-- | Directory for Unix sockets.
87 29a30533 Iustin Pop
socketDir :: IO FilePath
88 29a30533 Iustin Pop
socketDir = runDir `pjoin` "socket"
89 9eeb0aa5 Michael Hanselmann
90 9d049fb4 Klaus Aehlig
-- | The default path for the master-daemon LUXI socket.
91 9d049fb4 Klaus Aehlig
defaultMasterSocket :: IO FilePath
92 9d049fb4 Klaus Aehlig
defaultMasterSocket = socketDir `pjoin` "ganeti-master"
93 9eeb0aa5 Michael Hanselmann
94 9eeb0aa5 Michael Hanselmann
-- | The default LUXI socket for queries.
95 29a30533 Iustin Pop
defaultQuerySocket :: IO FilePath
96 29a30533 Iustin Pop
defaultQuerySocket = socketDir `pjoin` "ganeti-query"
97 9eeb0aa5 Michael Hanselmann
98 59881a0b Petr Pudlak
-- | The default WConfD socket for queries.
99 59881a0b Petr Pudlak
defaultWConfdSocket :: IO FilePath
100 59881a0b Petr Pudlak
defaultWConfdSocket = socketDir `pjoin` "ganeti-wconfd"
101 59881a0b Petr Pudlak
102 29a30533 Iustin Pop
-- | Path to file containing confd's HMAC key.
103 29a30533 Iustin Pop
confdHmacKey :: IO FilePath
104 1db32048 Iustin Pop
confdHmacKey = dataDirP "hmac.key"
105 9eeb0aa5 Michael Hanselmann
106 29a30533 Iustin Pop
-- | Path to cluster configuration file.
107 29a30533 Iustin Pop
clusterConfFile :: IO FilePath
108 1db32048 Iustin Pop
clusterConfFile  = dataDirP "config.data"
109 7766de33 Agata Murawska
110 4b7863cb Klaus Aehlig
-- | Path to the watcher pause file.
111 4b7863cb Klaus Aehlig
watcherPauseFile :: IO FilePath
112 4b7863cb Klaus Aehlig
watcherPauseFile = dataDirP "watcher.pause"
113 4b7863cb Klaus Aehlig
114 29a30533 Iustin Pop
-- | Path to the noded certificate.
115 1db32048 Iustin Pop
nodedCertFile :: IO FilePath
116 1db32048 Iustin Pop
nodedCertFile = dataDirP "server.pem"
117 1db32048 Iustin Pop
118 b3cc1646 Helga Velroyen
-- | Path to the noded client certificate.
119 b3cc1646 Helga Velroyen
nodedClientCertFile :: IO FilePath
120 b3cc1646 Helga Velroyen
nodedClientCertFile = dataDirP "client.pem"
121 b3cc1646 Helga Velroyen
122 1db32048 Iustin Pop
-- | Job queue directory.
123 1db32048 Iustin Pop
queueDir :: IO FilePath
124 1db32048 Iustin Pop
queueDir = dataDirP "queue"
125 1db32048 Iustin Pop
126 1db32048 Iustin Pop
-- | Job queue serial file.
127 1db32048 Iustin Pop
jobQueueSerialFile :: IO FilePath
128 6fe0f9a6 Klaus Aehlig
jobQueueSerialFile = queueDir `pjoin` "serial"
129 1db32048 Iustin Pop
130 02926b4b Klaus Aehlig
-- | Job queue lock file
131 02926b4b Klaus Aehlig
jobQueueLockFile :: IO FilePath
132 02926b4b Klaus Aehlig
jobQueueLockFile = queueDir `pjoin` "lock"
133 02926b4b Klaus Aehlig
134 e773a018 Klaus Aehlig
-- | Job queue drain file
135 e773a018 Klaus Aehlig
jobQueueDrainFile :: IO FilePath
136 e773a018 Klaus Aehlig
jobQueueDrainFile = queueDir `pjoin` "drain"
137 e773a018 Klaus Aehlig
138 1db32048 Iustin Pop
-- | Job queue archive directory.
139 1db32048 Iustin Pop
jobQueueArchiveSubDir :: FilePath
140 1db32048 Iustin Pop
jobQueueArchiveSubDir = "archive"
141 74b25887 Michele Tartara
142 74b25887 Michele Tartara
-- | Directory containing the reason trails for the last change of status of
143 74b25887 Michele Tartara
-- instances.
144 74b25887 Michele Tartara
instanceReasonDir :: IO FilePath
145 74b25887 Michele Tartara
instanceReasonDir = runDir `pjoin` "instance-reason"
146 74b25887 Michele Tartara
147 74b25887 Michele Tartara
-- | The path of the file containing the reason trail for an instance, given the
148 74b25887 Michele Tartara
-- instance name.
149 74b25887 Michele Tartara
getInstReasonFilename :: String -> IO FilePath
150 74b25887 Michele Tartara
getInstReasonFilename instName = instanceReasonDir `pjoin` instName