Merge branch 'stable-2.16' into stable-2.17
authorHelga Velroyen <helgav@google.com>
Tue, 5 Jan 2016 10:13:22 +0000 (11:13 +0100)
committerHelga Velroyen <helgav@google.com>
Tue, 5 Jan 2016 14:04:15 +0000 (15:04 +0100)
* stable-2.16
  Fix typo 'option' instead of 'options'
  Fix error message in attachInstanceDiskChecks
  Update documentation of harep
  Document harep --dry-run in the man page
  Support --dry-run in harep
  Add a --dry-run option to htools

* stable-2.15
  Add more documentation to testutils_ssh.py
  renew-crypto: use bulk-removal of SSH keys
  Use bulk-removal of SSH keys for single keys
  Bulk-removing SSH keys of diverse set of nodes
  Bulk-removal of SSH keys of normal nodes
  Bulk-remove SSH keys of potential master candidates
  Bulk-removal of SSH keys
  testutils: add keys to own 'authorized_keys' file
  Make mock SSH file manager deal with lists
  Don't deepcopy the config if the old value is not needed
  Revision bump for 2.15.2
  Update NEWS file for 2.15.2
  Compute lock allocation strictly

* stable-2.14
  Revision bump for 2.14.2
  Update NEWS file for 2.14.2
  Fix lines with more than 80 characters
  Add more detach/attach sequence tests
  Allow disk attachment to diskless instances
  Improve tests for attaching disks

* stable-2.13
  Revision bump for 2.13.3
  Update NEWS file for 2.13.3

* stable-2.12
  Bump revision number for 2.12.6
  Update NEWS file for 2.12.6
  Restrict showing of DRBD secret using types
  Calculate correct affected nodes set in InstanceChangeGroup

* stable-2.11
  Revision bump for 2.11.8
  Update NEWS file for 2.11.8

* stable-2.10
  Version bump for 2.10.8
  Update NEWS file for 2.10.8

* stable-2.9
  Bump revision number
  Update NEWS file for 2.9.7 release
  Improve RAPI section on security
  QA: Ensure the DRBD secret is not retrievable via RAPI
  Redact the DRBD secret in instance queries
  Do not attempt to use the DRBD secret in gnt-instance info

Conflicts:
  src/Ganeti/HTools/Program/Harep.hs

Resolutions:
  Harep.hs: use detectBroken from Repair.hs

Signed-off-by: Helga Velroyen <helgav@google.com>
Reviewed-by: Hrvoje Ribici <riba@google.com>

14 files changed:
1  2 
NEWS
doc/security.rst
lib/backend.py
lib/config/__init__.py
lib/objects.py
src/Ganeti/Config.hs
src/Ganeti/HTools/CLI.hs
src/Ganeti/HTools/Program/Harep.hs
src/Ganeti/Locking/Allocation.hs
src/Ganeti/Objects.hs
src/Ganeti/Objects/Disk.hs
src/Ganeti/WConfd/ConfigModifications.hs
test/hs/Test/Ganeti/Objects.hs
test/py/ganeti.backend_unittest.py

diff --cc NEWS
Simple merge
Simple merge
diff --cc lib/backend.py
Simple merge
Simple merge
diff --cc lib/objects.py
Simple merge
Simple merge
@@@ -55,14 -55,12 +55,15 @@@ module Ganeti.HTools.CL
    -- * The options
    , oDataFile
    , oDiskMoves
 +  , oAvoidDiskMoves
    , oDiskTemplate
+   , oDryRun
    , oSpindleUse
    , oDynuFile
 +  , oMemWeight
    , oMonD
    , oMonDDataFile
 +  , oMonDKvmRSS
    , oMonDXen
    , oEvacMode
    , oMonDExitMissing
@@@ -42,9 -42,13 +42,10 @@@ module Ganeti.HTools.Program.Hare
  import Control.Exception (bracket)
  import Control.Lens (over)
  import Control.Monad
 -import Data.Function
 -import Data.List
  import Data.Maybe
 -import Data.Ord
  import System.Time
  import qualified Data.Map as Map
+ import qualified Text.JSON as J
  
  import Ganeti.BasicTypes
  import Ganeti.Common
@@@ -158,6 -309,111 +160,17 @@@ commitChange opts client instData = d
  
    return instData { tagsToRemove = [] }
  
 --- | Detect brokenness with an instance and suggest repair type and jobs to run.
 -detectBroken :: Node.List -> Instance.Instance
 -             -> Maybe (AutoRepairType, [OpCode])
 -detectBroken nl inst =
 -  let disk = Instance.diskTemplate inst
 -      iname = Instance.name inst
 -      offPri = Node.offline $ Container.find (Instance.pNode inst) nl
 -      offSec = Node.offline $ Container.find (Instance.sNode inst) nl
 -  in
 -   case disk of
 -     DTDrbd8
 -       | offPri && offSec ->
 -         Just (
 -           ArReinstall,
 -           [ OpInstanceRecreateDisks { opInstanceName = iname
 -                                     , opInstanceUuid = Nothing
 -                                     , opRecreateDisksInfo = RecreateDisksAll
 -                                     , opNodes = []
 -                                       -- FIXME: there should be a better way to
 -                                       -- specify opcode parameters than abusing
 -                                       -- mkNonEmpty in this way (using the fact
 -                                       -- that Maybe is used both for optional
 -                                       -- fields, and to express failure).
 -                                     , opNodeUuids = Nothing
 -                                     , opIallocator = mkNonEmpty "hail"
 -                                     }
 -           , OpInstanceReinstall { opInstanceName = iname
 -                                 , opInstanceUuid = Nothing
 -                                 , opOsType = Nothing
 -                                 , opTempOsParams = Nothing
 -                                 , opOsparamsPrivate = Nothing
 -                                 , opOsparamsSecret = Nothing
 -                                 , opForceVariant = False
 -                                 }
 -           ])
 -       | offPri ->
 -         Just (
 -           ArFailover,
 -           [ OpInstanceFailover { opInstanceName = iname
 -                                , opInstanceUuid = Nothing
 -                                  -- FIXME: ditto, see above.
 -                                , opShutdownTimeout = fromJust $ mkNonNegative
 -                                                      C.defaultShutdownTimeout
 -                                , opIgnoreConsistency = False
 -                                , opTargetNode = Nothing
 -                                , opTargetNodeUuid = Nothing
 -                                , opIgnoreIpolicy = False
 -                                , opIallocator = Nothing
 -                                , opMigrationCleanup = False
 -                                }
 -           ])
 -       | offSec ->
 -         Just (
 -           ArFixStorage,
 -           [ OpInstanceReplaceDisks { opInstanceName = iname
 -                                    , opInstanceUuid = Nothing
 -                                    , opReplaceDisksMode = ReplaceNewSecondary
 -                                    , opReplaceDisksList = []
 -                                    , opRemoteNode = Nothing
 -                                      -- FIXME: ditto, see above.
 -                                    , opRemoteNodeUuid = Nothing
 -                                    , opIallocator = mkNonEmpty "hail"
 -                                    , opEarlyRelease = False
 -                                    , opIgnoreIpolicy = False
 -                                    }
 -            ])
 -       | otherwise -> Nothing
 -
 -     DTPlain
 -       | offPri ->
 -         Just (
 -           ArReinstall,
 -           [ OpInstanceRecreateDisks { opInstanceName = iname
 -                                     , opInstanceUuid = Nothing
 -                                     , opRecreateDisksInfo = RecreateDisksAll
 -                                     , opNodes = []
 -                                       -- FIXME: ditto, see above.
 -                                     , opNodeUuids = Nothing
 -                                     , opIallocator = mkNonEmpty "hail"
 -                                     }
 -           , OpInstanceReinstall { opInstanceName = iname
 -                                 , opInstanceUuid = Nothing
 -                                 , opOsType = Nothing
 -                                 , opTempOsParams = Nothing
 -                                 , opOsparamsPrivate = Nothing
 -                                 , opOsparamsSecret = Nothing
 -                                 , opForceVariant = False
 -                                 }
 -           ])
 -       | otherwise -> Nothing
 -
 -     _ -> Nothing  -- Other cases are unimplemented for now: DTDiskless,
 -                   -- DTFile, DTSharedFile, DTBlock, DTRbd, DTExt.
 -
+ -- | Submit jobs, unless a dry-run is requested; in this case, just report
+ -- the job that would be submitted.
+ submitJobs' :: Options -> [[MetaOpCode]] -> L.Client -> IO (Result [JobId])
+ submitJobs' opts jobs client =
+   if optDryRun opts
+     then do
+       putStrLn . (++) "jobs: " . J.encode $ map (map metaOpCode) jobs
+       return $ Ok []
+     else
+       submitJobs jobs client
  -- | Perform the suggested repair on an instance if its policy allows it.
  doRepair :: Options
           -> L.Client     -- ^ The Luxi client
@@@ -49,13 -50,11 +50,14 @@@ module Ganeti.Locking.Allocatio
    , freeLocks
    ) where
  
 -import Control.Applicative (liftA2, (<$>), (<*>), pure)
 +import Prelude ()
 +import Ganeti.Prelude
 +
 +import Control.Applicative (liftA2)
  import Control.Arrow (second, (***))
 -import Control.Monad
 +import Control.Monad (unless, guard, foldM, when)
  import Data.Foldable (for_, find)
+ import Data.List (foldl')
  import qualified Data.Map as M
  import Data.Maybe (fromMaybe)
  import qualified Data.Set as S
Simple merge
Simple merge
Simple merge
Simple merge