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
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to