From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25283 invoked by alias); 13 Mar 2009 09:35:36 -0000 Received: (qmail 25277 invoked by alias); 13 Mar 2009 09:35:35 -0000 X-SWARE-Spam-Status: No, hits=-0.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_102,J_CHICKENPOX_43,J_CHICKENPOX_62,J_CHICKENPOX_82,SPF_HELO_PASS X-Spam-Status: No, hits=-0.4 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_102,J_CHICKENPOX_43,J_CHICKENPOX_62,J_CHICKENPOX_82,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion.fedora.phx.redhat.com Subject: fence-agents: master - fence_ipmilan: Added list, monitor and metadata operations To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: fence-agents.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: fd6874af755109e22a5886b27d7fd25dcd0c8461 X-Git-Newrev: 5527e1cdacf43e47a7f84cb1f55be6b5a2a769e5 From: Jan Friesse Message-Id: <20090313093423.61D2412034D@lists.fedorahosted.org> Date: Fri, 13 Mar 2009 09:35:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q1/txt/msg00775.txt.bz2 Gitweb: http://git.fedorahosted.org/git/fence-agents.git?p=fence-agents.git;a=commitdiff;h=5527e1cdacf43e47a7f84cb1f55be6b5a2a769e5 Commit: 5527e1cdacf43e47a7f84cb1f55be6b5a2a769e5 Parent: fd6874af755109e22a5886b27d7fd25dcd0c8461 Author: Jan Friesse AuthorDate: Fri Mar 13 10:33:52 2009 +0100 Committer: Jan Friesse CommitterDate: Fri Mar 13 10:33:52 2009 +0100 fence_ipmilan: Added list, monitor and metadata operations List operation doesn't make big sense, but it's here. Monitor is basically only status operation. Metadata prints standard XML (same as fence_xvm) with agents metadata. --- fence/agents/ipmilan/ipmilan.c | 79 ++++++++++++++++++++++++++++++++++------ 1 files changed, 67 insertions(+), 12 deletions(-) diff --git a/fence/agents/ipmilan/ipmilan.c b/fence/agents/ipmilan/ipmilan.c index ff5d499..ec6e8f2 100644 --- a/fence/agents/ipmilan/ipmilan.c +++ b/fence/agents/ipmilan/ipmilan.c @@ -117,6 +117,24 @@ static struct Etoken power_status[] = { {NULL, 0, 0} }; +/* Structure describing one xml metadata value*/ +struct xml_parameter_s { + char *name; + char *description; +}; + +/* Array of xml metadatas*/ +struct xml_parameter_s xml_parameters[]={ + {"auth","IPMI Lan Auth type (md5, password, or none)"}, + {"ipaddr","IPMI Lan IP to talk to"}, + {"passwd","Password (if required) to control power on IPMI device"}, + {"passwd_script","Script to retrieve password (if required)"}, + {"lanplus","Use Lanplus"}, + {"login","Username/Login (if required) to control power on IPMI device"}, + {"action","Operation to perform. Valid operations: on, off, reboot, status, list, monitor or metadata"}, + {"timeout","Timeout (sec) for IPMI operation"}, + {"cipher","Ciphersuite to use (same as ipmitool -C parameter)"}, + {"verbose","Verbose mode"}}; /* Search for ipmitool @@ -722,7 +740,7 @@ printf(" -S Script to retrieve password (if required)\n"); printf(" -l Username/Login (if required) to control power\n" " on IPMI device\n"); printf(" -o Operation to perform.\n"); -printf(" Valid operations: on, off, reboot, status\n"); +printf(" Valid operations: on, off, reboot, status, list or monitor\n"); printf(" -t Timeout (sec) for IPMI operation (default %d)\n",DEFAULT_TIMEOUT); printf(" -C Ciphersuite to use (same as ipmitool -C parameter)\n"); printf(" -V Print version and exit\n"); @@ -745,6 +763,26 @@ printf(" verbose Same as -v\n\n"); } +/** Print XML metadata of fence agent*/ +void print_xml_metadata(char *pname) { + int i; + + printf("%s\n",""); + printf("%s%s%s\n",""); + printf("%s\n",""); + + for (i=0;i<(sizeof(xml_parameters)/sizeof(struct xml_parameter_s));i++) { + printf("\t\n",xml_parameters[i].name); + + printf("\t\t"); + printf("%s",xml_parameters[i].description); + printf("\n"); + printf("\t\n"); + } + printf("%s\n",""); + printf("%s\n",""); +} + int main(int argc, char **argv) { @@ -761,7 +799,8 @@ main(int argc, char **argv) char *pname = basename(argv[0]); struct ipmi *i; int timeout=DEFAULT_TIMEOUT; - int cipher=-1; + int cipher=-1; + int print_final_status=1; memset(ip, 0, sizeof(ip)); memset(authtype, 0, sizeof(authtype)); @@ -874,9 +913,11 @@ main(int argc, char **argv) snprintf(op,sizeof(op), "reboot"); if (strcasecmp(op, "off") && strcasecmp(op, "on") && - strcasecmp(op, "status") && strcasecmp(op, "reboot")) { + strcasecmp(op, "status") && strcasecmp(op, "reboot") && + strcasecmp(op, "monitor") && strcasecmp(op, "list") && + strcasecmp(op, "metadata")) { fail_exit("operation must be 'on', 'off', 'status', " - "or 'reboot'"); + "'reboot', 'list', 'monitor' or 'metadata'"); } if (strlen(authtype) && @@ -913,33 +954,47 @@ main(int argc, char **argv) printf("Powering off machine @ IPMI:%s...", ip); fflush(stdout); ret = ipmi_off(i); - } else if (!strcasecmp(op, "status")) { + } else if (!strcasecmp(op, "status") || !strcasecmp(op, "monitor")) { printf("Getting status of IPMI:%s...",ip); fflush(stdout); ret = ipmi_op(i, ST_STATUS, power_status); switch(ret) { case STATE_ON: - printf("Chassis power = On\n"); + if (!strcasecmp(op, "status")) + printf("Chassis power = On\n"); ret = 0; break; case STATE_OFF: - printf("Chassis power = Off\n"); + if (!strcasecmp(op, "status")) + printf("Chassis power = Off\n"); ret = 0; break; default: - printf("Chassis power = Unknown\n"); + if (!strcasecmp(op, "status")) + printf("Chassis power = Unknown\n"); ret = 1; break; } + } else if (!strcasecmp(op, "list")) { + printf("%s\n","N/A"); + ret=0; + print_final_status=0; + } else if (!strcasecmp(op, "metadata")) { + print_xml_metadata(pname); + ret=0; + print_final_status=0; } out: ipmi_destroy(i); free(i); - if (ret == 0) - printf("Done\n"); - else - printf("Failed\n"); + + if (print_final_status) { + if (ret == 0) + printf("Done\n"); + else + printf("Failed\n"); + } return ret; }