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

-}

{-

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

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

-}

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."
