
.. _alter_cli:

alter
/////

::

   
   alter
   -----
   
   Alter the node according to the options.
   To add/delete/change server variables use '/' for the path.
   arg1 =   [ delete | change | add | set_flag | clear_flag | sort ]
            one option must be specified
   arg2 = For delete:
            [ variable | time | today | date  | day | cron | event | meter | late | generic | queue |
              label | trigger | complete | repeat | limit | inlimit | limit_path | zombie | aviso | mirror ]
          For change:
            [ variable | clock_type | clock_gain | clock_date | clock_sync  | event | meter | label |
              trigger  | complete   | repeat     | limit_max  | limit_value | defstatus | late | time |
              today, aviso, mirror ]
            *NOTE* If the clock is changed, then the suite will need to be re-queued in order for
            the change to take effect fully.
          For add:
            [ variable | time | today | date | day | zombie | late | limit | inlimit | label | aviso | mirror ]
          For set_flag and clear_flag:
            [ force_aborted | user_edit | task_aborted | edit_failed | ecfcmd_failed 
              statuscmd_failed | killcmd_failed | no_script | killed | status | late | message | 
              complete | queue_limit | task_waiting | locked | zombie | archived | restored |
              threshold | log_error | checkpt_error]
          For sort:
            [ event | meter | label | variable| limit | all ]
   arg3 = name/value
   arg4 = new_value
   arg5 = paths : At least one node path required.The paths must start with a leading '/' character
   
   When adding or updating attributes, such as variable, meter, event, label, limits, or late,
     the name (arg3) and value (arg4) must be quoted.
   
   When sorting attributes, 'recursive' can be used as the value (arg3)
   
   When adding or updating aviso and mirror attributes, the value (arg4) is expected to be a quoted list of
     configuration options. For example:
      * for aviso, "--remote_path /s1/f1/t2 --remote_host host --polling 20 --remote_port 3141 --ssl)"
      * for mirror, "--listener '{ \"event\": \"mars\", \"request\": { \"class\": "od" } }'
                     --url http://aviso/ --schema /path/to/schema --polling 60"
   
   Usage:
   
      ecflow_client --alter=add variable GLOBAL "value" /           # add server variable
      ecflow_client --alter=add variable FRED "value" /path/to/node # add node variable
      ecflow_client --alter=add time "+00:20" /path/to/node
      ecflow_client --alter=add date "01.*.*" /path/to/node
      ecflow_client --alter=add day "sunday"  /path/to/node
      ecflow_client --alter=add label name "label_value" /path/to/node
      ecflow_client --alter=add late "-s 00:01 -a 14:30 -c +00:01" /path/to/node
      ecflow_client --alter=add limit mars "100" /path/to/node
      ecflow_client --alter=add inlimit /path/to/node/withlimit:limit_name "10" /path/to/node
      # zombie attributes have the following structure:
        `zombie_type`:(`client_side_action` | `server_side_action`):`child`:`zombie_life_time`
         zombie_type        = "user" | "ecf" | "path" | "ecf_pid" | "ecf_passwd" | "ecf_pid_passwd"
         client_side_action = "fob" | "fail" | "block"
         server_side_action = "adopt" | "delete" | "kill"
         child              = "init" | "event" | "meter" | "label" | "wait" | "abort" | "complete" | "queue"
         zombie_life_time   = unsigned integer default: user(300), ecf(3600), path(900)  minimum is 60
      ecflow_client --alter=add zombie "ecf:fail::" /path/to/node     # ask system zombies to fail
      ecflow_client --alter=add zombie "user:fail::" /path/to/node    # ask user generated zombies to fail
      ecflow_client --alter=add zombie "path:fail::" /path/to/node    # ask path zombies to fail
   
      ecflow_client --alter=delete variable FRED /path/to/node    # delete variable FRED
      ecflow_client --alter=delete variable      /path/to/node    # delete *ALL* variables on the specified node
   
   
   The client reads in the following environment variables. These are read by user and child command
   
   |----------|----------|------------|-------------------------------------------------------------------|
   | Name     |  Type    | Required   | Description                                                       |
   |----------|----------|------------|-------------------------------------------------------------------|
   | ECF_HOST | <string> | Mandatory* | The host name of the main server. defaults to 'localhost'         |
   | ECF_PORT |  <int>   | Mandatory* | The TCP/IP port to call on the server. Must be unique to a server |
   | ECF_SSL  |  <any>   | Optional*  | Enable encrypted comms with SSL enabled server.                   |
   |----------|----------|------------|-------------------------------------------------------------------|
   
   * The host and port must be specified in order for the client to communicate with the server, this can 
     be done by setting ECF_HOST, ECF_PORT or by specifying --host=<host> --port=<int> on the command line
   
