I have a file (/etc/fstab) with well defined fields and
subfields, and am trying to edit one of the fields, including removing
duplicate entries.
Here's the original line in question:
/dev/md2 /scratch ext3 defaults 1 2
Here's what I want it to look like at the end:
/dev/md2 /scratch ext3 usrquota,grpquota 1 2
Due to an oddly non-convergent (?!) set of field_edits, I have a line
that looks like this:
/dev/md2 /scratch ext3
usrquota,grpquota,usrquota,grpquota,usrquota,grpquota 1 2
As I see it, I originally needed to do two things:
1) Add the two options passed to field #4.
2) Delete the "default" subfield value, if it exists.
For some reason, the values in #1 are appended repeatedly, even if they
already exist in that field. The 'default' value is removed correctly
Here is the code that I'm using (the "col" body comes from the stdlib):
bundle scratch {
files:
scratch_hosts::
"/etc/fstab"
edit_line => add_mount_options('/scratch','usrquota,grpquota'),
handle => 'scratch_add_quotas_for_scratch_to_fstab',
classes => trigger('scratch_added_quota');
}
bundle edit_line add_mount_options(filesystem,options) {
field_edits:
"^.*\s+${filesystem}\s+.*(usrquota,grpquota,usrquota,grpquota,?)+.*$"
edit_field => col('\s+',4,"(usrquota,grpquota,)+",'delete'),
comment => "Remove duplicate urgquota,grpquota entries";
"^.*\s+${filesystem}\s+.*$"
edit_field => col('\s+',4,"${options}",'append'),
comment => "Add options to fstab column 4";
"^.*\s+${filesystem}\s+.*defaults.*$"
edit_field => col('\s+',4,'defaults','delete'),
comment => "Remove default option";
}
Here is the relevant output from running under --verbose (this is
version 3.0.5p1):
cf3 =========================================================
cf3 files in bundle scratch (1)
cf3 =========================================================
cf3
cf3 Verifying SQL table promises is only available with Cfengine Nova or above
cf3
cf3 .........................................................
cf3 Promise handle: scratch_add_quotas_for_scratch_to_fstab
cf3 Promise made by: /etc/fstab
cf3 .........................................................
cf3
cf3 -> Using literal pathtype for /etc/fstab
cf3 -> Handling file existence constraints on /etc/fstab
cf3 -> Handling file edits in edit_line bundle add_mount_options
cf3
cf3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cf3 BUNDLE add_mount_options( {'/scratch','usrquota'} )
cf3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
cf3
cf3 ? Augment scope add_mount_options with filesystem
cf3 ? Augment scope add_mount_options with options
cf3 ?? Private class context
cf3
cf3
cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
cf3 field_edits in bundle add_mount_options
cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
cf3
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by:
^.*\s+/scratch\s+.*(usrquota,grpquota,usrquota,grpquota,?)+.*$
cf3
cf3 Comment: Remove duplicate urgquota,grpquota entries
cf3 .........................................................
cf3
cf3 - Matched line (/dev/md2 /scratch ext3
usrquota,grpquota,usrquota,grpquota,usrquota,grpquota 1
2)
cf3 -> Stopped at field 4
cf3 -> No need to edit field in /etc/fstab
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by: ^.*\s+/scratch\s+.*$
cf3
cf3 Comment: Add options to fstab column 4
cf3 .........................................................
cf3
cf3 - Matched line (/dev/md2 /scratch ext3
usrquota,grpquota,usrquota,grpquota,usrquota,grpquota 1
2)
cf3 -> Stopped at field 4
cf3 -> No need to edit field in /etc/fstab
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by: ^.*\s+/scratch\s+.*defaults.*$
cf3
cf3 Comment: Remove default option
cf3 .........................................................
cf3
cf3 ?? Private class context
cf3
cf3
cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
cf3 field_edits in bundle add_mount_options
cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
cf3
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by:
^.*\s+/scratch\s+.*(usrquota,grpquota,usrquota,grpquota,?)+.*$
cf3
cf3 Comment: Remove duplicate urgquota,grpquota entries
cf3 .........................................................
cf3
cf3 -> This promise has already been verified
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by: ^.*\s+/scratch\s+.*$
cf3
cf3 Comment: Add options to fstab column 4
cf3 .........................................................
cf3
cf3 -> This promise has already been verified
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by: ^.*\s+/scratch\s+.*defaults.*$
cf3
cf3 Comment: Remove default option
cf3 .........................................................
cf3
cf3 -> This promise has already been verified
cf3 ?? Private class context
cf3
cf3
cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
cf3 field_edits in bundle add_mount_options
cf3 = = = = = = = = = = = = = = = = = = = = = = = = = = = =
cf3
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by:
^.*\s+/scratch\s+.*(usrquota,grpquota,usrquota,grpquota,?)+.*$
cf3
cf3 Comment: Remove duplicate urgquota,grpquota entries
cf3 .........................................................
cf3
cf3 -> This promise has already been verified
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by: ^.*\s+/scratch\s+.*$
cf3
cf3 Comment: Add options to fstab column 4
cf3 .........................................................
cf3
cf3 -> This promise has already been verified
cf3
cf3 .........................................................
cf3 Promise handle:
cf3 Promise made by: ^.*\s+/scratch\s+.*defaults.*$
cf3
cf3 Comment: Remove default option
cf3 .........................................................
cf3
cf3 -> This promise has already been verified
cf3 -> No edit changes to file /etc/fstab need saving
cf3
(Nothing is done in iterations 2 and 3).
Thanks in advance.
--
Jesse Becker
NHGRI Linux support (Digicon Contractor)
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine