{-| Implementation of the doc strings for the opcodes.

-}

{-

Copyright (C) 2009, 2010, 2011, 2012, 2013 Google Inc.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.

-}

module Ganeti.Hs2Py.OpDoc where


opClusterPostInit :: String
opClusterPostInit =
  "Post cluster initialization.\n\
\\n\
\  This opcode does not touch the cluster at all. Its purpose is to run hooks\n\
\  after the cluster has been initialized."

opClusterDestroy :: String
opClusterDestroy =
  "Destroy the cluster.\n\
\\n\
\  This opcode has no other parameters. All the state is irreversibly\n\
\  lost after the execution of this opcode."

opClusterQuery :: String
opClusterQuery =
  "Query cluster information."

opClusterVerify :: String
opClusterVerify =
  "Submits all jobs necessary to verify the cluster."

opClusterVerifyConfig :: String
opClusterVerifyConfig =
  "Verify the cluster config."

opClusterVerifyGroup :: String
opClusterVerifyGroup =
  "Run verify on a node group from the cluster.\n\
\\n\
\  @type skip_checks: C{list}\n\
\  @ivar skip_checks: steps to be skipped from the verify process; this\n\
\                     needs to be a subset of\n\
\                     L{constants.VERIFY_OPTIONAL_CHECKS}; currently\n\
\                     only L{constants.VERIFY_NPLUSONE_MEM} can be passed"

opClusterVerifyDisks :: String
opClusterVerifyDisks =
  "Verify the cluster disks."

opGroupVerifyDisks :: String
opGroupVerifyDisks =
  "Verifies the status of all disks in a node group.\n\
\\n\
\  Result: a tuple of three elements:\n\
\    - dict of node names with issues (values: error msg)\n\
\    - list of instances with degraded disks (that should be activated)\n\
\    - dict of instances with missing logical volumes (values: (node, vol)\n\
\      pairs with details about the missing volumes)\n\
\\n\
\  In normal operation, all lists should be empty. A non-empty instance\n\
\  list (3rd element of the result) is still ok (errors were fixed) but\n\
\  non-empty node list means some node is down, and probably there are\n\
\  unfixable drbd errors.\n\
\\n\
\  Note that only instances that are drbd-based are taken into\n\
\  consideration. This might need to be revisited in the future."

opClusterRepairDiskSizes :: String
opClusterRepairDiskSizes =
  "Verify the disk sizes of the instances and fixes configuration\n\
\  mismatches.\n\
\\n\
\  Parameters: optional instances list, in case we want to restrict the\n\
\  checks to only a subset of the instances.\n\
\\n\
\  Result: a list of tuples, (instance, disk, parameter, new-size) for\n\
\  changed configurations.\n\
\\n\
\  In normal operation, the list should be empty.\n\
\\n\
\  @type instances: list\n\
\  @ivar instances: the list of instances to check, or empty for all instances"

opClusterConfigQuery :: String
opClusterConfigQuery =
  "Query cluster configuration values."

opClusterRename :: String
opClusterRename =
  "Rename the cluster.\n\
\\n\
\  @type name: C{str}\n\
\  @ivar name: The new name of the cluster. The name and/or the master IP\n\
\              address will be changed to match the new name and its IP\n\
\              address."

opClusterSetParams :: String
opClusterSetParams =
  "Change the parameters of the cluster.\n\
\\n\
\  @type vg_name: C{str} or C{None}\n\
\  @ivar vg_name: The new volume group name or None to disable LVM usage."

opClusterRedistConf :: String
opClusterRedistConf =
  "Force a full push of the cluster configuration."

opClusterActivateMasterIp :: String
opClusterActivateMasterIp =
  "Activate the master IP on the master node."

opClusterDeactivateMasterIp :: String
opClusterDeactivateMasterIp =
  "Deactivate the master IP on the master node."

opClusterRenewCrypto :: String
opClusterRenewCrypto =
  "Renews the cluster node's SSL client certificates."

opQuery :: String
opQuery =
  "Query for resources/items.\n\
\\n\
\  @ivar what: Resources to query for, must be one of L{constants.QR_VIA_OP}\n\
\  @ivar fields: List of fields to retrieve\n\
\  @ivar qfilter: Query filter"

opQueryFields :: String
opQueryFields =
  "Query for available resource/item fields.\n\
\\n\
\  @ivar what: Resources to query for, must be one of L{constants.QR_VIA_OP}\n\
\  @ivar fields: List of fields to retrieve"

opOobCommand :: String
opOobCommand =
  "Interact with OOB."

opRestrictedCommand :: String
opRestrictedCommand =
  "Runs a restricted command on node(s)."

opNodeRemove :: String
opNodeRemove =
  "Remove a node.\n\
\\n\
\  @type node_name: C{str}\n\
\  @ivar node_name: The name of the node to remove. If the node still has\n\
\                   instances on it, the operation will fail."

opNodeAdd :: String
opNodeAdd =
  "Add a node to the cluster.\n\
\\n\
\  @type node_name: C{str}\n\
\  @ivar node_name: The name of the node to add. This can be a short name,\n\
\                   but it will be expanded to the FQDN.\n\
\  @type primary_ip: IP address\n\
\  @ivar primary_ip: The primary IP of the node. This will be ignored when\n\
\                    the opcode is submitted, but will be filled during the\n\
\                    node add (so it will be visible in the job query).\n\
\  @type secondary_ip: IP address\n\
\  @ivar secondary_ip: The secondary IP of the node. This needs to be passed\n\
\                      if the cluster has been initialized in 'dual-network'\n\
\                      mode, otherwise it must not be given.\n\
\  @type readd: C{bool}\n\
\  @ivar readd: Whether to re-add an existing node to the cluster. If\n\
\               this is not passed, then the operation will abort if the node\n\
\               name is already in the cluster; use this parameter to\n\
\               'repair' a node that had its configuration broken, or was\n\
\               reinstalled without removal from the cluster.\n\
\  @type group: C{str}\n\
\  @ivar group: The node group to which this node will belong.\n\
\  @type vm_capable: C{bool}\n\
\  @ivar vm_capable: The vm_capable node attribute\n\
\  @type master_capable: C{bool}\n\
\  @ivar master_capable: The master_capable node attribute"

opNodeQuery :: String
opNodeQuery =
  "Compute the list of nodes."

opNodeQueryvols :: String
opNodeQueryvols =
  "Get list of volumes on node."

opNodeQueryStorage :: String
opNodeQueryStorage =
  "Get information on storage for node(s)."

opNodeModifyStorage :: String
opNodeModifyStorage =
  "Modifies the properies of a storage unit"

opRepairNodeStorage :: String
opRepairNodeStorage =
  "Repairs the volume group on a node."

opNodeSetParams :: String
opNodeSetParams =
  "Change the parameters of a node."

opNodePowercycle :: String
opNodePowercycle =
  "Tries to powercycle a node."

opNodeMigrate :: String
opNodeMigrate =
  "Migrate all instances from a node."

opNodeEvacuate :: String
opNodeEvacuate =
  "Evacuate instances off a number of nodes."

opInstanceCreate :: String
opInstanceCreate =
  "Create an instance.\n\
\\n\
\  @ivar instance_name: Instance name\n\
\  @ivar mode: Instance creation mode (one of\
\ L{constants.INSTANCE_CREATE_MODES})\n\
\  @ivar source_handshake: Signed handshake from source (remote import only)\n\
\  @ivar source_x509_ca: Source X509 CA in PEM format (remote import only)\n\
\  @ivar source_instance_name: Previous name of instance (remote import only)\n\
\  @ivar source_shutdown_timeout: Shutdown timeout used for source instance\n\
\    (remote import only)"

opInstanceMultiAlloc :: String
opInstanceMultiAlloc =
  "Allocates multiple instances."

opInstanceReinstall :: String
opInstanceReinstall =
  "Reinstall an instance's OS."

opInstanceRemove :: String
opInstanceRemove =
  "Remove an instance."

opInstanceRename :: String
opInstanceRename =
  "Rename an instance."

opInstanceStartup :: String
opInstanceStartup =
  "Startup an instance."

opInstanceShutdown :: String
opInstanceShutdown =
  "Shutdown an instance."

opInstanceReboot :: String
opInstanceReboot =
  "Reboot an instance."

opInstanceReplaceDisks :: String
opInstanceReplaceDisks =
  "Replace the disks of an instance."

opInstanceFailover :: String
opInstanceFailover =
  "Failover an instance."

opInstanceMigrate :: String
opInstanceMigrate =
  "Migrate an instance.\n\
\\n\
\  This migrates (without shutting down an instance) to its secondary\n\
\  node.\n\
\\n\
\  @ivar instance_name: the name of the instance\n\
\  @ivar mode: the migration mode (live, non-live or None for auto)"

opInstanceMove :: String
opInstanceMove =
  "Move an instance.\n\
\\n\
\  This move (with shutting down an instance and data copying) to an\n\
\  arbitrary node.\n\
\\n\
\  @ivar instance_name: the name of the instance\n\
\  @ivar target_node: the destination node"

opInstanceConsole :: String
opInstanceConsole =
  "Connect to an instance's console."

opInstanceActivateDisks :: String
opInstanceActivateDisks =
  "Activate an instance's disks."

opInstanceDeactivateDisks :: String
opInstanceDeactivateDisks =
  "Deactivate an instance's disks."

opInstanceRecreateDisks :: String
opInstanceRecreateDisks =
  "Recreate an instance's disks."

opInstanceQuery :: String
opInstanceQuery =
  "Compute the list of instances."

opInstanceQueryData :: String
opInstanceQueryData =
  "Compute the run-time status of instances."

opInstanceSetParams :: String
opInstanceSetParams =
  "Change the parameters of an instance."

opInstanceGrowDisk :: String
opInstanceGrowDisk =
  "Grow a disk of an instance."

opInstanceChangeGroup :: String
opInstanceChangeGroup =
  "Moves an instance to another node group."

opGroupAdd :: String
opGroupAdd =
  "Add a node group to the cluster."

opGroupAssignNodes :: String
opGroupAssignNodes =
  "Assign nodes to a node group."

opGroupQuery :: String
opGroupQuery =
  "Compute the list of node groups."

opGroupSetParams :: String
opGroupSetParams =
  "Change the parameters of a node group."

opGroupRemove :: String
opGroupRemove =
  "Remove a node group from the cluster."

opGroupRename :: String
opGroupRename =
  "Rename a node group in the cluster."

opGroupEvacuate :: String
opGroupEvacuate =
  "Evacuate a node group in the cluster."

opOsDiagnose :: String
opOsDiagnose =
  "Compute the list of guest operating systems."

opExtStorageDiagnose :: String
opExtStorageDiagnose =
  "Compute the list of external storage providers."

opBackupQuery :: String
opBackupQuery =
  "Compute the list of exported images."

opBackupPrepare :: String
opBackupPrepare =
  "Prepares an instance export.\n\
\\n\
\  @ivar instance_name: Instance name\n\
\  @ivar mode: Export mode (one of L{constants.EXPORT_MODES})"

opBackupExport :: String
opBackupExport =
  "Export an instance.\n\
\\n\
\  For local exports, the export destination is the node name. For\n\
\  remote exports, the export destination is a list of tuples, each\n\
\  consisting of hostname/IP address, port, magic, HMAC and HMAC\n\
\  salt. The HMAC is calculated using the cluster domain secret over\n\
\  the value \"${index}:${hostname}:${port}\". The destination X509 CA\n\
\  must be a signed certificate.\n\
\\n\
\  @ivar mode: Export mode (one of L{constants.EXPORT_MODES})\n\
\  @ivar target_node: Export destination\n\
\  @ivar x509_key_name: X509 key to use (remote export only)\n\
\  @ivar destination_x509_ca: Destination X509 CA in PEM format (remote\n\
\                             export only)"

opBackupRemove :: String
opBackupRemove =
  "Remove an instance's export."

opTagsGet :: String
opTagsGet =
  "Returns the tags of the given object."

opTagsSearch :: String
opTagsSearch =
  "Searches the tags in the cluster for a given pattern."

opTagsSet :: String
opTagsSet =
  "Add a list of tags on a given object."

opTagsDel :: String
opTagsDel =
  "Remove a list of tags from a given object."

opTestDelay :: String
opTestDelay =
  "Sleeps for a configured amount of time.\n\
\\n\
\  This is used just for debugging and testing.\n\
\\n\
\  Parameters:\n\
\    - duration: the time to sleep, in seconds\n\
\    - on_master: if true, sleep on the master\n\
\    - on_nodes: list of nodes in which to sleep\n\
\\n\
\  If the on_master parameter is true, it will execute a sleep on the\n\
\  master (before any node sleep).\n\
\\n\
\  If the on_nodes list is not empty, it will sleep on those nodes\n\
\  (after the sleep on the master, if that is enabled).\n\
\\n\
\  As an additional feature, the case of duration < 0 will be reported\n\
\  as an execution error, so this opcode can be used as a failure\n\
\  generator. The case of duration == 0 will not be treated specially."

opTestAllocator :: String
opTestAllocator =
  "Allocator framework testing.\n\
\\n\
\  This opcode has two modes:\n\
\    - gather and return allocator input for a given mode (allocate new\n\
\      or replace secondary) and a given instance definition (direction\n\
\      'in')\n\
\    - run a selected allocator for a given operation (as above) and\n\
\      return the allocator output (direction 'out')"

opTestJqueue :: String
opTestJqueue =
  "Utility opcode to test some aspects of the job queue."

opTestDummy :: String
opTestDummy =
  "Utility opcode used by unittests."

opNetworkAdd :: String
opNetworkAdd =
  "Add an IP network to the cluster."

opNetworkRemove :: String
opNetworkRemove =
  "Remove an existing network from the cluster.\n\
\     Must not be connected to any nodegroup."

opNetworkSetParams :: String
opNetworkSetParams =
  "Modify Network's parameters except for IPv4 subnet"

opNetworkConnect :: String
opNetworkConnect =
  "Connect a Network to a specific Nodegroup with the defined netparams\n\
\     (mode, link). Nics in this Network will inherit those params.\n\
\     Produce errors if a NIC (that its not already assigned to a network)\n\
\     has an IP that is contained in the Network this will produce error\
\ unless\n\
\     --no-conflicts-check is passed."

opNetworkDisconnect :: String
opNetworkDisconnect =
  "Disconnect a Network from a Nodegroup. Produce errors if NICs are\n\
\     present in the Network unless --no-conficts-check option is passed."

opNetworkQuery :: String
opNetworkQuery =
  "Compute the list of networks."
