CFEngine is a highly scalable configuration management tool for various works. Here is How To Install CFEngine on Ubuntu 14.04 HP Cloud. CFEngine has a community edition that is free to use. There is dedicated website of CFEngine, where you will get details about the software, if you have heard or used cloud automation tool like Puppet or Chef, CFEngine quite similar but smaller in size. This guide is intended for the advanced users only.
Install CFEngine on Ubuntu 14.04 HP Cloud
First on the SSH screen, we will add the apt-key :
1 | sudo add-apt-repository 'deb http://cfengine.com/pub/apt/packages stable main' |
then we will download CFEngine’s public key and add it :
---
1 2 | wget http://cfengine.com/pub/gpg.key -O ~/gpg.key sudo apt-key add ~/gpg.key |
then we will update and upgrade the server :
1 | apt update -y && apt upgrade -y |
then we will install the community edition of CFEngine :
1 | sudo apt-get install cfengine-community |
Ideally, one server should act as policy hub and the other instances as the clients. However, in this example we are using one instance to run both policy hub and client. To start CFEngine’s policy hub, we will bootstrap it with our server’s public IP address :
1 | sudo cf-agent --bootstrap <our.ip.v4.server.ip> |
We can create a new policy with any name in a memorable location, for example we can ran the policy manually using the cf-agent command in the later steps :
1 | nano ~/HPCloudPolicy.cf |
For example, we can add this content to that file :
1 2 3 4 | bundle agent Hello { reports: "HP Cloud CFEngine"; } |
after saving and exiting from the text editor, if we run this command :
1 | sudo cf-agent -b Hello ~/HPCloudPolicy.cf |
We will get the output :
1 | R: HP Cloud CFEngine |
The above is an example of manual work, if we want to run it on multiple servers, we can add the subnet mask like in above steps and do the steps for automatically installing anything, which is Nginx in our example, you should Edit it rightly :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | bundle agent nginx { vars: "redirect_server_stanza" string => "server { listen 80; server_name example.thecustomizewindows.com; rewrite ^(.*)$ http://thecustomizewindows.$(def.domain)$1 permanent; } "; packages: "nginx" package_policy => "addupdate"; processes: "nginx: master" restart_class => "restart_nginx"; files: "/etc/nginx/nginx.conf" edit_line => change_nginx_http_conf, classes => if_repaired("restart_nginx"); homer:: "/etc/nginx/sites-enabled/thecustomizewindows_redirect", link_from => ln_s("/etc/nginx/sites-available/thecustomizewindows_redirect"), classes => if_repaired("restart_nginx"); "/etc/nginx/sites-available/thecustomizewindows_redirect" perms => m("0644"), create => "true", edit_defaults => empty, edit_line => insert_lines("$(redirect_server_stanza)"), classes => if_repaired("restart_nginx"); commands: restart_nginx:: "/usr/sbin/service nginx restart"; } bundle edit_line change_nginx_http_conf { replace_patterns: ".*# server_names_hash_bucket_size.*" replace_with => value("server_names_hash_bucket_size 64;"); insert_lines: "client_max_body_size 55m;" location => after("http {"); } |
You can cURL or wget the above file from server from our gist here.
We will create the file here :
1 | nano /var/cfengine/masterfiles/cfNginx.cf |
“Testing” will make it to get executed :
1 | sudo cf-agent -b nginx /var/cfengine/masterfiles/cfNginx.cf |
In order to add the automation, we need to edit this file :
1 | nano /var/cfengine/masterfiles/promises.cf |
and add the file name in inputs
stanza and edit the bundle sequence
stanza :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | inputs => { ... # List of services here "services/file_change.cf", "cfNginx.cf", }; ... bundlesequence => { ... # Agent bundle cfe_internal_management, # See cfe_internal/CFE_cfengine.cf service_catalogue, @(cfengine_enterprise_hub_ha.management_bundles), nginx, }; |
even if change nginx, CFEngine will automatically run it again. It is kind of auto firing.
You will get official documentation here :
1 | https://docs.cfengine.com/latest/reference.html |