Fix super() calls for objects.Cluster
Reviewed-by: imsnah
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).
Use indenting if supported by simplejson.
Reviewed-by: iustinp
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....
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...
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.
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().
Reviewed-by: ultrotter
Rename constants for SSH init script by Iustin's request.
Add configure option for init.d/ssh script. This is useful for distributionswith the script named differently than Debian.
Implement to/from dict conversion for ConfigObject(s)
This change allows instances of ConfigObject and its children to beconverted to and from standard python types. This will allow easierupgrade of the configuration and use of any serialization protocol (not...
Change class hierarchy in objects.py
It makes sense to make the TaggableObject a child of the ConfigObject,since in this case we can derive the Instance, Node and Cluster objectsonly from the TaggableObject and have a cleaner hierarchy.
For consistency child classes will have to declare their slots by adding...
Remove requirement that host names are FQDN
We currently require that hostnames are FQDN not short names(node1.example.com instead of node1). We can allow short names as longas: - we always resolve the names as returned by socket.gethostname() - we rely on having a working resolver...
Move a constant from ganeti-master to constants.py
The EXIT_NODESETUP_ERROR is a useful constant and ganeti-watcher coulduse it too. This patch moves it to constants.py and modifed theganeti-master script to use it from there.
Add slots on TaggableObject
Unless we use slots on all parents, we don't get the benefits thatslots bring. This patch adds this attribute to the TaggableObject sothat Instances, Nodes and the Clusters behave as intended.
Reviewed-by: schreiberal,imsnah
Improve the cli.AskUser() function
This patch improves the AskUser function by allowing it to: - choose from multiple choices (instead of only y/n) - give help to the user - preserve line breaks and whitespace formatting in the message
With this patch, an instance removal looks like this:...
Allow 'add instance' to not start the new instance
This patch allows 'gnt-instance add' to not start the newly-createdinstance. It also allow 'gnt-instance add' and 'gnt-backup import' tonot check for IP conflicts (only when not starting the instance)....
Change resolved hostname from dict to a class
The current result of utils.LookupHostname() is a dict, but this doesnot allow static checkers to check the correctness of the code. Thispatch introduces a new class names HostInfo and changes LookupHostname...
Implement cluster rename operation
This patch adds a new OpCode (and corresponding LU) that implements thecluster rename functionality.
This is done by shutting down the master role, making the needed sstoremodifications and distributing the changed files to all nodes, and then...
Cleanup up selective imports for utils and utils unit test.
A few minor fixes in backend.py
This uses the recently-added Instance.FindDisk() method instead ofhard coded find-disk code.
It also renames one parameter to AddNode from ssh to sshkey in order notto shadow the ganeti.ssh module.
Implement instance rename operation
This patch adds support for instance rename operation at all remaininglayers: RPC, OpCode/LU and CLI.
Added TcpPing to do ping-alike via TCP connect(2) with defined source address.To be used to replace the currently fping(8) based reachability test.
Add support for rename operation in the OS API
This patch adds support for renaming at OS level. Because of this, weneed to bump up the version of the OS api from 4 to 5.
The patch also documents the new script interface in theganeti-os-interface(7) man page and adds a section on upgrading the OS...
Add rename instance support to ConfigWriter
This patch adds support for renaming instances to the ConfigWriterclass. It's needed in here in order to guarantee that we don't lose theinstance during the rename (the instance will be there, either with the...
Change OpQueryNodes nodes attribute to names
Change this to have the exact same parameters as OpQueryInstances.
Also fix burnin which is broken since r146.
Enable LUQueryInstances to work with a given list of instances
As per the changes to LUQueryNodes, the QueryInstances LU is modified toaccept a list of instances for which to compute and return information.
Remove OpQueryNodeData and LUQueryNodeData
Now that LUQueryNodes supports all the functionality of LUQueryNodeData,let's migrate gnt-node.ShowNodeConfig to use it and remove all traces ofOpQueryNodeData and LUQueryNodeData.
Change LUQueryNodes to return raw values and support selective listing
LUQueryNodes it's very similar to LUQueryNodeData, but it lacks twofeatures: - instance list (it has count though), both primary and secondary - selective node listing
In order to support these features, we change it to return raw values...
Change _GetWanted* to return names instead of objects
On closer look, all except one of the current users of _GetWantedNodes areusing only the name of the nodes and throw away the other attributes. It makessense to make this function return only the name list (as in the future this...
Move string formatting out of LUQueryInstances
Currently, LUQueryInstances will provide strings for its results. This makes ithard for other consumers than "gnt-instance list" to use the OpQueryInstancesopcode for whatever they wish to.
The change moves the formatting in five of the six cases where this happens to...
Fix the ssh change which breaks remote ssh commands
Explanation: since we use lists and not a string, every argument we giveis passed unchanged to the remote shell. So, for example, passing'/etc/init.d/ganeti restart' to the remote shell, it will try to run the...
Change the way how locales are overridden:- Set only LC_ALL, it overrides any other variable- Restore environment after unittest
Clone cmdlib._GetWantedNodes into _GetWantedInstances
This duplicates _GetWantedNodes to _GetWantedInstances, after doing somechanges to it: - fix an indentation error that should result in only the last node name passed being chosen - change the function to have a single return statement...
Fix docstrings of many opcodes
Filters out LANG and LC_* on RunCmd
This filters out the LANG and LC_ variables from the environment of programsexecuted by RunCmd, in order to get consistent output of execute programs likelvs, etc.
- Don't build .tar.bz2, we only distribute .tar.gz anyway.- Clean generated files on “make maintainer-clean”.- Build _autoconf.py and ganeti.initd on “make all”.
Make import/export use the auxiliary ssh library to build the remote commands.
This avoids forgetting some parameters, as it's happening right now(the correct known host file is not being passed)
In order to do so we split SSHCall into an auxiliary BuildSSHCmd which builds...
Add function to get all local IP addresses, will be used in cmdlib.py.
Reviewed-by: schreiberal
Use _autoconf.py instead of version.py, generated by Makefile with morevariables. The underline is there to mark it as a private module.
- Generic automake cleanup- Bump version number to 1.2b2- Add version.py file generated from version.py.in by autoconf
Switch utils.RunCmd from popen2 to subprocess
This changes the implementation of RunCmd from using the popen2 moduleto using the (new in 2.4) subprocess module.
This is helpful because the subprocess module has more advanced featuresthan popen2, the most important ones being the ability to run code in the...
Fix mdadm -D output compatibility issues.
Also add some debugging output.
- Check for secondary node before doing a failover.- Replace magic values by constants.
Add a safety check to the backend.AddOSToInstance
This changes a ';' to '&&' to make sure we run the create script fromthe correct directory.
Add one more check on cluster init.
This adds a check that the initial node's IP name doesn't resolve to aloopback address (127.x.y.z).
Also remove an unused variable.
Document kernel selection method
This changelist add: - documentation on how to select the kernel and initrd (if needed) for instances - support in hypervisor.py for the initrd - adds note about internet-connectivity and debootstrap requirements...
Refuse nodes with non-FQDN hostnames.
This changes the cluster init and node join to refuse a node that has adifferent hostname than what the resolver returns.
Fix compatibility problems with mdadm-2.5.6
This fixes a compatibility problem with recent mdadm (2.x?) byreimplementing the zero-ing of the superblocks in ganeti itself.
Rework ssh known-hosts handling.
This changes: - cluster setup, we no longer edit /etc/ssh/ssh_known_hosts but our own file - node add, we no longer remove root's known_hosts (twice) - gnt-instance console, both the LU and the script: since now the ssh...
Improve LURunClusterCommand
This function used a hand-coded ssh call to remote nodes. Fix it to use thessh.SSHCall function, and in the process drop the command field from theresults, as it's too verbose and we can use (in gnt-cluster) what we passed in....
Fix one wrong usage of _GetWantedNodes
_GetWantedNodes is used wrongly by the LUClusterCopyFile. This fixes that.
Fix typo.
Reviewed-by: iustin
Disable hashing of the ssh keys.
In case we use StrictHostKeyChecking=ask, also add HashKnownHosts=no so thatdebugging is easier. The nodes to which we are connecting are anyway visible in/etc/ssh/ssh_known_hosts.
Add support for listing instance disk sizes.
A CheckPrereq method had one unconverted "return 1" statement. Change it to theappropriate raise.
Change cli.OutputTable to cli.GenerateTable
Since the table generation might be useful elsewhere, let's change it toreturn the data instead of directly printing it.
Its callers have also been updated.
Some small fixes.
It fixes the main Makefile.am to create $localstatedir/{lib,log}/ganeti.It fixes the testing Makefile.am after the rename fake_config.py ->mocks.py. It strips the output of "ip link show" to have a nicer outputif the master netdev does not exist.
Style changes for pep-8 and python-3000 compliance.
This changes the raising of exceptions from: raise Exception, valueto raise Exception(value)
as the first form will be removed in python-3000 and the second form ispreferred now.
The changes also involve a few cases of changing from raising standard...
Implement tag support for cluster, nodes and instances.
This is only the backend part, from the command line the tags can't beread/modified yet.
Don't bail out if node isn't there on “gnt-node volumes”.
Prepare for the tags implementation: - add an Update method on the ConfigWriter class; - make the AddInstance method not log disks for diskless types (helps with testing) - implement limited testing for the ConfigWriter with focus on the new Update method
Re-stat the config file when we write it so that the next _OpenConfig()won't reread it if not modified by someone else.
Add instance name to LVM volume as a tag.
Implement a standard way of getting the cluster object from theconfiguration.
Change logival volume names to not be based on the instance's name, butinstead use an UUID prefix and a suffix denoting the disk iv_name(sda/sdb) and possibly it's type (data/meta).
Put synchronization speed into constant.
Put default bridge into constant.
Add configuration upgrade utility.
Implement setitem for ConfigObject to add container protocol compatibility.
Fix issues reported by pylint.
Unify environment variables for instance related hooks.
Check for instances on “gnt-cluster destroy”.
- Implement “gnt-instance reinstall --os-type=…”- Add the command to gnt-instance.sgml
Fix the "gnt-cluster getmaster" command by making the LuQueryClusterInforunnable on non-master nodes (and remove the list of instances and nodesreturned by it, that information can be retrieved by other opcodes).
Also, remove the node/instance list from "gnt-cluster info" as it...
Move the cluster name from ConfigWriter to SimpleStore.
Reason: if left ConfigWriter, nodes don't know to which cluster they belong.This will bite us later when we'll revisit node join operation.
Cons: we lose the cluster name from the config file, which means a...
- Move --force option to cli.py- Implement “gnt-instance reinstall”- Fix two typos
Don't pass master_node
Comment formatting updates.
The master_node is no longer stored in the config file (but in sstore)and all users have been converted, let's remove it from the slots of thecluster object.
Also let's move the tcpudp_port_pool to the cluster object.
Get ports from configuration if there are some.
It seems the _CheckNodesDirs function is no longer used. Let's remove it.
Since the watcher can run on all nodes, let's get rid of the cron filehandling, as it can be static and outside of ganeti.
This also means we can get rid of a lot of infrastructure too: - the master/node config files checkers - one rpc function
Make the ganeti-watcher exit gracefully if it's not run on the master.
Add description, fix indentation.
Use generic function to output tables.
- Implement “gnt-node volumes”- Create all --output options using a constant- Put node checking code from opcodes into a single function- Do the same for output fields
Big change/cleanup in relation to the master startup: - move the master node name from the ConfigWriter to SimpleStore (all nodes need this, and it was the only thing pulled in from the ConfigWriter on nodes) - fix mcpu.py and the testing w.r.t. this change; for testing, rename...
Do the secondary check and subsequently allocate the drive on all availablelogival volumes. This lets you use more than one when none of them can supportyour full drive size.
Reviewed-By: iustinp
Fix a typo in an error message, and actually pass it its parameters.
Reviewed-By: imsnah
Output instance name in error message instead of object representation.
Fix calls to _GenerateMDDRBDBranch.
Check for memory size requirements before failing over an instance.
Implement space requirement checking before creating/importing an instance.