CFEngine 2 to 3 migration? Beware of data loss


CFEengine 3 bootstrapping can result in the loss of CFEngine 2 inputs. A common strategy to migrate from CFEngine 2 to 3 is to run both in parallel. --- Both versions share the same default inputs directory of /var/cfengine/inputs. A CF3 bootstrap deletes all files in the inputs directory:

[root@atlrhel5is cfengine]# cf-agent -IB 
2013-10-29T12:37:43-0400     info: Removing all files in '/var/cfengine/inputs/'

Now your working CF2 inputs are gone. I've reported a bug about this, but I do not know when or if it will be addressed. As a work around I suggest a wrapper script to your bootstrap procedure. Something like this snippet:

TS=$(date +%s)

mkdir /var/cfengine/inputs-${TS}
cp -r /var/cfengine/inputs/* /var/cfengine/inputs-${TS}

if [ $? -eq 0 ]
      cf-agent -B
      cp -nr /var/cfengine/inputs-${TS}/* /var/cfengine/inputs/

This will preserve and restore your pre-bootstrap inputs, while keeping any new files created by the bootstrap. Be sure to test any bootstrap or upgrade procedure thoroughly. Contact us for more help and information.

submit to reddit