Implement block device renaming
This patch add code for renaming a device; more precisely, for changingthe unique_id of the device. This means: - logical volumes, rename the volume - drbd8, change the remote peer
This is needed for the being able to replace disks for drbd8....
Convert ListOS to use the all helper function.
The predicate function gets build by a lambda function.Also add a bit of debugging information to the 'unknown OS diagnose type'.
Reviewed-by: iustinp
Import two itertools recipes
The two function 'any' and 'all' are copied as-is from the python 2.4documentation for the itertools module. They are useful (and are alreadybuiltin function in python 2.5).
Add a custom str() method for objects.Disk
This is done in order to easy debugging of disk-related issues.
Reviewed-by: imsnah
Modify two mirror-device related rpc calls
The two calls mirror_addchild and mirror_removechild take only one childfor addition/removal. While this is enough for our md usage, for localdisk replacement in drbd8, we need to be able to specify both the data...
Initial implementation of drbd8 template type
This is a partially working drbd8 template type. It does: - add/remove - startup/failover/shutdown
Not working is replace disks, which needs custom code for this template.
Allow DRBD8 to sync after sb1-pri with no changes
Currently the way we shutdown or startup disks seems to make DRBD8unhappy. Until we rewrite the sequence of (de)activation, allow DRBD toconnect after a sb1-pri condition with no changes to the data.
Fix a disk handling bug triggered by failover
This leaves an instance's disks configured for the primary node as afterdisk activation we want to start the instance anyway. As such,_GatherBlockDevs in backend.py will need the disks configured for theprimary....
Add DRBD8 class for handling drbd version 8.x
This duplicates some code from the DRBDev class, but not very much, andit will be expanded with the new functionality available for the 8.xversion. Currently the code is not accessible outside the module.
This patch introduces a dependency on the pyparsing module....
Move/rename _IsValidMeta to base drbd class
The DRBDev._IsValidMeta only checks for the metadata device size. Sincethis is a useful check (but not complete) for DRBD8, move it to the baseclass and name it _CheckMetaSize.
More abstractions from DRBD7 to base class
This moves the _SetFromMinor and _MassageProcData to the base class.
Improve out-of-minors handling
Currently, the out-of-minors handling is not very good: though both MDand DRBD functions for finding an unused minor can return None, only theDRBD code checks for this case.
This patch improves this by making the functions _FindUnusedMinor raise...
Move some methods from DRBDev to BaseDRBD
Since some of the methods and constants are valid for both 0.7 and 8.xversions, we move them to the base class.
Some tiny style fixes
Split some DRBD functionality based on versions
This is a small split of some functionality from the DRBDev class into abase drbd class that holds just a few things, in order to make migrationto drbd 8.x easier.
Abstract more strings values into constants
Currently, the disk types are defined using constants in the code.Convert those into constants so that we can easily find them and checktheir usage.
Note that we don't rename the values of the constants as they are used...
Implement disk failure QA test.
Testing failure on the primary node is currently disabled due to drbd problems.
Patch series for reboot feature, part 3
This patch series implements the reboot command for gnt-instance. Itsupports three types of reboot: soft (hypervisor reboot), hard (instanceconfig rebuild and reboot) and full (full instance shutdown and startupagain)....
Patch series for reboot feature, part 2
Patch series for reboot feature, part 1
Fix unit tests for hooks.
Make “gnt-cluster verify” exit 0 if there's no problem with instances.
Reviewed-by: schreiberal
tiny typing fixup
Add the number of VCPUs in gnt-instance info
Allow force removal of instances
This patch adds a new option to the instance removal command"--ignore-failures" that forces the removal of the instance from theconfiguration even if the removal process encounters errors.
In order to be able to do this when the remote node(s) is(are) down, we...
Replace more ssh paths with proper constants
The node's ssh keys filenames are now provided as constants; this shouldallow easier customization.
Also, the user's ssh key computing has been abstracted into ssh.py
Trivial typing fixups.
Fix node daemon log file permissions
The creation of the log file for the node daemon lacks the modeparameter, so after applying the current umask, the file got 0700permissions. Restrict this to the correct 0600.
Do QA tests on “gnt-os“, including partially valid OSes.
Don't take unused parameter in qa_utils.py:Print{Info,Error}.
Make “gnt-os diagnose” exit 1 if not all OSes are valid.
Small wording changes and fix checks.
Remove some hardcoded names/paths from backend.py
This patch does the following: - add constants.GANETI_RUNAS = "root", which is used to compute the homedir (and thus the .ssh directory) instead of hardcoding "/root/.ssh" in backend.AddNode and backend.LeaveCluster...
Test “gnt-node evacuate” and “gnt-node failover” in QA.
Add a generic write file function
Currently there are a few version of "write a file safely" in the code.This patch adds a generic function that should be able to replace allthe other versions.
The "take attributes from the target file" option, while useful, is not...
Do not walk the whole DATA_DIR on node leave
Since we remove only files from DATA_DIR and not from subdirectories,let's not walk the entire tree, a simple listdir suffices. Also switchto utils.RemoveFile from simple os.unlink.
Enhance GetHomeDir to accept either names or UIDs
Currently GetHomeDir accepts UIDs only. Enhance it to accept either auser name or a user id, to allow for nicer usage.
Reorder gnt-os simplify _GetAllOS and call it _DiagnoseByOS
Put some order in gnt-os putting helper functions above and command functionsbelow. Also add a new _DiagnoseOSName() function and use it to make _GetAllOSsimplier to understand. Change its name to _DiagnoseByOS which makes more clear...
Fix ListOS which was broken
To do this we abstract the creation of the all_os dictionary, which wasproduced in DiagnoseOS and use it both for listing and diagnosing.
Some small improvements to the hooks environment
For the configuration update hook, it's useful to have a consistent namefor the target of the operation. As such, the LU code is modified toinclude an GANETI_OP_TARGET that points either to the cluster (name),...
Implement post-configuration-update hook
This patch adds a special hook: the post-configuration update hook. Thishook has only a post phase that runs after a top-level LU that modifiedthe configuration.
Since the hook is a post-phase one, no error checking is done on the...
Split the hooks env building in two parts
This patch moves some of the environment processing from _BuildEnv to anew _RunWrapper command which does the stringification and adds thesstore variables.
The reasoning is that the sstore can be fresher than before the...
Move hook execution decision to HooksMaster
Currently, the HooksMaster creation and execution decision is in theProcessor class. This is not optimal, so we change to always create ahooks master and instead make the decision inside that class, bycreating empty node lists for both pre and post if the lu doesn't...
Remove cfg and sstore parameters to HooksMaster
The HooksMaster class doesn't use the cfg parameter, and it's better touse it from the LU anyway (if needed). Let's remove it.
Also, the sstore of the LU can be fresher than the sstore we got at inittime, so use that instead and remove our own....
Enable the ConfigWriter to keep track of updates
This allows external callers to determine if the configuration has beenchanged.
Docstring correction
Infrastructure for detailed instance restarts, part one
The beginning of the infrastructure for detailed instance restarts. Doesnot affect behaviour if code yet.
Use the kernel's ability to generate UUIDs.
This removes the dependency on either the uuid module or e2fsprogs' uuidgen.
Add small function to read the homedir of a user
This can be used to replace hardcoded "/root/" paths.
Remove fping as a dependency for Ganeti.
This patch completely gets rid of fping - replace all fping invocations with TcpPing calls - update documentation accordingly. - associated cleanups (use constant for localhost IP, use more sensible defaults for TcpPing and use those)...
Colours and warnings.
- Implement colours in qa_utils.- Print warning for cron script.
Some small fixes to utils.GenerateTable
This adds: - fix the case when a dumb caller didn't stringify its values - explicitly raise a ProgrammerError in case a field is missing from the headers dictionary
Fix AskUser to not die on extra input
Currently, AskUser dies with -ESPIPE if the user gives more than onecharacter plus newline. This is because the python library, whilereturning only two chars from the readline(2) call, will cache the restof the input, and when we do a write, it will try to seek back to just...
Exit ganeti-watcher cleanly when there's no configuration.
Implement gnt-node evacuate
This patch adds a new 'evacuate' subcommand to gnt-node. The commandwill do a replace disks for all instances having that node as secondarywith the new target being the new node given.
The syntax is: gnt-node evacuate src_node target_node...
Make Xen DomU kernel and initrd configurable at build time.
Add preliminary developer notes.
Remove the shebang from modules
Since modules are not directly executables, remove the shebang fromthem. This helps with lintian warnings.
Also make the autogenerated _autoconf.py contain two comment lines atthe beginning, like the other modules.
Reviewed-by: ultrotter
Detect node restarts and reactivate disks.
- Change format of watcher state file to JSON.- Move log path for watcher script to constants.py.
Implement node failover
This patch implements a simple failover command for failing over allprimary instances. This is just a batched form of gnt-instance failover.
Do not install init script in PREFIX/bin.
Refactor DiagnoseOS
The new version debugs Hidden OSes as well.
Fix a wrong exception name
This was introduced in rev 208.
Separate error formatting out of cli.GenericMain
This patch moves the error formatting into a separate function that willbe exported so that scripts that execute multiple opcodes can create thesame output as for GenericMain. Also, GenericMain becomes more readable....
Revert a debugging 'raise' from rev 195
As far as I understand, this was just a debugging aid. Remove it so thatconfiguration errors are nicely handled.
Enhance cli.SubmitOpcode to use custom parameters
This patch allows the SubmitOpcode function to take a pre-createdProcessor instance and a different feedback function. This is helpfulwhen submitting more than one opcode from a shell script.
Add boot id to “gnt-node list”.
Add handler for errors.TagError
This patch adds a simple handler for TagError that prints the error(better than having a stack dump).
Add source file option for {add,remove}-tags
This patch adds a '--from' option to the {add,remove}-tags commands thatallows the command to read from a file or from stdin (when passing adash for the filename).
Update man pages for the tags operations
This adds documentation on the {list,add,remove}-tags commands to thegnt-{cluster,node,instance} man pages.
Change gnt-cluster.sgml to use refsect2
This brings this man page in conformity to gnt-node and (partially) tognt-instance.
Implement command-line tags support
This patch adds generic functions for tag manipulations to cli.py andmodifies gnt-{cluster,node,instance} to export {list,add,remove}-tagscommands that use those.
Change tags add/remove to process multiple tags
This patch changes the tags opcodes to work with multiple tags at onceinstead of only one. As such, the opcodes and some parameters arerenamed.
Fix super() calls for objects.Cluster
Fix tags operations for instances
Extend GenericMain with a way to override options
This allows scripts to pass options to generic functions (options thatare not visible in the command line).
Don't remove Makefile.in when doing maintainer-clean.
Use indenting if supported by simplejson.
Fix “make distcheck”.
- Move symlink to “ganeti” to top dir- Add ganeti.config_unittest.py to tests to be run- Make sure everything is built before tests are run
Add function to list files in a directory, excluding those beginning with adot.
Remove redundant check.
This isdir() check leads to a broken error message. Even fixing it creates somecases in which the error message is nebulous and unclear while removing itmakes this situation be dealt with a lot better by the _OSOndiskVersion checks....
Forgotten files from last commit, NEWS and Makefile.am.
Reviewed-by: iustinp, ultrotter
Ship (and display) path for InvalidOS errors too.
- Document the expected change to errors.InvalidOS- Always pass the additional argument- Modify DiagnoseOS output to show the path
Reviewed-by: iustinp, imsnah
Change configuration storage format from Pickle to JSON.
- Add NEWS file with major changes between versions.- Bump RPC version number- No longer serialize in RPC, but just convert to dict
Old Pickle based configuration files can be converted using the cfgupgrade...
Fix OS Diagnose in light of the new OS Search path (Part One).
As of now only the last OS was taken into consideration by diagnose, fix bystoring them all and displaying for now only the first. Also display the sourcepath for valid OSes.
Second part of the OS search path cleanup
Abstract the _OSSearch function, to look for an OS in the search pathMake OSFromDisk accept an optional base_dir, rather than the os_dir itself
Make parameter os_dir mandatory for _OSOndiskversion.
First part of the OS search path cleanup. _OSOndiskversion is only ever calledonce, and with that argument set, so let's make it mandatory.
Add warning on gnt-node add operation.
People might not have read all the documentation and might not expect their ssh configurationand specially keys to be changed. Adding this warning will inform them before it happens.
Print automake warnings.
Import utils into unittest.
Change constants.OS_DIR with constants.OS_SEARCH_PATH which includes all thedirectories which can contain OS scripts.
The list defaults to the current one but can be changed at configure time.
Make the default export path configurable.
This is needed to improve FHS compliance for distribution integration.The need was discussed on the alioth pkg-ganeti project.
Prevent race condition in CreateBackup().
Add more QA tests.
Added tests:- “gnt-cluster getmaster”- “gnt-cluster version”- “gnt-instance list”- “gnt-instance reinstall”
Specify in the helpstring that --with-ssh-initscripts expects an argument
Pass required ip_check parameter to OpCreateInstance in gnt-backup.
Enhance QA.
- Test “gnt-backup export” and “gnt-backup import”.- Move “ResolveInstanceName” to qa_utils.py.- Fix tests for “ganeti-watcher”.- Make instance shutdown and startup configurable.
Integrate Leonardo's LSB init script patch
Reviewed-By: imsnah
Rename constants for SSH init script by Iustin's request.
Ignore man/*.in.