Dimitris Aragiorgis [Mon, 29 Oct 2012 19:00:06 +0000 (21:00 +0200)]
Simplify GenerateFree in network module
GenerateFree now returns the first available IP in the network
or raises AddressPoolError if it is full.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 29 Oct 2012 18:39:58 +0000 (20:39 +0200)]
Replace string values with proper constants
_UnlockedCommitIp is used either for releasing or reserving an
IP inside a network. New constants RELEASE_ACTION/RESERVE_ACTION
are used to decide which is the case.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 29 Oct 2012 18:10:04 +0000 (20:10 +0200)]
Simplify mac generation funtions
Introduce new config method _UnlockedGetNetworkMACPrefix and refactor
original _GenerateOneMAC so that it takes prefix as an optional argument
and returns a function that actually generates a MAC. If prefix is not
given or None it uses the cluster level default.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Wed, 24 Oct 2012 13:27:49 +0000 (16:27 +0300)]
Fix a bug in LUNetworkAdd concering needed_locks
Fix network client to pass conflicts_check to the opcode.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Tue, 16 Oct 2012 13:54:34 +0000 (16:54 +0300)]
Fix OP_RESULT for OP_NETWORK_QUERY
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Tue, 16 Oct 2012 12:53:36 +0000 (15:53 +0300)]
Allow passing 'none' for network_type option
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Tue, 16 Oct 2012 11:01:10 +0000 (14:01 +0300)]
Fixes to pass unittests (make check)
Conflicts:
doc/rapi.rst
lib/ovf.py
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Tue, 16 Oct 2012 05:51:54 +0000 (08:51 +0300)]
Export nic.network during gnt-backup export
Modify FinalizeExport() in backend.py to export nic.network as well.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 15 Oct 2012 18:19:28 +0000 (21:19 +0300)]
Fix CIDR opcode checks to accept 'none' value
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 15 Oct 2012 14:50:00 +0000 (17:50 +0300)]
Export serial_no of networks/instances in hooks
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 15 Oct 2012 14:25:04 +0000 (17:25 +0300)]
Export serial_no and uuid in network queries
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 15 Oct 2012 13:54:31 +0000 (16:54 +0300)]
Fix locks in network LUs
Acquire corresponding instance locks if conflicts_check is True.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Wed, 3 Oct 2012 15:35:42 +0000 (18:35 +0300)]
Check for existing networks/groups in Network LUs
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Fri, 27 Jul 2012 07:50:04 +0000 (10:50 +0300)]
Add tags in network objects
Support:
- gnt-network add --tags.
- gnt-network list-tags/add-tags/remove-tags/.
- gnt-network list -o +tags
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 18 Jun 2012 16:05:28 +0000 (19:05 +0300)]
Change default fields for network listing
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Thu, 7 Jun 2012 15:51:34 +0000 (18:51 +0300)]
Pass detailed network info in hooks
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Wed, 6 Jun 2012 12:57:37 +0000 (15:57 +0300)]
Pass netinfo in rpcs
If a nic has a network field then encapsulate a network object in
netinfo slot for every rpc. This is needed to pass network info to
scripts managing nics (kvm-vif-bridge).
Introduce _BuildNetworkEnv()
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Tue, 5 Jun 2012 23:08:11 +0000 (02:08 +0300)]
cfgupgrade for networks
Add networks slot in config data.
Add networks slot in nodegroups.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Tue, 5 Jun 2012 23:03:08 +0000 (02:03 +0300)]
Use network's mac prefix
Modify existing GenerateMAC so that it takes network as an argument.
Substitute _GenerateOneMAC with a decorator _GenerateMACPrefix
that chooses the prefix (network's or cluster's) and wraps
_GenerateMACSuffix that generates the three remaining bytes.
Check mac prefix validity when adding/modifing a network.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 20:52:31 +0000 (23:52 +0300)]
Include networks in Makefile and bash completion
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 20:51:44 +0000 (23:51 +0300)]
Add gnt-network man page
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 20:20:09 +0000 (23:20 +0300)]
Rapi support for networks
Support:
- GetNetwork(s)
- CreateNetwork
- ConnectNetwork
- DisconnectNetwork
- RemoveNetwork
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 20:15:42 +0000 (23:15 +0300)]
ss_conf support for networks
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 20:09:27 +0000 (23:09 +0300)]
Introduce client support for networks
gnt-network is used to manipulate and handle networks that
currently provides the following operations:
* Add a new network:
gnt-network add --network=1.2.3.0/28 --gateway=1.2.3.1
--add-reserved-ips=1.2.3.4,1.2.3.5 testnet
* Remove an existing network:
gnt-network remove testnet
* Modify an existing network:
gnt-network modify --gateway=1.2.3.6
--network-type=private
--network6=2001:648::/64
--gateway6=none testnet
--add-reserved-ips=1.2.3.10,1.2.3.10,
--remove-reserved-ips=1.2.3.20
testnet
* Connect an existing network to a nodegroup:
gnt-network connect testnet default bridged br100
gnt-network connect testnet <nodegroup> <mode> <link>
(pass all for <nodegroup> to connect to all nodegroups)
* Disconnect an existing network from a nodegroup:
gnt-network disconnect testnet <nodegroup>
(pass all for <nodegroup> to disconnect from all nodegroups)
* List available networks:
gnt-network list
* Show network info:
gnt-network info [testnet]
Introduce new option NOCONFLICTSCHECK_OPT for not checking for
conflicting IPs. Using this might cause data inconsistency.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 20:03:44 +0000 (23:03 +0300)]
Modify instance client to support networks
Add --no-conflicts-check option.
Modify instance query methods to return nic's network info.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 19:58:12 +0000 (22:58 +0300)]
Peripheral changes for networks
Specifically:
* export a new environment variable for the gnt-os-interface
* export a new environment variable for KVM specific scripts
* ovf support for networks
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 19:39:53 +0000 (22:39 +0300)]
Modify LUInstanceSetParams() to support networks
Keep backwards compatibility just like LUInstanceCreate() and
support network parameter for NIC object.
Add ec_id argument in Update() to be able to commit temporary
IPs that were previously reserved.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 19:37:12 +0000 (22:37 +0300)]
Modify RemoveInstance() to support networks
Release any IPs held the instance before actually removing.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 19:31:30 +0000 (22:31 +0300)]
Modify LUInstanceCreate to support networks
Implement backend support, to export the IP pool management
functionality to the clients. When the new NIC parameter 'network'
is given, the ippool management system is triggered.
If a NIC belongs to a network, it inherits the netparams
(mode, link) as its nicparams. If a network is requested, then
no 'mode' or 'link' should be specified. Backwards compatibility
is preserved, if 'network' parameter is omitted.
Examples for IP pool management system:
--net 0:network=net1
for an IPless NIC in a network
--net 0:ip=pool,network=net1
for automatically generated IP inside the network
--net 0:ip=1.2.3.4,network=net1
for specific IP inside the network
--net 0:network=none
for IPless NIC with default nicparams
Examples for traditional assignment:
--net 0:ip=1.2.3.4,link=br100,mode=bridged
--net 0:ip=none,link=rt2,mode=routed
--net 0
Check for conflicting IPs to ensure IP uniqueness inside nodegroups.
IAllocator should be extended to become network aware. If an instance
has a NIC inside a network, then IAllocator must pick a node that its
nodegroup is already connected with that network.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 19:24:47 +0000 (22:24 +0300)]
Config methods for reserving/releasing IPs
Use TemporaryReservationManager for IP handling to ensure
config data consistency.
Implement:
- methods for reserving/releasing IPs
- _UnlockedCommitTemporaryIps()
- CheckIPInNodeGroup() used for conflicting IPs
- GetGroupNetParams() used for inheriting netparams.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 18:08:36 +0000 (21:08 +0300)]
Implement network/nodegroup mappings
LUNetworkConnect() connects a network to a nodegroup and defines
its netparams (mode and link). Specifically:
* Check if network already exists
* Check if netparams are valid
* Check if already connected to the same nodegroup
* Produce errors if any conflicting IPs found
* Update the 'networks' slot in NodeGroup config object
with the network UUID and netparams requested. E.g.
nodegroup_uuid {
networks {
network_uuid: {mode: 'bridged', link: 'br100'}
}
}
LUNetworkDisconnect() unmaps a network from a nodegroup:
* Produce errors if an instance has a NIC with IP inside the network
* Remove corresponding entry in 'networks' slot of NodeGroup object
Check for conflicting ips can be avoided with corresponding option.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 18:05:03 +0000 (21:05 +0300)]
Implement LUNetworkSetParams
Support modifying all network parameters except for network (ip range)
Cannot modify gateway and reserved ips at the same time.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 18:02:55 +0000 (21:02 +0300)]
Implement LUNetworkQuery
Summarily list all existing networks
Supply detailed info for every existing network
- List used/free IPs
- List instances with NICs assigned to the corresponding network
- List NIC index and IP for the above instances
Implement complementary config methods for retrieving networks.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 15:54:02 +0000 (18:54 +0300)]
Basic IP pool management logic
Implement LUs for corresponding opcodes:
* LUNetworkAdd:
- Check for IP validity
- Reserves all necessary IPs
- Create new Network config object
* LUNetworkRemove:
- Checks if connected to any nodegroup
- Remove a Network config object
Implement basic config methods:
* LookupNetwork()
- Given the network name return the network UUID
* AddNetwork()
- Add a new network to the config
* RemoveNetwork()
- Remove a network from the config
Add new locking level: LEVEL_NETWORK
Add various useful config methods for retrieving network info.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 14:33:22 +0000 (17:33 +0300)]
Introduce new module for IP pool management
Add new library module lib/network.py.
Introduce new class: AddressPool.
AddressPool implements all operations needed for managing IPs
inside the IP pool.
Given a Network config object (nobj), the class:
* initializes the corresponding IP pool object via
network.AddressPool.InitializeNetwork(nobj)
* obtains the corresponding IP pool object via
network.AddressPool(nobj)
* manipulates IPs inside the pool
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Dimitris Aragiorgis [Mon, 4 Jun 2012 13:50:42 +0000 (16:50 +0300)]
IP pool related objects, opcodes and constants
Config objects:
* Introduce L{Network} with
- IPv4 network field (mandatory)
- IPv4 gateway, IPv6 (network/gateway), mac prefix, type (optional)
* Modify existing config objects to support networks:
- Add new slot 'network' to L{NIC} config object
- Add new slot 'networks' to L{NodeGroup} config object
Opcodes:
* Introduce new opcodes for networks
- add/remove/modify/query/connect/disconnect.
* In InstanceCreate/InstanceSetParams add conflicts_check option
Constants:
* INIC_PARAM 'INIC_NETWORK'
* NIC_IP_POOL for automaticaly obtain an IP from a pool
* NETWORK_TYPE_PUBLIC/PRIVATE for network types
Checking of network_type handled by the opcode parameter validation.
Introduce _CheckCIDR*Notation() functions for network parameters validation.
Signed-off-by: Dimitris Aragiorgis <dimara@grnet.gr>
Constantinos Venetsanopoulos [Wed, 22 Aug 2012 11:16:48 +0000 (14:16 +0300)]
Fix computation of disk sizes in _ComputeDiskSize
Currently, hail fails with FailDisk when trying to add an instance
of type: 'file', 'sharedfile' and 'rbd'.
This is due to a "0" or None value in the corresponding dict inside
_ComputeDiskSize, which results in a "O" or non Int value of the
exported 'disk_space_total' parameter. This in turn makes hail fail,
when trying to process the value:
- with "Unable to read Int" if value is None (file)
- with FailDisk if value is 0 (sharedfile, rbd)
The latter happens because the 0 value doesn't match the instance's
IPolicy, since it is lower than the minimum disk size.
The second problem still exists when using adoption with 'plain'
and 'blockdev' template and will be addressed in another commit.
Signed-off-by: Constantinos Venetsanopoulos <cven@grnet.gr>
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Iustin Pop [Wed, 15 Aug 2012 09:46:30 +0000 (11:46 +0200)]
Add verification of RPC results in _WipeDisks
Due to an oversight, the pause/resume sync RPC calls in _WipeDisks
lack the verification of the overall RPC status, and directly iterate
over the payload. The code actually doing the wipe does verify
correctly the results. This can result in jobs failing with a hard to
diagnose:
OpExecError ['NoneType' object is not iterable]
instead of proper "RPC failed" message.
This patch adds a hard check on the pause call, but for the resume
call it just logs a warning if the RPC failed; the rationale being
that if we can't contact the node for pausing the sync, it's likely
wiping will fail too, but after the wipe has been done, we can
continue.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Fri, 10 Aug 2012 09:49:09 +0000 (11:49 +0200)]
Add test for checking that all gnt-* subcommands run OK
This is a bit of a shell munging trickery, but works for now. Making
it more generic can be done later.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Fri, 10 Aug 2012 09:38:12 +0000 (11:38 +0200)]
Fix double use of PRIORITY_OPT in gnt-node migrate
This breaks the command, as optparse considers that an error.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
René Nussbaumer [Wed, 8 Aug 2012 14:43:13 +0000 (16:43 +0200)]
Add new Makefile target to rebuild the whole dist
Due to the fact how the automake system works it doesn't rebuild already
prebuild files in distcheck. This lead to a bug, where a rebuild of the
documentation was failing because we missed the fact that the files were
missing from the archive.
By adding distrebuildcheck we workaround that issue by running a
maintainer-clean which also removes prebuild files.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Tue, 7 Aug 2012 13:40:59 +0000 (15:40 +0200)]
Add missing rst files to Makefile.am
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Iustin Pop [Fri, 27 Jul 2012 10:59:54 +0000 (12:59 +0200)]
Release version 2.6.0 (final)
Phew, it wasn't easy, but…
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
Iustin Pop [Thu, 26 Jul 2012 19:53:26 +0000 (21:53 +0200)]
Fix 'explicitely' common typo
It seems that 'explicitely' is wrong, and that the right form is
'explicitly'. This is just fixing the typo plus adjusting affected
paragraphs.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
Iustin Pop [Thu, 26 Jul 2012 14:43:18 +0000 (16:43 +0200)]
Fix issue in LUClusterVerifyGroup with multi-group clusters
In case LUClusterVerifyGroup is run on a group which doesn't contain
the master node, the following could happen:
- master node is selected due to the explicit check
- if the order of nodes in the 'absent_nodes' list is such that the
master node is the first in it, then we'll select (again) the master
node
- passing duplicate nodes to RPC calls will break due to RPC
internals; this should be fixed separately, but in the meantime we
just refrain from passing such duplicates
This patch should not change the semantics of the code, since it
wasn't guaranteed even before that we find a vm_capable node.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
Iustin Pop [Thu, 26 Jul 2012 11:24:58 +0000 (13:24 +0200)]
Add QA test for node group modification of ndparams
Additionally, we run hbal if the htools tests are enabled (new
key). Note that hbal will directly exit, since there are no instances,
but at least it will load and parse the group details.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
Iustin Pop [Thu, 26 Jul 2012 11:17:41 +0000 (13:17 +0200)]
Fix node group modification of node parameters
Commit
904b3bfe tried to fix the deletion of custom ndparams from
group, but instead broke both modification and deletion: because we
run ForceDictType on self.op.ndparams instead of the updated
new_ndparams, we can neither delete nor set properly spindle_count
(since it won't be coerced to int).
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
Iustin Pop [Tue, 24 Jul 2012 16:44:59 +0000 (18:44 +0200)]
Merge commit 'v2.5.2' into stable-2.6
* commit 'v2.5.2':
Fix RST formatting in NEWS file
Update NEWS and bump version for release 2.5.2
Fix boot=on flag for CDROMs
KVM: only pass boot flag once
Conflicts:
NEWS (trivial, merged the entries)
configure.ac (trivial, kept ours)
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
Iustin Pop [Tue, 24 Jul 2012 16:02:33 +0000 (18:02 +0200)]
Fix RST formatting in NEWS file
*FileID is interpreted as a start-of-bold, without corresponding end
marker. Sorry for not catching it in the first place.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Balazs Lecz <leczb@google.com>
Iustin Pop [Tue, 24 Jul 2012 15:52:23 +0000 (17:52 +0200)]
Update NEWS and bump version for release 2.5.2
This is a trivial release, with just bug fixes, so a small change log.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
Iustin Pop [Mon, 23 Jul 2012 12:46:08 +0000 (14:46 +0200)]
Fix boot=on flag for CDROMs
This generalises commit
4304964a to cdroms too, since they have
somewhat the same logic. We just abstract the needs_boot_flag into a
separate variable, and then reuse it in the cdrom section.
Note that the logic of what 'if=' type to pass to KVM was very
convoluted, and (I think) incorrect; I went and cleaned it to be more
consistent.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
Iustin Pop [Mon, 23 Jul 2012 11:56:09 +0000 (13:56 +0200)]
KVM: only pass boot flag once
This addresses issue 230: passing two methods of booting to KVM can,
depending on the KVM version, confuse it.
Note that commit
4304964a introduced a partial fix for this (but only
for disks, and keyed on KVM versions). However, it didn't fix cdrom
booting, which still fails with the same error, so let's fix it more
generically; we still leave the per-disk check since that is about
-boot c versus -drive …,boot=on rather than two boot methods.
Patch is based on the one submitted by Vladimir Mencl, many thanks!
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
Iustin Pop [Fri, 20 Jul 2012 20:14:40 +0000 (22:14 +0200)]
Ensure a stable content of the bash completion file
Currently, the order of commands in the bash completion file is
random, because the sub-commands are not sorted. This makes it harder
to investigate the differences in packaged Ganeti or in installed
Ganeti, since chunks in this file will have a random order.
To fix this, we sort the subcommands based on the first subcommand in
a given group ('first' also in sorted order); this results in a stable
contents of file, as tested by building it many times and checking for
differences.
The patch also does a few other minor changes to the file
(e.g. updating copyright years, etc.).
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Guido Trotter <ultrotter@google.com>
René Nussbaumer [Thu, 19 Jul 2012 12:21:53 +0000 (14:21 +0200)]
Release Ganeti 2.6.0 rc4
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Thu, 19 Jul 2012 11:56:59 +0000 (13:56 +0200)]
Prepare NEWS for Ganeti 2.6.0rc4
Another release candidate is coming.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Thu, 19 Jul 2012 08:40:46 +0000 (10:40 +0200)]
Add some rudimentary node group ipolicy checks
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Thu, 19 Jul 2012 08:26:13 +0000 (10:26 +0200)]
Fix setting ipolicy on node groups
On node groups we don't have the std field. However, the InstancePolicy
object always verifies that the std value is within a given range. As we
fill it up with defaults if not set (as it happens to be on node groups)
and the min value is higher than the default std value (taken from
constants.py) we fail.
We overcome this situation by simply let the function know if we want to
verify the std value at all. If we don't want to verify std, we just set
it to a compliant value (min_v) and continue.
We also slightly adapt the error message provided, as we don't have std
values on groups.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Iustin Pop [Thu, 19 Jul 2012 08:31:52 +0000 (10:31 +0200)]
Fix --no-headers for the new list-drbd command
Sorry, I forgot that with GenerateTable this needs to be handled
manually. Fixed now and tested in both ways.
(But to be honest, this should be abstracted in GenerateTable, instead
of the 'if' test in all its callers.)
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Wed, 18 Jul 2012 11:07:08 +0000 (13:07 +0200)]
Add a simple QA test for gnt-node list-drbd
This will be run only if 'haskell-confd' QA configuration has been
enabled.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Wed, 18 Jul 2012 09:44:48 +0000 (11:44 +0200)]
Add a new gnt-node command list-drbd
This uses confd to query the DRBD minors, which is very special; no
other command currently does so.
Since the backend is only implemented in the Haskell version of confd,
we have checks that 1) confd is enable, and 2) hs confd is also
enabled. If by mistake people do manage to query Python confd, the
error message will be clean:
Query gave non-ok status '2': not implemented
So nothing breaks in an "ugly" way.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Wed, 18 Jul 2012 09:35:05 +0000 (11:35 +0200)]
Implement a node to drbd minors query function
This can be queried remotely since it's a pure configuration query.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Mon, 16 Jul 2012 13:49:04 +0000 (15:49 +0200)]
Add a new unused confd query
This is not implemented currently.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Mon, 16 Jul 2012 12:59:40 +0000 (14:59 +0200)]
Add support for computing instance all/secondary nodes
This fixes an old FIXME. Since we now how actual DRBD configuration
data, we can finally compute the instance's secondary nodes.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Mon, 16 Jul 2012 12:11:03 +0000 (14:11 +0200)]
Add disk logical ID support in Objects.hs
This is a complex field, so we have to do a lot of manual work for now.
The complexity arises from the fact that the contents of the field,
and the way to parse it, depends on the disk type field, so we don't
have a single, static way of parsing it. Hence we needed the
extensions to the Template Haskell code.
Since we now can both load and save the disk type, we can remove the
in-memory (duplicate) disk type from the disk objects, relying only on
the logical ID to hold the type information.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Mon, 16 Jul 2012 11:51:20 +0000 (13:51 +0200)]
Fix a docstring in bdev's DRBD8 class
It seems this was not updated since the move to static minors…
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Mon, 16 Jul 2012 11:37:09 +0000 (13:37 +0200)]
Extend the Template Haskell loadFn model
Currently, we only allow field-by-field de-serialisation. Since we
have cases where information about how to un-serialise a field is
split across two JSON fields (e.g. disk type and disk logical_id,
hypervisor and hvparams, etc.), we need to pass the entire object to
custom read functions.
Furthermore, since we will have to generate two actual fields from the
single in-memory field, we need to extend the custom save function so
that they can generate additional fields beyond the "main" field value
they currently generate.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Mon, 16 Jul 2012 11:31:18 +0000 (13:31 +0200)]
Change how customFields are built
Instead of passing an expression (which cannot come from the current
module), we pass a name, which is allowed to reference functions from
the module we're in. Since we currently don't have custom fields, we
don't need to modify any callers.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Wed, 18 Jul 2012 09:31:39 +0000 (11:31 +0200)]
Implement lookup of partial names in Config.hs
This uses the recently-moved functions to implement partial lookup of
names on getNode and getInstance, similar to the Python codebase.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Wed, 18 Jul 2012 09:03:31 +0000 (11:03 +0200)]
Reorganise the lookup functions
Currently, the LookupResult, MatchPriority and related functions are
locate in Loader.hs, since (so far) only hbal needs them in the
selection of instances. However, with the new functionality on confd
side, we need these functions there too, but we don't want to import
Loader.hs (which pulls in lots of balancing-related code). So we move
all these function to BasicTypes.hs, since that module is a leaf one,
with no other dependencies.
Unittests are slightly adjusted (but they are still tested under the
'Loader' group).
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Mon, 16 Jul 2012 11:30:04 +0000 (13:30 +0200)]
Remove an unused function
This is not used, as we need a more complex serialisation, which is
done in the saveObjectField function.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Wed, 18 Jul 2012 12:18:12 +0000 (14:18 +0200)]
Ensure that disk.params is always defined (and a dict)
Commit
cce46164 fixed upgrading from other 2.6 versions, but
accidentally broke upgrading from 2.5 (disk.params was left as None,
which breaks FillDict). The simplest way to handle params is to always
set them to an empty dict (disregarding what they currently contain).
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
René Nussbaumer [Wed, 18 Jul 2012 11:34:36 +0000 (13:34 +0200)]
Another small consistency fix with if branches
While looking at the testability of this piece of code, I found another
consistency problem. We have two if branches instead of one, with
elif's.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Wed, 18 Jul 2012 09:13:09 +0000 (11:13 +0200)]
Fix inconsistency in the LUXI protocol w.r.t. args
This inconsistency was found during rebalancing. Hbal failed because,
Ganeti couldn't load the opcode. After digging through the cause, an
inconsistency with the "args" field in the LUXI protocol was triggered
by the TemplateHaskell side where it's done uniformed.
For SubmitJob and SubmitManyJobs we treat args as one argument,
containing the job definition. In every other LUXI call args is actually
a list of arguments. This patch fixes this consistency.
This change is NOT backwards compatible.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Tue, 17 Jul 2012 08:18:41 +0000 (10:18 +0200)]
Fix UpgradeConfig of Disk object regards disk params
This bug was found during disk parameter debugging. While looking at the
config some values seem present on the disk parameters, but that's not
expected behaviour. This patch fixes this, and also fixes the "broken"
configs automatically upon masterd restart.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Fri, 13 Jul 2012 11:46:34 +0000 (13:46 +0200)]
Make Ganeti 2.6.0 rc3 release
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
René Nussbaumer [Wed, 11 Jul 2012 12:29:06 +0000 (14:29 +0200)]
Allow reinstall even when secondaries are offline
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
René Nussbaumer [Wed, 11 Jul 2012 11:38:34 +0000 (13:38 +0200)]
Prepare NEWS file for Ganeti 2.6.0 rc3
Update NEWS regarding rc3 fixes and document changes in behaviour.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Agata Murawska [Mon, 9 Jul 2012 10:49:52 +0000 (12:49 +0200)]
QA updated to test instance removing when sec. is offline
Added test checking that it is possible to remove an instance with drbd
disk when non-primary node is offline.
Signed-off-by: Agata Murawska <agatamurawska@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Agata Murawska [Mon, 9 Jul 2012 09:00:53 +0000 (11:00 +0200)]
Ignore offline node errors when removing disks
When we delete DRBD disks from some instance, we do not want to get
errors due to nodes other than that instance's primary being offline.
Signed-off-by: Agata Murawska <agatamurawska@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Fri, 6 Jul 2012 13:59:19 +0000 (15:59 +0200)]
Allow instance disc activation with offline secondaries
Currently, this is not allowed, so one can't run a replace-disks; this
breaks any non-invasive method of recovering the redundancy of the
instance if its disks are already stopped (but it still works if the
disks on the primary are active). So let's fix this inconsistency.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
René Nussbaumer [Fri, 6 Jul 2012 09:35:24 +0000 (11:35 +0200)]
RAPI regression beparams/memory fix
For compatibility with the old Ganeti version, we want to keep the
beparams/memory field around for another release. This patch fixes this
regression.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Iustin Pop [Wed, 4 Jul 2012 15:41:01 +0000 (17:41 +0200)]
Fix redistribution of files w.r.t. offline nodes
Currently, _RedistributeAncillaryFiles computes two lists: the list of
online nodes (for all files redistribution), and the list of
vm_capable nodes, for hypervisor-specific files. However, the
vm_capable list includes offline nodes too, leading to warning
messages:
WARNING: Copy of file /etc/xen/xend-config.sxp to node node13.example.com failed: Node is marked offline
We fix this by trivially intersecting the vm_capable list with the
online one.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
René Nussbaumer [Wed, 4 Jul 2012 11:08:40 +0000 (13:08 +0200)]
Fix cluster verify error on master-ip-setup script
This error does not show up until we exceed the pool of master
candidates and have nodes which are not master candidates.
The background is that we check for master-ip-setup script on master
candidates and expect them not to be on the other nodes. However, we
distribute a default master-ip-script which break this assumption.
Furthermore, there's no reason why the file should just exists on the
master candidates.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
Iustin Pop [Sat, 30 Jun 2012 01:25:45 +0000 (18:25 -0700)]
Add a Makefile rule to test unclean git status
This is trivial, but can be used easily from automated builds to check
that the git tree is clean: files are not modified and untracked files
are not present.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
Iustin Pop [Sat, 30 Jun 2012 01:17:42 +0000 (18:17 -0700)]
Add test helpers to .gitignore
Commit
3096524e enabled building of test helpers, but forgot to add
them to .gitignore, resulting in "unclean" git status output.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
René Nussbaumer [Tue, 3 Jul 2012 11:55:33 +0000 (13:55 +0200)]
Fix a typo in NEWS
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Bernardo Dal Seno <bdalseno@google.com>
René Nussbaumer [Tue, 3 Jul 2012 08:26:03 +0000 (10:26 +0200)]
Release Ganeti 2.6.0rc2
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
René Nussbaumer [Thu, 28 Jun 2012 14:31:42 +0000 (16:31 +0200)]
Prepare NEWS file for 2.6.0 rc2
We are about to release another version of Ganeti 2.6, so we prepare the
NEWS file with the changes from rc1 to rc2.
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 23:00:03 +0000 (16:00 -0700)]
Update time on Haskell binaries after build
This patch works around an issue in our build system. Since we don't
use cabal or 'ghc -M', we don't track actual dependencies in our
Makefile; this in turn means that editing a file that only is used in
the main 'htools' binary will keep triggering 'ghc --make' for the
hconfd binary; and this actually takes a bit of time to look at all
the dependencies.
So to work around this, we add a touch after each ghc --make, such
that we trigger the unneeded build at most once.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Thu, 28 Jun 2012 22:54:36 +0000 (15:54 -0700)]
hcheck: add two simple type aliases for readability
The same types are reused a couple of times, so let's add a couple of
type aliases for easier change later and readability.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 22:48:47 +0000 (15:48 -0700)]
hcheck: rework output mode
Looking at the output of hcheck, in human readable mode, it looks like
it always starts with a blank line. This is not nice, so I wanted to
redo this to start cleanly.
However, looking at the code, I realised that we need some internal
cleanup; 'perGroupChecks' was doing both pure computation (computing
the score/stats) and I/O work (printing the stats), which is ugly, so
I split that in two; this allows perGroupChecks to be simpler, and we
can therefore first compute the group stats, and start the output with
the mode in which we run.
So right now, hcheck will first output whether we need to run a
rebalance, or if no-simulation is selected, etc., and only then
display the actual stats, making the output a bit more consistent.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 22:44:45 +0000 (15:44 -0700)]
hcheck: reword and fix typo in instance/offline msg
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 22:20:05 +0000 (15:20 -0700)]
Add hlint warning for wrong use of 'length'
While removing split instances check from hcheck, I saw a wrong use of
'length': this should only be used when one needs the actual length of
the list, and not when one wants to check whether the list is empty or
not (in that case, 'null' should be used).
To prevent this in the future, let's add a hlint hint for it, and fix
the warning it generates in hbal.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 22:15:46 +0000 (15:15 -0700)]
Remove can_rebalance functionality from hcheck
Since hbal can now run rebalances even in the presence of split
instances, we can remove this check and always run the rebalance.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 22:10:59 +0000 (15:10 -0700)]
Fix building of hcheck man page
The code used a space, not a tab, in Makefile.am, which means it
actually broke the variable declaring the man pages.
Furthermore, we add some blank lines in the man page, otherwise the
paragraphs will be run-in together.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 21:51:23 +0000 (14:51 -0700)]
Fix tiny typo in htools.rst
Backtracking through git blame, it turns out than commit
49148d15
changed "\fB20,102400,16384,4\fR" into "**B20,102400,16384,4**". But
of course that's a mistake, since the markup was \fB, not just \f.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Constantinos Venetsanopoulos [Wed, 27 Jun 2012 15:27:28 +0000 (18:27 +0300)]
Allow param `modify' during gnt-instance modify
With the new gnt-instance modify syntax for addition and removal of
disks/NICs on arbitrary indexes, we hit an assertion if the user
passes `modify' as one of the disk's parameters. E.g::
gnt-instance modify --disk 2:modify,size=3G instance1
gnt-instance modify --disk 3:add,size=1G,modify instance2
This patch fixes the bug, by allowing `modify' to be passed as a
parameter (as happens with `add' and `remove'), as long as it is
not done alongside `add' or `remove'. If so, it is treated in the
same way as if none of modify/add/remove is passed --> modify.
Signed-off-by: Constantinos Venetsanopoulos <cven@grnet.gr>
Signed-off-by: René Nussbaumer <rn@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Reviewed-by: Agata Murawska <agatamurawska@google.com>
Iustin Pop [Thu, 28 Jun 2012 04:56:11 +0000 (21:56 -0700)]
Correct a wrong --help option for --simulate
This was not update when the alloc policy was added to the parameter.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Thu, 28 Jun 2012 04:46:13 +0000 (21:46 -0700)]
Add a shell test for hbal and split instances
This is not perfect, as we only test that hbal completes successfully
and that it show a score improvement, but it's better than nothing.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>
Iustin Pop [Thu, 28 Jun 2012 00:51:51 +0000 (17:51 -0700)]
hbal: relax restrictions on split instances
The recent patch series on hcheck made me realise how much pain we
have due to hbal not being able to work (at all) with split instances.
This is sub-optimal; ideally, hbal would degrade its behaviour, but
not completely refuse to work. This patch does this, by marking any
split instances as not movable (since such instances most likely mean
that some manual intervention is done on then), but otherwise
proceeding with the rebalance of the selected node group.
Signed-off-by: Iustin Pop <iustin@google.com>
Reviewed-by: René Nussbaumer <rn@google.com>