Script API

From wiki.zmanda.com
Jump to navigation Jump to search

Introduction

Use pre- and post-scripts to execute scripts before or after certain amanda commands. In most cases, the scripts can be executed on the client or server. They must be on the client or server accordingly in /usr/lib/amanda/application/ (may be /usr/lib64/amanda/application/ if a 64-bit install). The scripts can be executed once for each DLE or once for each client host. Uses for pre- and post-scripts include:

  • to stop and start database servers so that the binary backup is consistent.
  • to take a snapshot of a database or a ZFS or LVM partition.
  • to send emails or other notifications.

There are sample applications in the application-src directory of the distribution.

Script calling convention

This is subject to change.

 /path/to/script [execute-on]+ [--config <config>] [--host <host>] [--disk <disk>] [--device <device>] [--level]* [--PROPERTY_NAME PROPERTY_VALUE]*

"execute-on" is a comma-separated list of one or more words of the form (pre|post)-(dle|host)-(amcheck|estimate|backup).

The disk and device arguments to the script are provided only if the script is executed for a DLE.

This syntax is designed for Perl's GetOptions module ("use Getopt::Long;"). Script properties work just like application properties: they are insensitive to case, and - (dash) and _ (underscore) are interchangeable. For an example, look at the level argument in amlog-script.pl.

Output from the script goes to fd1 in free format. It will go to the amanda debug file.

Note: Some execute-on scripts only run on the server or on the client. The whole list is:

execute-on execute where
server client
pre-dle-amcheck X X
pre-host-amcheck X X
post-dle-amcheck X X
post-host-amcheck X X
pre-dle-estimate X X
pre-host-estimate X X
post-dle-estimate X X
post-host-estimate X X
pre-dle-backup X X
pre-host-backup X -
post-dle-backup X X
post-host-backup X -
pre-recover - X
post-recover - X
pre-dle-recover - X
post-dle-recover - X
inter-dle-recover - X

How to use

Define scripts in amanda.conf, and then reference them from a dumptype.

Define the script in amanda.conf

Define the "my_script" script using the "myscript" executable.

 define script-tool my-script {
    "script-base"                     # inherit config of the script-base script-tool
    comment "a comment"
    plugin  "myscript"                # filename of the script located in /usr/lib/amanda/application/
                                      # on either the client or the server depending on value of execute-where
    execute-where server              # one of: server or client
    execute-on    pre-dle-backup      # when to execute.
    property "mailto" "amandabackup"  # set arbitrary properties
 }

Multiple values for the same property can be defined two different ways. For the property foo:

property "foo" "bar" "baz" "snark"

or

property "foo" "bar"
property append "foo" "baz"
property append "foo" "snark"

The script will see a command line with this snippet:

--foo bar --foo baz --foo snark

Again, this syntax is designed for Perl's GetOptions module.

The file name and script name can be different. So you could create several script-tool definitions using the same script, and the difference between them might be different parameters.

Send property to the application

A pre-dle-amcheck script running on the client can set a property for the application 'selfcheck' command.

A pre-dle-estimate script running on the client can set a property for the application 'estimate' command.

A pre-dle-backup script running on the client can set a property for the application 'backup' command.

The script must print a line to stdout with the 'PROPERTY' keyword followed by the property name and property value

eg. PROPERTY directory /new/path

And the application will get the '--directory=/new/path' argument.


Use the script in a dumptype

Reference the script-tool with the script parameter:

 define dumptype user-tar-scripted {
   user-tar
   script "my-script"
 }

Note that the dumptype declaration must be below the script-tool declaration in the configuration file.

Email example

 define script-tool sc-email {
   comment "email me before this DLE is backed up"
   plugin  "script-email"
   execute-on pre-dle-backup
   execute-where server
   property "mailto" "martinea"
 }

 define dumptype user-tar-email {
   user-tar
   script "sc-email"
 }

Complex Examples

Just as you can include dumptypes in a DLE, you can include script-tool definitions in a dumptype:

 define dumptype user-tar-email2 {
   user-tar
   script {
     "sc-email"
     execute-where client
     execute-on    post-dle-backup, post-host-estimate
   }
 }

You can even combine all of this in a DLE:

myhost /my/disk {
   user-tar
   script {
     plugin "sc-email"
     execute-where client
     execute-on    post-dle-backup, post-host-estimate
   }
} -1 local

Backup using ZFS snapshots on OpenSolaris

amanda.conf should have ZFS snapshots defined as "script-tool" definition". You should use amgtar for the actual backup.

define script-tool script_zfs_snapshot {
  comment "zfs-snapshot"
  plugin "zfs-snapshot"
  execute-where client
  execute-on pre-dle-amcheck, post-dle-amcheck, pre-dle-estimate, post-dle-estimate, pre-dle-backup, post-dle-backup
  property "DF-PATH"  "/usr/sbin/df"
  property "ZFS-PATH" "/usr/sbin/zfs"
}
define application-tool app_amgtar {
  comment "amgtar"
  plugin "amgtar"
  property "ATIME-PRESERVE" "no"
}
define dumptype zfs-snapshot {
  program "APPLICATION"
  application "app_amgtar"
  script "script_zfs_snapshot"
  auth "bsdtcp"
}

An example disklist entry would be

opensolaris.mycompany.com /zpool/testfs/data zfs-snapshot

There is a sample zfs-snapshot in the applications directory of the amanda distribution.