Learning CFEngine 3

Errata for Learning CFEngine 3

Submit your own errata for this product.


The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.


Color Key: Serious Technical Mistake Minor Technical Mistake Language or formatting error Typo Question Note Update



Version Location Description Submitted By Date Submitted Date Corrected
Printed
Page 142
line 25

3rd paragraph (or line 25) missing "e": "to differenciate betwen them" => "to differenciate between them"

Note from the Author or Editor:
Fixed - thanks for the report.

Loic Pefferkorn  Aug 29, 2012 
Printed
Page 142
line 11

a missing "e": "it might be easir" => "it might be easier"

Note from the Author or Editor:
Fixed.

Loic Pefferkorn  Aug 29, 2012 
Printed
Page 139
13

Small typo: "the bar calss is defined" should be "the bar class is defined"

Note from the Author or Editor:
Thank you for the report- fixed.

Loïc Pefferkorn  Aug 07, 2012 
PDF
Page 1
top code sample

In this code sample bundle type name(arguments) { promise_type: class_expression: promise ... } class_expression should end with "::" not only ":" I think this is a syntax error, but I'm learning as I'm reading ;)

Note from the Author or Editor:
Thank you for the report, this is indeed a syntax error. I have fixed it.

analogue  Apr 26, 2012 
PDF
Page 35
2nd Paragraph

Found in epub version but that is not a selectable option. In reference to CFEngine Nova "it also includes man convenience features, such as native support for databse" As of 3.3.0 "Database promises, which allow to maintain schema of MySQL and PostgreSQL databases. Database promises are in "technical preview" status: this promise type is subject to change in future." https://github.com/cfengine/core/blob/master/ChangeLog

Note from the Author or Editor:
I have updated this paragraph and other references throughout the book to reflect the recent changes.

Nick Anderson  Mar 23, 2012 
Printed, PDF
Page ix
4th paragraph

"the tutorial the CFEngine never had" should be "the tutorial that CFEngine never had". Fixed.

Diego Zamboni
Diego Zamboni
O'Reilly Author 
Mar 21, 2012 
Printed, PDF
Page ix
4th paragraph

"the tutorial the CFEngine never had" should be "the tutorial that CFEngine never had" Fixed.

Diego Zamboni
Diego Zamboni
O'Reilly Author 
Mar 21, 2012 
PDF
Page 30
Bottom of page, last word in text on page 30.

"Synonyms" misspelled as "synonims."

Note from the Author or Editor:
Fixed.

Mack Rhinelander  Jan 22, 2012 
PDF
Page 79/80
code snippets

In the first code snippet the field is named "gecos" but in the second one it is referenced as "fullname". Technical issue: I think this example has a serious flaw. If a user exists but has a differing configuration then as far cfengine is concerned this promise is kept. This may or may not be intentional so it should at least be mentioned.

Note from the Author or Editor:
The gecos/fullname issue has been fixed. About the technical issue mentioned, the behavior is intentional, and mentioned in a "warning" note in the description.

Yoothahv  Jan 16, 2012 
PDF
Page 28
top quarter

- not equal The cfengine snippet for editing the sshd configuration is NOT equivalent to the previously given shell script. If there already is a line "AllowRoot yes", "AllowRoot<tab>no" or any other deviation then "AllowRoot no" will be added by cfengine and corrupt the config file. Suggestion: a) Use replace_or_add(pattern,line) instead? <http://cfengine.com/manuals/CfengineStdLibrary.html#bundle-edit_005fline-replace_005for_005fadd> b) Use a different example? (e.g. /etc/modules) - regex tweaks Additionally the shell script could be changed a little in order to avoid changing commented lines. (Maybe ".*" was intended to swallow leading whitespace?) sed -i 's/.*AllowRoot .*/AllowRoot no/;' -> sed -i 's/^AllowRoot .*/AllowRoot no/;' (Tabs are not matched with this regex. I would include them in production grade code, for an example it may be better to stick to simple cases.) - syntax error AllowRoot is not a valid keyword (OpenSSH 5.9). Did you mean "PermitRootLogin" instead?

Note from the Author or Editor:
Re: not equal - correct, I have changed the example to use replace_or_add(). Re: regex tweaks - the .* is intended exactly to catch commented-out lines, with the intention of uncommenting and modifying them to the desired value instead of appending a new line at the end. This behavior is intended. Re: syntax error. Thanks for the catch. I have corrected it, and also "EnableDNS", which should be "UseDNS".

Yoothahv  Jan 13, 2012 
PDF
Page 21
bottom quarter / bullet points

Current: "Make sure process httpd is/is not running" Suggestion: "Make sure process httpd is (not) running" The is/is alternation is a confusing unless one considers the next word and re-parses the sentence accordingly.

Note from the Author or Editor:
Good suggestion, fixed.

Yoothahv  Jan 13, 2012 
PDF
Page 19
first command block

After creating the example motd cf-snippet it is advised to run "cf-agent.exe". Suggestion: - highlight differences between Windows and Unix Cfengine so the user is able to pick the correct executable or - ignore Windows completely / defer until later since the typical usage scenario is probably UNIX/Linux centric. Windows is kind of an advanced topic. additional suggestion: Rewrite the first example(s) so it/they may run without elevated privileges? Since the user is 'Learning CFEngine3' it may be nice to avoid accidentally breaking the system.

Note from the Author or Editor:
Good catch! Leftover from a time when I was editing the book on a Windows machine and copy-pasted the commands. Fixed.

Yoothahv  Jan 13, 2012 
PDF, Other Digital Version
Page 4
4th paragraph

The brief description of Puppet says that it is written in Python. According to the project website[1] Puppet is written in Ruby. [1] http://docs.puppetlabs.com/guides/faq.html#why-is-puppet-written-in-ruby Kind regards, Grant

Note from the Author or Editor:
Confirmed and fixed. Thanks for catching it!

Grant Hammond  Dec 11, 2011