Re: Issue 1180 in ganeti: Ceph/RBD support is broken with Ceph 'Jewel' due to incorrect showmapped command

2016-07-07 Thread ganeti


Comment #1 on issue 1180 by snn...@gmail.com: Ceph/RBD support is broken  
with Ceph 'Jewel' due to incorrect showmapped command

https://code.google.com/p/ganeti/issues/detail?id=1180

I've the same issue with debain 8.5 using ganeti Version: 2.12.4-1+deb8u3  
and ceph 10.x from ceph repository. resolved by using ceph Version:  
9.2.1-1~bpo80+1 on the clients. Is this production ready?


--
You received this message because this project is configured to send all  
issue notifications to this address.

You may adjust your notification preferences at:
https://code.google.com/hosting/settings


Re: [PATCH master] Reformat command arglists to make pep8 happy

2016-07-07 Thread 'Viktor Bachraty' via ganeti-devel
LGTM, ty :)

On Thu, Jul 7, 2016 at 2:01 PM, 'Brian Foley' via ganeti-devel <
ganeti-devel@googlegroups.com> wrote:

> For short commands just put them on one line. For longer commands split
> into command/formatting args/filtering args like you might for
> SELECT/FROM/WHERE or UPDATE/WITH statements in SQL.
>
> No functional change.
>
> Signed-off-by: Brian Foley 
> ---
>  qa/qa_maintd.py | 95
> +
>  1 file changed, 35 insertions(+), 60 deletions(-)
>
> diff --git a/qa/qa_maintd.py b/qa/qa_maintd.py
> index 7cf26e6..ad33fbd 100644
> --- a/qa/qa_maintd.py
> +++ b/qa/qa_maintd.py
> @@ -49,10 +49,9 @@ from qa_instance_utils import CreateInstanceDrbd8, \
>
>
>  def _GetMaintTags(node):
> -  tags = stdout_of(["gnt-node",
> -"list-tags",
> -node.primary
> -   ]).split()
> +  tags = stdout_of([
> +"gnt-node", "list-tags", node.primary
> +  ]).split()
>return [t for t in tags if t.startswith('maintd:repairready:')]
>
>
> @@ -70,13 +69,11 @@ def _AssertRepairTagAddition(node):
>
>  def _AssertNodeDrained(node):
>def fn():
> -out = stdout_of(["gnt-node",
> - "list",
> - "--output=name",
> - "--no-headers",
> - "--filter",
> - "drained"
> -])
> +out = stdout_of([
> +  "gnt-node", "list",
> +   "--output=name", "--no-headers",
> +   "--filter", "drained"
> +])
>  if node.primary not in out:
>raise retry.RetryAgain()
>retry.Retry(fn, 5.0, 500.0)
> @@ -84,13 +81,11 @@ def _AssertNodeDrained(node):
>
>  def _AssertInstanceRunning(inst):
>def fn():
> -out = stdout_of(["gnt-instance",
> - "list",
> - "--output=status",
> - "--no-headers",
> - "--filter",
> - "name == \"%s\"" % inst.name
> -])
> +out = stdout_of([
> +  "gnt-instance", "list",
> +  "--output=status", "--no-headers",
> +  "--filter", "name == \"%s\"" % inst.name
> +])
>  if "running" not in out:
>raise retry.RetryAgain()
>retry.Retry(fn, 5.0, 500.0)
> @@ -98,13 +93,11 @@ def _AssertInstanceRunning(inst):
>
>  def _AssertInstanceMove(inst, move_type):
>def fn():
> -out = stdout_of(["gnt-job",
> - "list",
> - "--output=status",
> - "--no-headers",
> - "--filter",
> - '"%s(%s)" in summary' % (move_type, inst.name)
> -])
> +out = stdout_of([
> +  "gnt-job", "list",
> +  "--output=status", "--no-headers",
> +  "--filter", '"%s(%s)" in summary' % (move_type, inst.name)
> +])
>  if 'success' not in out:
>raise retry.RetryAgain()
>retry.Retry(fn, 5.0, 500.0)
> @@ -112,52 +105,34 @@ def _AssertInstanceMove(inst, move_type):
>
>  def _AssertRepairCommand():
>def fn():
> -out = stdout_of(["gnt-job",
> - "list",
> - "--output=status",
> - "--no-headers",
> - "--filter",
> - '"REPAIR_COMMAND" in summary'
> -])
> +out = stdout_of([
> +  "gnt-job", "list",
> +  "--output=status", "--no-headers",
> +  "--filter", '"REPAIR_COMMAND" in summary'
> +])
>  if 'success' not in out:
>raise retry.RetryAgain()
>retry.Retry(fn, 5.0, 500.0)
>
>
>  def _SetUp(diagnose_dc_filename):
> -  AssertCommand(["gnt-cluster",
> - "modify",
> - "--maintenance-interval=3"
> -])
> -  AssertCommand(["gnt-cluster",
> - "modify",
> - "--diagnose-data-collector-filename",
> - diagnose_dc_filename
> -])
> +  AssertCommand(["gnt-cluster", "modify", "--maintenance-interval=3"])
> +  AssertCommand([
> +"gnt-cluster", "modify",
> +"--diagnose-data-collector-filename", diagnose_dc_filename
> +  ])
>
>
>  def _TearDown(node, tag, added_filepaths, drain_node=True):
> -  AssertCommand(["gnt-cluster",
> - "modify",
> - "--diagnose-data-collector-filename",
> - '""'
> -])
> +  AssertCommand([
> +"gnt-cluster", "modify",
> +"--diagnose-data-collector-filename", '""'
> +  ])
>AssertCommand(["rm"] + added_filepaths, node=node)
>if drain_node:
> -AssertCommand(["gnt-node",
> -   "modify",
> -   "--drained=no",
> -   node.primary
> -  ])
> -  AssertCommand(["gnt-node",
> - "remove-tags",
> - node.primary,
> - tag
> -])
> -  AssertCommand(["gnt-cluster",
> - "modify",
> - 

[PATCH master] Reformat command arglists to make pep8 happy

2016-07-07 Thread 'Brian Foley' via ganeti-devel
For short commands just put them on one line. For longer commands split
into command/formatting args/filtering args like you might for
SELECT/FROM/WHERE or UPDATE/WITH statements in SQL.

No functional change.

Signed-off-by: Brian Foley 
---
 qa/qa_maintd.py | 95 +
 1 file changed, 35 insertions(+), 60 deletions(-)

diff --git a/qa/qa_maintd.py b/qa/qa_maintd.py
index 7cf26e6..ad33fbd 100644
--- a/qa/qa_maintd.py
+++ b/qa/qa_maintd.py
@@ -49,10 +49,9 @@ from qa_instance_utils import CreateInstanceDrbd8, \
 
 
 def _GetMaintTags(node):
-  tags = stdout_of(["gnt-node",
-"list-tags",
-node.primary
-   ]).split()
+  tags = stdout_of([
+"gnt-node", "list-tags", node.primary
+  ]).split()
   return [t for t in tags if t.startswith('maintd:repairready:')]
 
 
@@ -70,13 +69,11 @@ def _AssertRepairTagAddition(node):
 
 def _AssertNodeDrained(node):
   def fn():
-out = stdout_of(["gnt-node",
- "list",
- "--output=name",
- "--no-headers",
- "--filter",
- "drained"
-])
+out = stdout_of([
+  "gnt-node", "list",
+   "--output=name", "--no-headers",
+   "--filter", "drained"
+])
 if node.primary not in out:
   raise retry.RetryAgain()
   retry.Retry(fn, 5.0, 500.0)
@@ -84,13 +81,11 @@ def _AssertNodeDrained(node):
 
 def _AssertInstanceRunning(inst):
   def fn():
-out = stdout_of(["gnt-instance",
- "list",
- "--output=status",
- "--no-headers",
- "--filter",
- "name == \"%s\"" % inst.name
-])
+out = stdout_of([
+  "gnt-instance", "list",
+  "--output=status", "--no-headers",
+  "--filter", "name == \"%s\"" % inst.name
+])
 if "running" not in out:
   raise retry.RetryAgain()
   retry.Retry(fn, 5.0, 500.0)
@@ -98,13 +93,11 @@ def _AssertInstanceRunning(inst):
 
 def _AssertInstanceMove(inst, move_type):
   def fn():
-out = stdout_of(["gnt-job",
- "list",
- "--output=status",
- "--no-headers",
- "--filter",
- '"%s(%s)" in summary' % (move_type, inst.name)
-])
+out = stdout_of([
+  "gnt-job", "list",
+  "--output=status", "--no-headers",
+  "--filter", '"%s(%s)" in summary' % (move_type, inst.name)
+])
 if 'success' not in out:
   raise retry.RetryAgain()
   retry.Retry(fn, 5.0, 500.0)
@@ -112,52 +105,34 @@ def _AssertInstanceMove(inst, move_type):
 
 def _AssertRepairCommand():
   def fn():
-out = stdout_of(["gnt-job",
- "list",
- "--output=status",
- "--no-headers",
- "--filter",
- '"REPAIR_COMMAND" in summary'
-])
+out = stdout_of([
+  "gnt-job", "list",
+  "--output=status", "--no-headers",
+  "--filter", '"REPAIR_COMMAND" in summary'
+])
 if 'success' not in out:
   raise retry.RetryAgain()
   retry.Retry(fn, 5.0, 500.0)
 
 
 def _SetUp(diagnose_dc_filename):
-  AssertCommand(["gnt-cluster",
- "modify",
- "--maintenance-interval=3"
-])
-  AssertCommand(["gnt-cluster",
- "modify",
- "--diagnose-data-collector-filename",
- diagnose_dc_filename
-])
+  AssertCommand(["gnt-cluster", "modify", "--maintenance-interval=3"])
+  AssertCommand([
+"gnt-cluster", "modify",
+"--diagnose-data-collector-filename", diagnose_dc_filename
+  ])
 
 
 def _TearDown(node, tag, added_filepaths, drain_node=True):
-  AssertCommand(["gnt-cluster",
- "modify",
- "--diagnose-data-collector-filename",
- '""'
-])
+  AssertCommand([
+"gnt-cluster", "modify",
+"--diagnose-data-collector-filename", '""'
+  ])
   AssertCommand(["rm"] + added_filepaths, node=node)
   if drain_node:
-AssertCommand(["gnt-node",
-   "modify",
-   "--drained=no",
-   node.primary
-  ])
-  AssertCommand(["gnt-node",
- "remove-tags",
- node.primary,
- tag
-])
-  AssertCommand(["gnt-cluster",
- "modify",
- "--maintenance-interval=300"
-])
+AssertCommand(["gnt-node", "modify", "--drained=no", node.primary])
+  AssertCommand(["gnt-node", "remove-tags", node.primary, tag])
+  AssertCommand(["gnt-cluster", "modify", "--maintenance-interval=300"])
 
 
 def _TestEvac(filepath, filecontent, inst_move_type):
-- 
2.8.0.rc3.226.g39d4020



Re: [MERGE] stable-2.17 to master

2016-07-07 Thread 'Viktor Bachraty' via ganeti-devel
LGTM, thanks.

On Thursday, July 7, 2016 at 1:43:04 PM UTC+1, Brian Foley wrote:
>
> commit 3d17266c14d6e021253844b199b9518068875e4f 
> Merge: b7a0dde a824a2e 
> Author: Brian Foley  
> Date:   Thu Jul 7 13:34:40 2016 +0100 
>
> Merge branch 'stable-2.17' 
> 
> * stable-2.17 
>   Improve missing job error handling in maintd 
>   Prevent the watcher from submitting too many jobs 
>   Fix hscan failing loading network field 
>   Prevent watcher from holding lock on verify group 
> 
> * stable-2.16 
>   Fix some trivial pep8/pylint errors 
>   Make executeRpcCall only compute rpcCallData once 
>   Remove storage unit selection from rpcCallData 
>   Only import needed functions from Ganeti.JSON 
>   Special case WaitForJobChange to reduce heap use 
> 
> * stable-2.15 
>   Cleanup more pylint/pep8/apidoc errors 
>   KVM: handle gracefully too old/too new psutil versions 
>   Fix small typo in opcode tests 
>   Fix line-too long errors 
> 
> Signed-off-by: Brian Foley  
>
> diff --cc src/Ganeti/Types.hs 
> index c332ba0,8da06d4..66507cc 
> --- a/src/Ganeti/Types.hs 
> +++ b/src/Ganeti/Types.hs 
> @@@ -200,9 -200,9 +200,9 @@@ import Data.Ratio (numerator, denominat 
>   import System.Time (ClockTime) 
>   
>   import qualified Ganeti.ConstantUtils as ConstantUtils 
> - import Ganeti.JSON 
> + import Ganeti.JSON (Container, HasStringRepr(..)) 
>   import qualified Ganeti.THH as THH 
>  +import qualified Ganeti.THH.Field as THH (TagSet) 
>   import Ganeti.Utils 
>   
>   -- * Generic types 
> diff --cc test/py/mocks.py 
> index 66b9cf1,b48125b..5c78918 
> --- a/test/py/mocks.py 
> +++ b/test/py/mocks.py 
> @@@ -203,7 -202,5 +206,8 @@@ class FakeLU(object) 
>   return [] 
>   
> def HooksCallBack(self, phase, hook_results, feedback_fn, lu_result): 
> + # pylint: disable=W0613 
>   return lu_result 
>  + 
>  +  def HooksAbortCallBack(self, phase, feedback_fn, exception): 
>  +pass 
>


[MERGE] stable-2.17 to master

2016-07-07 Thread 'Brian Foley' via ganeti-devel
commit 3d17266c14d6e021253844b199b9518068875e4f
Merge: b7a0dde a824a2e
Author: Brian Foley 
Date:   Thu Jul 7 13:34:40 2016 +0100

Merge branch 'stable-2.17'

* stable-2.17
  Improve missing job error handling in maintd
  Prevent the watcher from submitting too many jobs
  Fix hscan failing loading network field
  Prevent watcher from holding lock on verify group

* stable-2.16
  Fix some trivial pep8/pylint errors
  Make executeRpcCall only compute rpcCallData once
  Remove storage unit selection from rpcCallData
  Only import needed functions from Ganeti.JSON
  Special case WaitForJobChange to reduce heap use

* stable-2.15
  Cleanup more pylint/pep8/apidoc errors
  KVM: handle gracefully too old/too new psutil versions
  Fix small typo in opcode tests
  Fix line-too long errors

Signed-off-by: Brian Foley 

diff --cc src/Ganeti/Types.hs
index c332ba0,8da06d4..66507cc
--- a/src/Ganeti/Types.hs
+++ b/src/Ganeti/Types.hs
@@@ -200,9 -200,9 +200,9 @@@ import Data.Ratio (numerator, denominat
  import System.Time (ClockTime)
  
  import qualified Ganeti.ConstantUtils as ConstantUtils
- import Ganeti.JSON
+ import Ganeti.JSON (Container, HasStringRepr(..))
  import qualified Ganeti.THH as THH
 +import qualified Ganeti.THH.Field as THH (TagSet)
  import Ganeti.Utils
  
  -- * Generic types
diff --cc test/py/mocks.py
index 66b9cf1,b48125b..5c78918
--- a/test/py/mocks.py
+++ b/test/py/mocks.py
@@@ -203,7 -202,5 +206,8 @@@ class FakeLU(object)
  return []
  
def HooksCallBack(self, phase, hook_results, feedback_fn, lu_result):
+ # pylint: disable=W0613
  return lu_result
 +
 +  def HooksAbortCallBack(self, phase, feedback_fn, exception):
 +pass


Re: [MERGE] stable-2.16 to stable-2.17

2016-07-07 Thread 'Viktor Bachraty' via ganeti-devel
LGTM, thanks!

On Thu, Jul 7, 2016 at 12:32 PM, 'Brian Foley' via ganeti-devel <
ganeti-devel@googlegroups.com> wrote:

> commit 588fa31dd22a1e9320a9bf355c66ca1b837ff586
> Merge: fd55874 20c2aec
> Author: Brian Foley 
> Date:   Thu Jul 7 12:12:35 2016 +0100
>
> Merge branch 'stable-2.16' into stable-2.17
>
> * stable-2.16
>   Fix some trivial pep8/pylint errors
>   Make executeRpcCall only compute rpcCallData once
>   Remove storage unit selection from rpcCallData
>   Only import needed functions from Ganeti.JSON
>   Special case WaitForJobChange to reduce heap use
>
> * stable-2.15
>   Cleanup more pylint/pep8/apidoc errors
>   KVM: handle gracefully too old/too new psutil versions
>   Fix small typo in opcode tests
>   Fix line-too long errors
>
> Manually update import lists to fix compile errors, and fix trivial
> pep8 whitespace warning.
>
> Signed-off-by: Brian Foley 
>
> diff --cc src/Ganeti/Config.hs
> index f67aff1,4d0e5a0..5687b54
> --- a/src/Ganeti/Config.hs
> +++ b/src/Ganeti/Config.hs
> @@@ -101,9 -99,8 +101,9 @@@ import System.I
>
>   import Ganeti.BasicTypes
>   import qualified Ganeti.Constants as C
>  +import qualified Ganeti.ConstantUtils as CU
>   import Ganeti.Errors
> - import Ganeti.JSON
> + import Ganeti.JSON (fromJResult, fromContainer, GenericContainer(..))
>   import Ganeti.Objects
>   import Ganeti.Types
>   import qualified Ganeti.Utils.MultiMap as MM
> diff --cc src/Ganeti/HTools/Backend/IAlloc.hs
> index e431947,3a67c2d..e40c3d7
> --- a/src/Ganeti/HTools/Backend/IAlloc.hs
> +++ b/src/Ganeti/HTools/Backend/IAlloc.hs
> @@@ -65,7 -65,7 +65,7 @@@ import Ganeti.HTools.AlgorithmParams (A
>   import Ganeti.HTools.CLI
>   import Ganeti.HTools.Loader
>   import Ganeti.HTools.Types
> - import Ganeti.JSON
>  -import Ganeti.JSON (maybeFromObj, JSRecord, tryFromObj, toArray,
> asObjectList, readEitherString, fromJResult, fromObj, fromObjWithDefault,
> asJSObject)
> ++import Ganeti.JSON (maybeFromObj, JSRecord, tryFromObj, toArray,
> asObjectList, readEitherString, fromJResult, fromObj, fromObjWithDefault,
> asJSObject, emptyContainer)
>   import Ganeti.Types ( EvacMode(ChangePrimary, ChangeSecondary)
>   , adminStateFromRaw, AdminState(..))
>   import Ganeti.Utils
> diff --cc src/Ganeti/HTools/Backend/Luxi.hs
> index be81a3c,53b0794..639d74d
> --- a/src/Ganeti/HTools/Backend/Luxi.hs
> +++ b/src/Ganeti/HTools/Backend/Luxi.hs
> @@@ -51,8 -51,7 +51,9 @@@ import Ganeti.HTools.Type
>   import qualified Ganeti.HTools.Group as Group
>   import qualified Ganeti.HTools.Node as Node
>   import qualified Ganeti.HTools.Instance as Instance
> - import Ganeti.JSON
> - import Ganeti.Objects as O
>  -import Ganeti.JSON (fromObj, fromJVal, tryFromObj, arrayMaybeFromJVal)
> ++import Ganeti.JSON (fromJVal, tryFromObj, arrayMaybeFromJVal,
> ++getKeysFromContainer, Container)
> ++import Ganeti.Objects (PartialNicParams)
>
>   {-# ANN module "HLint: ignore Eta reduce" #-}
>
> diff --cc src/Ganeti/HTools/Backend/Rapi.hs
> index 03d158c,7d76751..218411c
> --- a/src/Ganeti/HTools/Backend/Rapi.hs
> +++ b/src/Ganeti/HTools/Backend/Rapi.hs
> @@@ -53,7 -53,7 +53,7 @@@ import System.FilePat
>   import Ganeti.BasicTypes
>   import Ganeti.HTools.Loader
>   import Ganeti.HTools.Types
> - import Ganeti.JSON
>  -import Ganeti.JSON (loadJSArray, JSRecord, tryFromObj, fromJVal,
> maybeFromObj, fromJResult, tryArrayMaybeFromObj, readEitherString,
> fromObjWithDefault, asJSObject)
> ++import Ganeti.JSON (loadJSArray, JSRecord, tryFromObj, fromJVal,
> maybeFromObj, fromJResult, tryArrayMaybeFromObj, readEitherString,
> fromObjWithDefault, asJSObject, emptyContainer)
>   import qualified Ganeti.HTools.Group as Group
>   import qualified Ganeti.HTools.Node as Node
>   import qualified Ganeti.HTools.Instance as Instance
> diff --cc src/Ganeti/Luxi.hs
> index 4439cef,f763eee..831e859
> --- a/src/Ganeti/Luxi.hs
> +++ b/src/Ganeti/Luxi.hs
> @@@ -73,7 -71,7 +73,7 @@@ import Text.JSON.Type
>   import Ganeti.BasicTypes
>   import Ganeti.Constants
>   import Ganeti.Errors
> - import Ganeti.JSON
>  -import Ganeti.JSON (fromJResult, fromJVal, Tuple5(..), MaybeForJSON(..),
> TimeAsDoubleJSON(..))
> ++import Ganeti.JSON (fromJResult, fromJVal, fromObj, Tuple5(..),
> MaybeForJSON(..), TimeAsDoubleJSON(..))
>   import Ganeti.UDSServer
>   import Ganeti.Objects
>   import Ganeti.OpParams (pTagsObject)
> diff --cc src/Ganeti/Objects.hs
> index 4b92561,59abc5c..065aaa8
> --- a/src/Ganeti/Objects.hs
> +++ b/src/Ganeti/Objects.hs
> @@@ -130,13 -124,11 +130,13 @@@ import qualified Text.JSON as
>   import qualified AutoConf
>   import qualified Ganeti.Constants as C
>   import qualified Ganeti.ConstantUtils as ConstantUtils
> - import Ganeti.JSON
> + import Ganeti.JSON (DictObject(..), Container, emptyContainer,
> GenericContainer)
>   import Ganeti.Objects.BitArray (BitArray)
>   import Ganeti.Objects.Disk
>  

[MERGE] stable-2.16 to stable-2.17

2016-07-07 Thread 'Brian Foley' via ganeti-devel
commit 588fa31dd22a1e9320a9bf355c66ca1b837ff586
Merge: fd55874 20c2aec
Author: Brian Foley 
Date:   Thu Jul 7 12:12:35 2016 +0100

Merge branch 'stable-2.16' into stable-2.17

* stable-2.16
  Fix some trivial pep8/pylint errors
  Make executeRpcCall only compute rpcCallData once
  Remove storage unit selection from rpcCallData
  Only import needed functions from Ganeti.JSON
  Special case WaitForJobChange to reduce heap use

* stable-2.15
  Cleanup more pylint/pep8/apidoc errors
  KVM: handle gracefully too old/too new psutil versions
  Fix small typo in opcode tests
  Fix line-too long errors

Manually update import lists to fix compile errors, and fix trivial
pep8 whitespace warning.

Signed-off-by: Brian Foley 

diff --cc src/Ganeti/Config.hs
index f67aff1,4d0e5a0..5687b54
--- a/src/Ganeti/Config.hs
+++ b/src/Ganeti/Config.hs
@@@ -101,9 -99,8 +101,9 @@@ import System.I
  
  import Ganeti.BasicTypes
  import qualified Ganeti.Constants as C
 +import qualified Ganeti.ConstantUtils as CU
  import Ganeti.Errors
- import Ganeti.JSON
+ import Ganeti.JSON (fromJResult, fromContainer, GenericContainer(..))
  import Ganeti.Objects
  import Ganeti.Types
  import qualified Ganeti.Utils.MultiMap as MM
diff --cc src/Ganeti/HTools/Backend/IAlloc.hs
index e431947,3a67c2d..e40c3d7
--- a/src/Ganeti/HTools/Backend/IAlloc.hs
+++ b/src/Ganeti/HTools/Backend/IAlloc.hs
@@@ -65,7 -65,7 +65,7 @@@ import Ganeti.HTools.AlgorithmParams (A
  import Ganeti.HTools.CLI
  import Ganeti.HTools.Loader
  import Ganeti.HTools.Types
- import Ganeti.JSON
 -import Ganeti.JSON (maybeFromObj, JSRecord, tryFromObj, toArray, 
asObjectList, readEitherString, fromJResult, fromObj, fromObjWithDefault, 
asJSObject)
++import Ganeti.JSON (maybeFromObj, JSRecord, tryFromObj, toArray, 
asObjectList, readEitherString, fromJResult, fromObj, fromObjWithDefault, 
asJSObject, emptyContainer)
  import Ganeti.Types ( EvacMode(ChangePrimary, ChangeSecondary)
  , adminStateFromRaw, AdminState(..))
  import Ganeti.Utils
diff --cc src/Ganeti/HTools/Backend/Luxi.hs
index be81a3c,53b0794..639d74d
--- a/src/Ganeti/HTools/Backend/Luxi.hs
+++ b/src/Ganeti/HTools/Backend/Luxi.hs
@@@ -51,8 -51,7 +51,9 @@@ import Ganeti.HTools.Type
  import qualified Ganeti.HTools.Group as Group
  import qualified Ganeti.HTools.Node as Node
  import qualified Ganeti.HTools.Instance as Instance
- import Ganeti.JSON
- import Ganeti.Objects as O
 -import Ganeti.JSON (fromObj, fromJVal, tryFromObj, arrayMaybeFromJVal)
++import Ganeti.JSON (fromJVal, tryFromObj, arrayMaybeFromJVal,
++getKeysFromContainer, Container)
++import Ganeti.Objects (PartialNicParams)
  
  {-# ANN module "HLint: ignore Eta reduce" #-}
  
diff --cc src/Ganeti/HTools/Backend/Rapi.hs
index 03d158c,7d76751..218411c
--- a/src/Ganeti/HTools/Backend/Rapi.hs
+++ b/src/Ganeti/HTools/Backend/Rapi.hs
@@@ -53,7 -53,7 +53,7 @@@ import System.FilePat
  import Ganeti.BasicTypes
  import Ganeti.HTools.Loader
  import Ganeti.HTools.Types
- import Ganeti.JSON
 -import Ganeti.JSON (loadJSArray, JSRecord, tryFromObj, fromJVal, 
maybeFromObj, fromJResult, tryArrayMaybeFromObj, readEitherString, 
fromObjWithDefault, asJSObject)
++import Ganeti.JSON (loadJSArray, JSRecord, tryFromObj, fromJVal, 
maybeFromObj, fromJResult, tryArrayMaybeFromObj, readEitherString, 
fromObjWithDefault, asJSObject, emptyContainer)
  import qualified Ganeti.HTools.Group as Group
  import qualified Ganeti.HTools.Node as Node
  import qualified Ganeti.HTools.Instance as Instance
diff --cc src/Ganeti/Luxi.hs
index 4439cef,f763eee..831e859
--- a/src/Ganeti/Luxi.hs
+++ b/src/Ganeti/Luxi.hs
@@@ -73,7 -71,7 +73,7 @@@ import Text.JSON.Type
  import Ganeti.BasicTypes
  import Ganeti.Constants
  import Ganeti.Errors
- import Ganeti.JSON
 -import Ganeti.JSON (fromJResult, fromJVal, Tuple5(..), MaybeForJSON(..), 
TimeAsDoubleJSON(..))
++import Ganeti.JSON (fromJResult, fromJVal, fromObj, Tuple5(..), 
MaybeForJSON(..), TimeAsDoubleJSON(..))
  import Ganeti.UDSServer
  import Ganeti.Objects
  import Ganeti.OpParams (pTagsObject)
diff --cc src/Ganeti/Objects.hs
index 4b92561,59abc5c..065aaa8
--- a/src/Ganeti/Objects.hs
+++ b/src/Ganeti/Objects.hs
@@@ -130,13 -124,11 +130,13 @@@ import qualified Text.JSON as 
  import qualified AutoConf
  import qualified Ganeti.Constants as C
  import qualified Ganeti.ConstantUtils as ConstantUtils
- import Ganeti.JSON
+ import Ganeti.JSON (DictObject(..), Container, emptyContainer, 
GenericContainer)
  import Ganeti.Objects.BitArray (BitArray)
  import Ganeti.Objects.Disk
 +import Ganeti.Objects.Maintenance
  import Ganeti.Objects.Nic
  import Ganeti.Objects.Instance
 +import Ganeti.Objects.HvState
  import Ganeti.Query.Language
  import Ganeti.PartialParams
  import Ganeti.Types
diff --cc src/Ganeti/Query/Node.hs
index 698e209,9d36c74..f431ade
--- a/src/Ganeti/Query/Node.hs
+++ 

Re: [PATCH stable-2.16] Fix some trivial pep8/pylint errors

2016-07-07 Thread 'Iustin Pop' via ganeti-devel
On 7 July 2016 at 13:05, 'Brian Foley' via ganeti-devel <
ganeti-devel@googlegroups.com> wrote:

> Whitespace and an unused variable.
>

LGTM ,thanks.

iustin


[PATCH stable-2.16] Fix some trivial pep8/pylint errors

2016-07-07 Thread 'Brian Foley' via ganeti-devel
Whitespace and an unused variable.

Signed-off-by: Brian Foley 
---
 lib/backend.py   | 2 ++
 lib/cmdlib/cluster/verify.py | 4 ++--
 lib/http/server.py   | 8 +---
 lib/storage/bdev.py  | 1 -
 4 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/lib/backend.py b/lib/backend.py
index f0ce380..51273f6 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -1104,6 +1104,7 @@ def _VerifySshClutter(node_status_list, my_name):
 
   return result
 
+
 def VerifyNodeNetTest(my_name, test_config):
   """Verify nodes are reachable.
 
@@ -1146,6 +1147,7 @@ def VerifyNodeNetTest(my_name, test_config):
 " and ".join(fail))
   return result
 
+
 def VerifyMasterIP(my_name, test_config):
   """Verify master IP is reachable.
 
diff --git a/lib/cmdlib/cluster/verify.py b/lib/cmdlib/cluster/verify.py
index 0036f69..8785fbc 100644
--- a/lib/cmdlib/cluster/verify.py
+++ b/lib/cmdlib/cluster/verify.py
@@ -779,8 +779,8 @@ class LUClusterVerifyGroup(LogicalUnit, _VerifyErrors):
 
 if constants.NV_MASTERIP not in nresult:
   self._ErrorMsg(constants.CV_ENODENET, ninfo.name,
-"node hasn't returned node master IP reachability data")
-elif nresult[constants.NV_MASTERIP] == False: # be explicit, could be None
+ "node hasn't returned node master IP reachability data")
+elif nresult[constants.NV_MASTERIP] == False:  # be explicit, could be None
   if ninfo.uuid == self.master_node:
 msg = "the master node cannot reach the master IP (not configured?)"
   else:
diff --git a/lib/http/server.py b/lib/http/server.py
index 8b3a4ee..9a4563e 100644
--- a/lib/http/server.py
+++ b/lib/http/server.py
@@ -423,7 +423,8 @@ class HttpServerRequestExecutor(object):
   try:
 http.Handshake(sock, self.WRITE_TIMEOUT)
   except http.HttpSessionHandshakeUnexpectedEOF:
-logging.debug("Unexpected EOF from %s:%s" % (client_addr[0], 
client_addr[1]))
+logging.debug("Unexpected EOF from %s:%s",
+  client_addr[0], client_addr[1])
 # Ignore rest
 return
 
@@ -609,8 +610,9 @@ class HttpServer(http.HttpBase, asyncore.dispatcher):
 t_setup = time.time()
 self.request_executor(self, self.handler, connection, client_addr)
 t_end = time.time()
-logging.debug("Request from %s:%s executed in: %.4f [setup: %.4f] 
[workers: %d]" % (
-client_addr[0], client_addr[1], t_end - t_start, t_setup - 
t_start, len(self._children)))
+logging.debug("Request from %s:%s executed in: %.4f [setup: %.4f] "
+  "[workers: %d]", client_addr[0], client_addr[1],
+  t_end - t_start, t_setup - t_start, len(self._children))
 
   except Exception: # pylint: disable=W0703
 logging.exception("Error while handling request from %s:%s",
diff --git a/lib/storage/bdev.py b/lib/storage/bdev.py
index 1f95004..7c1897c 100644
--- a/lib/storage/bdev.py
+++ b/lib/storage/bdev.py
@@ -510,7 +510,6 @@ class LogicalVolume(base.BlockDev):
   logging.warning("lvs command returned an empty output, the LV cache will"
   "be empty!")
   return {}
-info = {}
 return dict([LogicalVolume._ParseLvInfoLine(line, sep) for line in out])
 
   def Attach(self, lv_info=None):
-- 
2.8.0.rc3.226.g39d4020



Re: [MERGE] stable-2.15 to stable 2.16

2016-07-07 Thread 'Viktor Bachraty' via ganeti-devel
LGTM, thanks!

On Thursday, July 7, 2016 at 11:39:07 AM UTC+1, Brian Foley wrote:
>
> commit ad83a3d144c18a7191b7852c01871b43e83b54bd 
> Merge: 24da2b1 55ad60e 
> Author: Brian Foley  
> Date:   Thu Jul 7 11:31:19 2016 +0100 
>
> Merge branch 'stable-2.15' into stable-2.16 
> 
> * stable-2.15 
>   Cleanup more pylint/pep8/apidoc errors 
>   KVM: handle gracefully too old/too new psutil versions 
> 
> Manually fix up merge conflicts. 
> 
> Signed-off-by: Brian Foley  
>
>

[MERGE] stable-2.15 to stable 2.16

2016-07-07 Thread 'Brian Foley' via ganeti-devel
commit ad83a3d144c18a7191b7852c01871b43e83b54bd
Merge: 24da2b1 55ad60e
Author: Brian Foley 
Date:   Thu Jul 7 11:31:19 2016 +0100

Merge branch 'stable-2.15' into stable-2.16

* stable-2.15
  Cleanup more pylint/pep8/apidoc errors
  KVM: handle gracefully too old/too new psutil versions

Manually fix up merge conflicts.

Signed-off-by: Brian Foley