[Linux-ha-dev] [RFC] Change the behavior of cibadmin on dangerous
options
Dejan Muhamedagic
dejanmm at fastmail.fm
Mon Dec 3 11:23:47 MST 2007
Hi,
On Tue, Dec 04, 2007 at 12:20:15AM +0800, Xinwei Hu wrote:
> Hi all,
>
> We have a instance about cibadmin recently. A typo of 'cibadmin -r
> blahblah' forces the HA into RO mode without any warning, and the
> field engineer almost panic. ;)
Agree. Why is the RO mode needed? Doesn't look useful for regular
users. Also, cibadmin should exit without doing any changes if
the parameters supplied are not good.
> This leads me to think that cibadmin should give detailed warning
> on these dangerous options ahead. But the change will inevitably
> change the current behavior of cibadmin.
>
> A draft patch is attached for this purpose. Your insightful
> comments are welcome.
Thanks for the patch.
Dejan
> Thanks.
> --- ../../dev-dsk/crm/admin/cibadmin.c 2007-09-24 13:57:31.000000000 +0800
> +++ admin/cibadmin.c 2007-12-03 15:37:52.000000000 +0800
> @@ -95,6 +95,8 @@
> {
> int argerr = 0;
> int flag;
> + int cib_dangerous = 0;
> + const char* cib_dangerous_reason = NULL;
> char *admin_input_xml = NULL;
> char *admin_input_file = NULL;
> gboolean admin_input_stdin = FALSE;
> @@ -222,10 +224,14 @@
> break;
> case 'r':
> cib_action = CIB_OP_SLAVE;
> + cib_dangerous = 1;
> + cib_dangerous_reason = "forces the local CIB instance into R/O mode";
> break;
> case 'w':
> cib_action = CIB_OP_MASTER;
> command_options |= cib_scope_local;
> + cib_dangerous = 1;
> + cib_dangerous_reason = "forces the local CIB instance into R/W mode";
> break;
> case 'V':
> command_options = command_options | cib_verbose;
> @@ -259,12 +265,16 @@
> case 'b':
> command_options |= cib_inhibit_bcast;
> command_options |= cib_scope_local;
> + cib_dangerous = 1;
> + cib_dangerous_reason = "not be broadcast to other nodes in anyway";
> break;
> case 's':
> command_options |= cib_sync_call;
> break;
> case 'f':
> command_options |= cib_quorum_override;
> + cib_dangerous = 1;
> + cib_dangerous_reason = "force a write to the CIB regardless of quorum";
> break;
> default:
> printf("Argument code 0%o (%c)"
> @@ -294,6 +304,19 @@
> usage(crm_system_name, LSB_EXIT_GENERIC);
> }
>
> + if (cib_dangerous) {
> + char ui;
> + fprintf(stdout, "Your command will %s. \nAre you sure this is really what you want?[y/N]", cib_dangerous_reason);
> + fflush(stdout);
> + scanf("%c", &ui);
> + if (ui=='Y' || ui=='y') {
> + fprintf(stdout, "Go as you wish\n");
> + fflush(stdout);
> + } else {
> + exit(LSB_EXIT_GENERIC);
> + }
> + }
> +
> if(admin_input_file != NULL) {
> FILE *xml_strm = fopen(admin_input_file, "r");
> input = file2xml(xml_strm, FALSE);
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev at lists.linux-ha.org
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
More information about the Linux-HA-Dev
mailing list