Hawk/Design

Introduction
HA Web Konsole (Hawk) is a web-based GUI for managing and monitoring Pacemaker-based HA clusters. It is:


 * A Ruby on Rails application (ruby 1.8 / rails 2.3), conveniently packaged as an RPM.
 * Run from a standalone instance of lighttpd on each node of an HA cluster, accessible via an HTTPS connection to port 7630. This means it's available independently of any regular web services the cluster may or may not be providing.
 * Intended to operate independently of the cluster stack (started via /etc/init.d/hawk), so that the GUI is available even if the cluster hasn't come online yet.
 * Usable in any modern graphical web browser with JavaScript enabled.
 * Intended to make common management and monitoring tasks easy.
 * Not intended to expose all possible cluster configuration options.

Please note that this is a design document, current as at the time it was last modified. Do not imagine that everything listed here is implemented yet or will be available within a particular timeframe! If in doubt, check the current project status.

Feature/Functionality Overview
There are five conceptual areas of functionality:


 * 1) "Scaffolding" (init script, user authentication, build infrastructure, internationalization, etc.)
 * 2) Cluster Status Display (what resources/nodes are online, current status thereof, history, etc.)
 * 3) Basic Operator Tasks (start/stop resources, online/offline nodes, etc.)
 * 4) Explore Failure Scenarios (see what would happen if a resource/node failed)
 * 5) Configure Cluster (add/remove node/resource, set cluster options, configure STONITH, etc.)

In terms of implementation, these all overlap (management tasks build on the status display, everything builds on scaffolding), but it's useful to break them up like this because:


 * It begins to give us a roadmap, facilitating implementation in a staged fashion.
 * These areas (ignoring scaffolding) are reasonable boundaries around which to think about user roles (everyone can view the cluster status, but perhaps not everyone should be allowed to reconfigure the cluster).

Node Operations

 * Node standby/online
 * Fence node
 * Mark node fenced

Resource Operations

 * Start/stop/cleanup resource
 * Migrate to, Migrate away, clear migration constrations
 * Promote/demote

Cluster Operations

 * Generate hb_report
 * To/from maintenance mode

Explore Failure Scenarios

 * Change node state
 * Edit outcome of resource op
 * View transition graphs

Configure Cluster

 * Add/Remove Node(?)
 * Create/Delete Resource
 * Configure STONITH
 * Configure Colocation and Ordering Constratins
 * Create/Delete Groups (or add/remove resources from groups)
 * Set Cluster/Node/Resource properties