180 |
180 |
c.run()
|
181 |
181 |
return c.getresult()
|
182 |
182 |
|
183 |
|
|
184 |
183 |
def call_bridges_exist(self, node, bridges_list):
|
185 |
184 |
"""Checks if a node has all the bridges given.
|
186 |
185 |
|
... | ... | |
196 |
195 |
c.run()
|
197 |
196 |
return c.getresult().get(node, False)
|
198 |
197 |
|
199 |
|
|
200 |
198 |
def call_instance_start(self, node, instance, extra_args):
|
201 |
199 |
"""Starts an instance.
|
202 |
200 |
|
... | ... | |
208 |
206 |
c.run()
|
209 |
207 |
return c.getresult().get(node, False)
|
210 |
208 |
|
211 |
|
|
212 |
209 |
def call_instance_shutdown(self, node, instance):
|
213 |
210 |
"""Stops an instance.
|
214 |
211 |
|
... | ... | |
220 |
217 |
c.run()
|
221 |
218 |
return c.getresult().get(node, False)
|
222 |
219 |
|
223 |
|
|
224 |
220 |
def call_instance_migrate(self, node, instance, target, live):
|
225 |
221 |
"""Migrate an instance.
|
226 |
222 |
|
... | ... | |
242 |
238 |
c.run()
|
243 |
239 |
return c.getresult().get(node, False)
|
244 |
240 |
|
245 |
|
|
246 |
241 |
def call_instance_reboot(self, node, instance, reboot_type, extra_args):
|
247 |
242 |
"""Reboots an instance.
|
248 |
243 |
|
... | ... | |
254 |
249 |
c.run()
|
255 |
250 |
return c.getresult().get(node, False)
|
256 |
251 |
|
257 |
|
|
258 |
252 |
def call_instance_os_add(self, node, inst, osdev, swapdev):
|
259 |
253 |
"""Installs an OS on the given instance.
|
260 |
254 |
|
... | ... | |
267 |
261 |
c.run()
|
268 |
262 |
return c.getresult().get(node, False)
|
269 |
263 |
|
270 |
|
|
271 |
264 |
def call_instance_run_rename(self, node, inst, old_name, osdev, swapdev):
|
272 |
265 |
"""Run the OS rename script for an instance.
|
273 |
266 |
|
... | ... | |
280 |
273 |
c.run()
|
281 |
274 |
return c.getresult().get(node, False)
|
282 |
275 |
|
283 |
|
|
284 |
276 |
def call_instance_info(self, node, instance, hname):
|
285 |
277 |
"""Returns information about a single instance.
|
286 |
278 |
|
... | ... | |
294 |
286 |
@param hname: the hypervisor type of the instance
|
295 |
287 |
|
296 |
288 |
"""
|
297 |
|
c = Client("instance_info", [instance])
|
|
289 |
c = Client("instance_info", [instance, hname])
|
298 |
290 |
c.connect(node)
|
299 |
291 |
c.run()
|
300 |
292 |
return c.getresult().get(node, False)
|
301 |
293 |
|
302 |
|
|
303 |
294 |
def call_all_instances_info(self, node_list, hypervisor_list):
|
304 |
295 |
"""Returns information about all instances on the given nodes.
|
305 |
296 |
|
... | ... | |
316 |
307 |
c.run()
|
317 |
308 |
return c.getresult()
|
318 |
309 |
|
319 |
|
|
320 |
310 |
def call_instance_list(self, node_list, hypervisor_list):
|
321 |
311 |
"""Returns the list of running instances on a given node.
|
322 |
312 |
|
... | ... | |
333 |
323 |
c.run()
|
334 |
324 |
return c.getresult()
|
335 |
325 |
|
336 |
|
|
337 |
326 |
def call_node_tcp_ping(self, node, source, target, port, timeout,
|
338 |
327 |
live_port_needed):
|
339 |
328 |
"""Do a TcpPing on the remote node
|
... | ... | |
397 |
386 |
)
|
398 |
387 |
return retux
|
399 |
388 |
|
400 |
|
|
401 |
389 |
def call_node_add(self, node, dsa, dsapub, rsa, rsapub, ssh, sshpub):
|
402 |
390 |
"""Add a node to the cluster.
|
403 |
391 |
|
... | ... | |
410 |
398 |
c.run()
|
411 |
399 |
return c.getresult().get(node, False)
|
412 |
400 |
|
413 |
|
|
414 |
401 |
def call_node_verify(self, node_list, checkdict, cluster_name):
|
415 |
402 |
"""Request verification of given parameters.
|
416 |
403 |
|
... | ... | |
422 |
409 |
c.run()
|
423 |
410 |
return c.getresult()
|
424 |
411 |
|
425 |
|
|
426 |
412 |
@staticmethod
|
427 |
413 |
def call_node_start_master(node, start_daemons):
|
428 |
414 |
"""Tells a node to activate itself as a master.
|
... | ... | |
435 |
421 |
c.run()
|
436 |
422 |
return c.getresult().get(node, False)
|
437 |
423 |
|
438 |
|
|
439 |
424 |
@staticmethod
|
440 |
425 |
def call_node_stop_master(node, stop_daemons):
|
441 |
426 |
"""Tells a node to demote itself from master status.
|
... | ... | |
448 |
433 |
c.run()
|
449 |
434 |
return c.getresult().get(node, False)
|
450 |
435 |
|
451 |
|
|
452 |
436 |
@staticmethod
|
453 |
437 |
def call_master_info(node_list):
|
454 |
438 |
"""Query master info.
|
... | ... | |
462 |
446 |
c.run()
|
463 |
447 |
return c.getresult()
|
464 |
448 |
|
465 |
|
|
466 |
449 |
def call_version(self, node_list):
|
467 |
450 |
"""Query node version.
|
468 |
451 |
|
... | ... | |
474 |
457 |
c.run()
|
475 |
458 |
return c.getresult()
|
476 |
459 |
|
477 |
|
|
478 |
460 |
def call_blockdev_create(self, node, bdev, size, owner, on_primary, info):
|
479 |
461 |
"""Request creation of a given block device.
|
480 |
462 |
|
... | ... | |
487 |
469 |
c.run()
|
488 |
470 |
return c.getresult().get(node, False)
|
489 |
471 |
|
490 |
|
|
491 |
472 |
def call_blockdev_remove(self, node, bdev):
|
492 |
473 |
"""Request removal of a given block device.
|
493 |
474 |
|
... | ... | |
499 |
480 |
c.run()
|
500 |
481 |
return c.getresult().get(node, False)
|
501 |
482 |
|
502 |
|
|
503 |
483 |
def call_blockdev_rename(self, node, devlist):
|
504 |
484 |
"""Request rename of the given block devices.
|
505 |
485 |
|
... | ... | |
512 |
492 |
c.run()
|
513 |
493 |
return c.getresult().get(node, False)
|
514 |
494 |
|
515 |
|
|
516 |
495 |
def call_blockdev_assemble(self, node, disk, owner, on_primary):
|
517 |
496 |
"""Request assembling of a given block device.
|
518 |
497 |
|
... | ... | |
525 |
504 |
c.run()
|
526 |
505 |
return c.getresult().get(node, False)
|
527 |
506 |
|
528 |
|
|
529 |
507 |
def call_blockdev_shutdown(self, node, disk):
|
530 |
508 |
"""Request shutdown of a given block device.
|
531 |
509 |
|
... | ... | |
537 |
515 |
c.run()
|
538 |
516 |
return c.getresult().get(node, False)
|
539 |
517 |
|
540 |
|
|
541 |
518 |
def call_blockdev_addchildren(self, node, bdev, ndevs):
|
542 |
519 |
"""Request adding a list of children to a (mirroring) device.
|
543 |
520 |
|
... | ... | |
550 |
527 |
c.run()
|
551 |
528 |
return c.getresult().get(node, False)
|
552 |
529 |
|
553 |
|
|
554 |
530 |
def call_blockdev_removechildren(self, node, bdev, ndevs):
|
555 |
531 |
"""Request removing a list of children from a (mirroring) device.
|
556 |
532 |
|
... | ... | |
563 |
539 |
c.run()
|
564 |
540 |
return c.getresult().get(node, False)
|
565 |
541 |
|
566 |
|
|
567 |
542 |
def call_blockdev_getmirrorstatus(self, node, disks):
|
568 |
543 |
"""Request status of a (mirroring) device.
|
569 |
544 |
|
... | ... | |
576 |
551 |
c.run()
|
577 |
552 |
return c.getresult().get(node, False)
|
578 |
553 |
|
579 |
|
|
580 |
554 |
def call_blockdev_find(self, node, disk):
|
581 |
555 |
"""Request identification of a given block device.
|
582 |
556 |
|
... | ... | |
588 |
562 |
c.run()
|
589 |
563 |
return c.getresult().get(node, False)
|
590 |
564 |
|
591 |
|
|
592 |
565 |
def call_blockdev_close(self, node, disks):
|
593 |
566 |
"""Closes the given block devices.
|
594 |
567 |
|
... | ... | |
601 |
574 |
c.run()
|
602 |
575 |
return c.getresult().get(node, False)
|
603 |
576 |
|
604 |
|
|
605 |
|
@staticmethod
|
606 |
|
def call_upload_file(node_list, file_name):
|
607 |
|
"""Upload a file.
|
608 |
|
|
609 |
|
The node will refuse the operation in case the file is not on the
|
610 |
|
approved file list.
|
611 |
|
|
612 |
|
This is a multi-node call.
|
613 |
|
|
614 |
|
"""
|
615 |
|
fh = file(file_name)
|
616 |
|
try:
|
617 |
|
data = fh.read()
|
618 |
|
finally:
|
619 |
|
fh.close()
|
620 |
|
st = os.stat(file_name)
|
621 |
|
params = [file_name, data, st.st_mode, st.st_uid, st.st_gid,
|
622 |
|
st.st_atime, st.st_mtime]
|
623 |
|
c = Client("upload_file", params)
|
624 |
|
c.connect_list(node_list)
|
625 |
|
c.run()
|
626 |
|
return c.getresult()
|
627 |
|
|
628 |
577 |
@staticmethod
|
629 |
578 |
def call_upload_file(node_list, file_name):
|
630 |
579 |
"""Upload a file.
|
... | ... | |
667 |
616 |
new_result[node_name] = nr
|
668 |
617 |
return new_result
|
669 |
618 |
|
670 |
|
|
671 |
619 |
def call_os_get(self, node, name):
|
672 |
620 |
"""Returns an OS definition.
|
673 |
621 |
|
... | ... | |
683 |
631 |
else:
|
684 |
632 |
return result
|
685 |
633 |
|
686 |
|
|
687 |
634 |
def call_hooks_runner(self, node_list, hpath, phase, env):
|
688 |
635 |
"""Call the hooks runner.
|
689 |
636 |
|
... | ... | |
701 |
648 |
result = c.getresult()
|
702 |
649 |
return result
|
703 |
650 |
|
704 |
|
|
705 |
651 |
def call_iallocator_runner(self, node, name, idata):
|
706 |
652 |
"""Call an iallocator on a remote node
|
707 |
653 |
|
... | ... | |
719 |
665 |
result = c.getresult().get(node, False)
|
720 |
666 |
return result
|
721 |
667 |
|
722 |
|
|
723 |
668 |
def call_blockdev_grow(self, node, cf_bdev, amount):
|
724 |
669 |
"""Request a snapshot of the given block device.
|
725 |
670 |
|
... | ... | |
731 |
676 |
c.run()
|
732 |
677 |
return c.getresult().get(node, False)
|
733 |
678 |
|
734 |
|
|
735 |
679 |
def call_blockdev_snapshot(self, node, cf_bdev):
|
736 |
680 |
"""Request a snapshot of the given block device.
|
737 |
681 |
|
... | ... | |
743 |
687 |
c.run()
|
744 |
688 |
return c.getresult().get(node, False)
|
745 |
689 |
|
746 |
|
|
747 |
690 |
def call_snapshot_export(self, node, snap_bdev, dest_node, instance,
|
748 |
691 |
cluster_name):
|
749 |
692 |
"""Request the export of a given snapshot.
|
... | ... | |
757 |
700 |
c.run()
|
758 |
701 |
return c.getresult().get(node, False)
|
759 |
702 |
|
760 |
|
|
761 |
703 |
def call_finalize_export(self, node, instance, snap_disks):
|
762 |
704 |
"""Request the completion of an export operation.
|
763 |
705 |
|
... | ... | |
775 |
717 |
c.run()
|
776 |
718 |
return c.getresult().get(node, False)
|
777 |
719 |
|
778 |
|
|
779 |
720 |
def call_export_info(self, node, path):
|
780 |
721 |
"""Queries the export information in a given path.
|
781 |
722 |
|
... | ... | |
790 |
731 |
return result
|
791 |
732 |
return objects.SerializableConfigParser.Loads(str(result))
|
792 |
733 |
|
793 |
|
|
794 |
734 |
def call_instance_os_import(self, node, inst, osdev, swapdev,
|
795 |
735 |
src_node, src_image, cluster_name):
|
796 |
736 |
"""Request the import of a backup into an instance.
|
... | ... | |
804 |
744 |
c.run()
|
805 |
745 |
return c.getresult().get(node, False)
|
806 |
746 |
|
807 |
|
|
808 |
747 |
def call_export_list(self, node_list):
|
809 |
748 |
"""Gets the stored exports list.
|
810 |
749 |
|
... | ... | |
817 |
756 |
result = c.getresult()
|
818 |
757 |
return result
|
819 |
758 |
|
820 |
|
|
821 |
759 |
def call_export_remove(self, node, export):
|
822 |
760 |
"""Requests removal of a given export.
|
823 |
761 |
|
... | ... | |
829 |
767 |
c.run()
|
830 |
768 |
return c.getresult().get(node, False)
|
831 |
769 |
|
832 |
|
|
833 |
770 |
@staticmethod
|
834 |
771 |
def call_node_leave_cluster(node):
|
835 |
772 |
"""Requests a node to clean the cluster information it has.
|
... | ... | |
845 |
782 |
c.run()
|
846 |
783 |
return c.getresult().get(node, False)
|
847 |
784 |
|
848 |
|
|
849 |
785 |
def call_node_volumes(self, node_list):
|
850 |
786 |
"""Gets all volumes on node(s).
|
851 |
787 |
|
... | ... | |
857 |
793 |
c.run()
|
858 |
794 |
return c.getresult()
|
859 |
795 |
|
860 |
|
|
861 |
796 |
def call_test_delay(self, node_list, duration):
|
862 |
797 |
"""Sleep for a fixed time on given node(s).
|
863 |
798 |
|
... | ... | |
869 |
804 |
c.run()
|
870 |
805 |
return c.getresult()
|
871 |
806 |
|
872 |
|
|
873 |
807 |
def call_file_storage_dir_create(self, node, file_storage_dir):
|
874 |
808 |
"""Create the given file storage directory.
|
875 |
809 |
|
... | ... | |
881 |
815 |
c.run()
|
882 |
816 |
return c.getresult().get(node, False)
|
883 |
817 |
|
884 |
|
|
885 |
818 |
def call_file_storage_dir_remove(self, node, file_storage_dir):
|
886 |
819 |
"""Remove the given file storage directory.
|
887 |
820 |
|
... | ... | |
893 |
826 |
c.run()
|
894 |
827 |
return c.getresult().get(node, False)
|
895 |
828 |
|
896 |
|
|
897 |
829 |
def call_file_storage_dir_rename(self, node, old_file_storage_dir,
|
898 |
830 |
new_file_storage_dir):
|
899 |
831 |
"""Rename file storage directory.
|
... | ... | |
907 |
839 |
c.run()
|
908 |
840 |
return c.getresult().get(node, False)
|
909 |
841 |
|
910 |
|
|
911 |
842 |
@staticmethod
|
912 |
843 |
def call_jobqueue_update(node_list, file_name, content):
|
913 |
844 |
"""Update job queue.
|
... | ... | |
921 |
852 |
result = c.getresult()
|
922 |
853 |
return result
|
923 |
854 |
|
924 |
|
|
925 |
855 |
@staticmethod
|
926 |
856 |
def call_jobqueue_purge(node):
|
927 |
857 |
"""Purge job queue.
|
... | ... | |
934 |
864 |
c.run()
|
935 |
865 |
return c.getresult().get(node, False)
|
936 |
866 |
|
937 |
|
|
938 |
867 |
@staticmethod
|
939 |
868 |
def call_jobqueue_rename(node_list, old, new):
|
940 |
869 |
"""Rename a job queue file.
|