LGTM, thanks.
On Thu, Apr 10, 2014 at 1:46 PM, Hrvoje Ribicic <[email protected]> wrote: > commit 50ac855d8efaedea4119ce51a085e3fac7ddd091 > Merge: c1cbe30 2d15929 > Author: Hrvoje Ribicic <[email protected]> > Date: Thu Apr 10 11:31:17 2014 +0000 > > Merge branch 'stable-2.10' into stable-2.11 > > * stable-2.10 > Revision bump for 2.10.3 > Update NEWS file for 2.10.3 > Warn in UPGRADE about not tar'ing exported insts > Fix non-running test and remove custom_nicparams rename > Acccount for NODE_RES lock in opportunistic locking > Fix request flooding of noded during disk sync > > * stable-2.9 > Allow QA asserts to produce more messages > Add messages about skipped QA disk template tests > Fix list-drbd QA test > Update installation guide wrt to DRBD version > Update NEWS for 2.9.6 > Revision bump for 2.9.6 > > Conflicts: > NEWS: Used both entries > configure.ac: Taken 2.11 version numbers > qa/ganeti-qa.py: Moved coloring into ReportTestSkip > > diff --cc NEWS > index 45f3611,225d999..fa2f6f0 > --- a/NEWS > +++ b/NEWS > @@@ -2,97 -2,30 +2,121 @@@ New > ==== > > > +Version 2.11.0 rc1 > +------------------ > + > +*(Released Thu, 20 Mar 2014)* > + > +Incompatible/important changes > +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > + > +- ``gnt-node list`` no longer shows disk space information for shared > file > + disk templates because it is not a node attribute. (For example, if > you have > + both the file and shared file disk templates enabled, ``gnt-node > list`` now > + only shows information about the file disk template.) > +- The shared file disk template is now in the new 'sharedfile' storage > type. > + As a result, ``gnt-node list-storage -t file`` now only shows > information > + about the file disk template and you may use ``gnt-node list-storage -t > + sharedfile`` to query storage information for the shared file disk > template. > +- Over luxi, syntactially incorrect queries are now rejected as a whole; > + before, a 'SumbmitManyJobs' request was partially executed, if the > outer > + structure of the request was syntactically correct. As the luxi > protocol > + is internal (external applications are expected to use RAPI), the > impact > + of this incompatible change should be limited. > +- Queries for nodes, instances, groups, backups and networks are now > + exclusively done via the luxi daemon. Legacy python code was removed, > + as well as the --enable-split-queries configuration option. > +- Orphan volumes errors are demoted to warnings and no longer affect the > exit > + code of ``gnt-cluster verify``. > +- RPC security got enhanced by using different client SSL certificates > + for each node. In this context 'gnt-cluster renew-crypto' got a new > + option '--renew-node-certificates', which renews the client > + certificates of all nodes. After a cluster upgrade from pre-2.11, run > + this to create client certificates and activate this feature. > + > +New features > +~~~~~~~~~~~~ > + > +- Instance moves, backups and imports can now use compression to > transfer the > + instance data. > +- Node groups can be configured to use an SSH port different than the > + default 22. > +- Added experimental support for Gluster distributed file storage as the > + ``gluster`` disk template under the new ``sharedfile`` storage type > through > + automatic management of per-node FUSE mount points. You can configure > the > + mount point location at ``gnt-cluster init`` time by using the new > + ``--gluster-storage-dir`` switch. > +- Job scheduling is now handled by luxid, and the maximal number of jobs > running > + in parallel is a run-time parameter of the cluster. > + > +New dependencies > +~~~~~~~~~~~~~~~~ > + > +The following new dependencies have been added: > + > +For Haskell: > + > +- ``zlib`` library (http://hackage.haskell.org/package/base64-bytestring > ) > + > +- ``base64-bytestring`` library (http://hackage.haskell.org/package/zlib > ), > + at least version 1.0.0.0 > + > +Since 2.11.0 beta1 > +~~~~~~~~~~~~~~~~~~ > + > +This was the first RC release of the 2.11 series. Since 2.11.0 beta1: > + > +- Convert int to float when checking config. consistency > +- Rename compression option in gnt-backup export > + > +Inherited from the 2.9 branch: > + > +- Fix error introduced during merge > +- gnt-cluster copyfile: accept relative paths > + > +Inherited from the 2.8 branch: > + > +- Improve RAPI detection of the watcher > +- Add patching QA configuration files on buildbots > +- Enable a timeout for instance shutdown > +- Allow KVM commands to have a timeout > +- Allow xen commands to have a timeout > +- Fix wrong docstring > + > + > +Version 2.11.0 beta1 > +-------------------- > + > +*(Released Wed, 5 Mar 2014)* > + > +This was the first beta release of the 2.11 series. All important changes > +are listed in the latest 2.11 entry. > + > + > + Version 2.10.3 > + -------------- > + > + *(Released Mon, 14 Apr 2014)* > + > + - Fix filtering of pending jobs with -o id (issue 778) > + - Make RAPI API calls more symmetric (issue 770) > + - Make parsing of old cluster configuration more robust (issue 783) > + - Fix wrong output of gnt-instance info after migrations > + - Fix reserved PCI slots for KVM hotplugging > + - Use runtime hypervisor parameters to calculate bockdevice options for > KVM > + - Fix high node daemon load during disk sync if the sync is paused > manually > + (issue 792) > + - Improve opportunistic locking during instance creation (issue 791) > + > + Inherited from the 2.9 branch: > + > + - Make watcher submit queries low priority (issue 772) > + - Add reason parameter to RAPI client functions (issue 776) > + - Fix failing gnt-node list-drbd command (issue 777) > + - Properly display fake job locks in gnt-debug. > + - small fixes in documentation > + > + > Version 2.10.2 > -------------- > > diff --cc qa/ganeti-qa.py > index e49a1f4,f21768a..1f9fe4a > --- a/qa/ganeti-qa.py > +++ b/qa/ganeti-qa.py > @@@ -107,10 -97,25 +107,27 @@@ def RunTest(fn, *args, **kwargs) > finally: > tstop = datetime.datetime.now() > tdelta = tstop - tstart > - print _FormatHeader("%s time=%s %s" % (tstop, tdelta, desc)) > + print _FormatHeader("%s time=%s %s" % (tstop, tdelta, desc), > + color=colors.MAGENTA, mark=">") > > > + def ReportTestSkip(desc, testnames): > + """Reports that tests have been skipped. > + > + @type desc: string > + @param desc: string > + @type testnames: string or list of string > + @param testnames: either a single test name in the configuration > + file, or a list of testnames (which will be AND-ed together) > + > + """ > + tstart = datetime.datetime.now() > + # TODO: Formatting test names when non-string names are involved > + print _FormatHeader("%s skipping %s, test(s) %s disabled" % > - (tstart, desc, testnames)) > ++ (tstart, desc, testnames), > ++ color=colors.BLUE, mark="*") > + > + > def RunTestIf(testnames, fn, *args, **kwargs): > """Runs a test conditionally. > > @@@ -121,46 -126,42 +138,42 @@@ > if qa_config.TestEnabled(testnames): > RunTest(fn, *args, **kwargs) > else: > - tstart = datetime.datetime.now() > desc = _DescriptionOf(fn) > - # TODO: Formatting test names when non-string names are involved > - print _FormatHeader("%s skipping %s, test(s) %s disabled" % > - (tstart, desc, testnames), > - color=colors.BLUE, mark="*") > + ReportTestSkip(desc, testnames) > > > -def RunEnvTests(): > - """Run several environment tests. > +def RunTestBlock(fn, *args, **kwargs): > + """Runs a block of tests after printing a header. > > """ > - RunTestIf("env", qa_env.TestSshConnection) > - RunTestIf("env", qa_env.TestIcmpPing) > - RunTestIf("env", qa_env.TestGanetiCommands) > + tstart = datetime.datetime.now() > > + desc = _DescriptionOf(fn) > > -def _LookupRapiSecret(rapi_user): > - """Find the RAPI secret for the given user. > + print > + print _FormatHeader("BLOCK %s start %s" % (tstart, desc), > + color=[colors.YELLOW, colors.BOLD], mark="v") > + > + try: > + return fn(*args, **kwargs) > + except Exception, e: > + print _FormatHeader("BLOCK FAILED %s: %s" % (desc, e), > + color=[colors.RED, colors.BOLD]) > + raise > + finally: > + tstop = datetime.datetime.now() > + tdelta = tstop - tstart > + print _FormatHeader("BLOCK %s time=%s %s" % (tstop, tdelta, desc), > + color=[colors.MAGENTA, colors.BOLD], mark="^") > > - @param rapi_user: Login user > - @return: Login secret for the user > + > +def RunEnvTests(): > + """Run several environment tests. > > """ > - CTEXT = "{CLEARTEXT}" > - master = qa_config.GetMasterNode() > - cmd = ["cat", qa_utils.MakeNodePath(master, pathutils.RAPI_USERS_FILE)] > - file_content = qa_utils.GetCommandOutput(master.primary, > - utils.ShellQuoteArgs(cmd)) > - users = ParsePasswordFile(file_content) > - entry = users.get(rapi_user) > - if not entry: > - raise qa_error.Error("User %s not found in RAPI users file" % > rapi_user) > - secret = entry.password > - if secret.upper().startswith(CTEXT): > - secret = secret[len(CTEXT):] > - elif secret.startswith("{"): > - raise qa_error.Error("Unsupported password schema for RAPI user %s:" > - " not a clear text password" % rapi_user) > - return secret > + RunTestIf("env", qa_env.TestSshConnection) > + RunTestIf("env", qa_env.TestIcmpPing) > + RunTestIf("env", qa_env.TestGanetiCommands) > > > def SetupCluster(rapi_user): > -- Thomas Thrainer | Software Engineer | [email protected] | Google Germany GmbH Dienerstr. 12 80331 München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores
