On Wed, May 28, 2014 at 12:37 PM, 'Jose A. Lopes' via ganeti-devel < [email protected]> wrote:
> ... which keeps track of who last changed the instance field > 'admin_state', namely, the admin or the user. > > Signed-off-by: Jose A. Lopes <[email protected]> > --- > lib/cmdlib/instance.py | 1 + > lib/objects.py | 3 +++ > src/Ganeti/Objects.hs | 25 +++++++++++++------------ > test/hs/Test/Ganeti/OpCodes.hs | 5 +++-- > tools/cfgupgrade | 10 ++++++++++ > 5 files changed, 30 insertions(+), 14 deletions(-) > > diff --git a/lib/cmdlib/instance.py b/lib/cmdlib/instance.py > index fbb5939..91330d2 100644 > --- a/lib/cmdlib/instance.py > +++ b/lib/cmdlib/instance.py > @@ -1326,6 +1326,7 @@ class LUInstanceCreate(LogicalUnit): > disk_template=self.op.disk_template, > disks_active=False, > admin_state=constants.ADMINST_DOWN, > + admin_state_source=constants.ADMIN_SOURCE, > network_port=network_port, > beparams=self.op.beparams, > hvparams=self.op.hvparams, > diff --git a/lib/objects.py b/lib/objects.py > index 00a9467..125d1e5 100644 > --- a/lib/objects.py > +++ b/lib/objects.py > @@ -1074,6 +1074,7 @@ class Instance(TaggableObject): > "beparams", > "osparams", > "admin_state", > + "admin_state_source", > "nics", > "disks", > "disk_template", > @@ -1237,6 +1238,8 @@ class Instance(TaggableObject): > """Fill defaults for missing configuration values. > > """ > + if self.admin_state_source is None: > + self.admin_state_source = constants.ADMIN_SOURCE > for nic in self.nics: > nic.UpgradeConfig() > for disk in self.disks: > diff --git a/src/Ganeti/Objects.hs b/src/Ganeti/Objects.hs > index 5d9aebc..18ca1f5 100644 > --- a/src/Ganeti/Objects.hs > +++ b/src/Ganeti/Objects.hs > @@ -439,18 +439,19 @@ $(buildParam "Be" "bep" > ]) > > $(buildObject "Instance" "inst" $ > - [ simpleField "name" [t| String |] > - , simpleField "primary_node" [t| String |] > - , simpleField "os" [t| String |] > - , simpleField "hypervisor" [t| Hypervisor |] > - , simpleField "hvparams" [t| HvParams |] > - , simpleField "beparams" [t| PartialBeParams |] > - , simpleField "osparams" [t| OsParams |] > - , simpleField "admin_state" [t| AdminState |] > - , simpleField "nics" [t| [PartialNic] |] > - , simpleField "disks" [t| [Disk] |] > - , simpleField "disk_template" [t| DiskTemplate |] > - , simpleField "disks_active" [t| Bool |] > + [ simpleField "name" [t| String |] > + , simpleField "primary_node" [t| String |] > + , simpleField "os" [t| String |] > + , simpleField "hypervisor" [t| Hypervisor |] > + , simpleField "hvparams" [t| HvParams |] > + , simpleField "beparams" [t| PartialBeParams |] > + , simpleField "osparams" [t| OsParams |] > + , simpleField "admin_state" [t| AdminState |] > + , simpleField "admin_state_source" [t| AdminStateSource |] > + , simpleField "nics" [t| [PartialNic] |] > + , simpleField "disks" [t| [Disk] |] > + , simpleField "disk_template" [t| DiskTemplate |] > + , simpleField "disks_active" [t| Bool |] > , optionalField $ simpleField "network_port" [t| Int |] > ] > ++ timeStampFields > diff --git a/test/hs/Test/Ganeti/OpCodes.hs > b/test/hs/Test/Ganeti/OpCodes.hs > index 5129f7f..84c60f3 100644 > --- a/test/hs/Test/Ganeti/OpCodes.hs > +++ b/test/hs/Test/Ganeti/OpCodes.hs > @@ -42,10 +42,11 @@ import qualified Data.Map as Map > import qualified Text.JSON as J > import Text.Printf (printf) > > +import Test.Ganeti.Objects () > +import Test.Ganeti.Query.Language () > import Test.Ganeti.TestHelper > import Test.Ganeti.TestCommon > import Test.Ganeti.Types () > -import Test.Ganeti.Query.Language () > > import Ganeti.BasicTypes > import qualified Ganeti.Constants as C > @@ -260,7 +261,7 @@ instance Arbitrary OpCodes.OpCode where > pure emptyJSObject <*> arbitrary <*> arbitrary > "OP_INSTANCE_SHUTDOWN" -> > OpCodes.OpInstanceShutdown <$> genFQDN <*> return Nothing <*> > - arbitrary <*> arbitrary <*> arbitrary <*> arbitrary > + arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> > arbitrary > "OP_INSTANCE_REBOOT" -> > OpCodes.OpInstanceReboot <$> genFQDN <*> return Nothing <*> > arbitrary <*> arbitrary <*> arbitrary > diff --git a/tools/cfgupgrade b/tools/cfgupgrade > index e045515..2862f1d 100755 > --- a/tools/cfgupgrade > +++ b/tools/cfgupgrade > @@ -250,6 +250,9 @@ def UpgradeInstances(config_data): > if not "spindles" in dobj: > missing_spindles = True > > + if "admin_state_source" not in iobj: > + iobj["admin_state_source"] = "admin" > Why not use the constant here? > + > if GetExclusiveStorageValue(config_data) and missing_spindles: > # We cannot be sure that the instances that are missing spindles have > # exclusive storage enabled (the check would be more complicated), so > we > @@ -401,6 +404,11 @@ def UpgradeAll(config_data): > > # DOWNGRADE ------------------------------------------------------------ > > +def DowngradeInstances(config_data): > + for _, iobj in config_data["instances"].items(): > + if "admin_state_source" in iobj: > + del iobj["admin_state_source"] > + > > def DowngradeCluster(config_data): > cluster = config_data.get("cluster", None) > @@ -417,6 +425,8 @@ def DowngradeCluster(config_data): > if "max_running_jobs" in cluster: > del cluster["max_running_jobs"] > > + DowngradeInstances(config_data) > + > > def DowngradeGroups(config_data): > for group in config_data["nodegroups"].values(): > -- > 1.9.1.423.g4596e3a > >
