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
|
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
|
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 |
|
|
| |