- Go to this link: https://downloads.chef.io/chef-server
- In the on-premise section select your OS and download your package.
- Here I will be using centos 7. When the rpm is downloaded you can install it via the command:
sudo rpm -Uvh - Execute the following command: chef-server-ctl reconfigure
Because the Chef server is composed of many different services that work together to create a functioning system, this step may take a few minutes to complete. - Run the following command to create an administrator:
$ chef-server-ctl user-create USER_NAME FIRST_NAME LAST_NAME EMAIL 'PASSWORD' --filename FILE_NAME
An RSA private key is generated automatically. This is the user’s private key and should be saved to a safe location. The--filename
option will save the RSA private key to the specified absolute path.For example:$ chef-server-ctl user-create stevedanno Steve Danno steved@chef.io 'abc123' --filename /path/to/stevedanno.pem
If you get the following error:Specified config file /etc/opscode/pivotal.rb does not existThen check if you have RAM available. Free some memory and rerun thechef-server-ctl reconfigure - If you get following error: /users resource does not existThen check the chef logs with following command:chef-server-ctl tailYou might see an error similar to the following:
==> /var/log/opscode/nginx/error.log <==
2017/09/08 11:38:28 [emerg] 29689#0: bind() to 0.0.0.0:80 failed (98: Address already in use)
2017/09/08 11:38:28 [emerg] 29689#0: bind() to 0.0.0.0:443 failed (98: Address already in use).Then execute the following command:
netstat -ntlp | grep 80
Check which service is using the port 80 and 443. Majorly it is the httpd service. Stop the httpd service. Then the chef nginx service will start automatically without any issues.Then execute the create-user command it will get executed without any error. - Run the following command to create an organization:
$ chef-server-ctl org-create short_name 'full_organization_name' --association_user user_name --filename ORGANIZATION-validator.pem
The name must begin with a lower-case letter or digit, may only contain lower-case letters, digits, hyphens, and underscores, and must be between 1 and 255 characters. For example:4thcoffee
.The full name must begin with a non-white space character and must be between 1 and 1023 characters. For example:'Fourth Coffee, Inc.'
.The--association_user
option will associate theuser_name
with theadmins
security group on the Chef server.An RSA private key is generated automatically. This is the chef-validator key and should be saved to a safe location. The--filename
option will save the RSA private key to the specified absolute path.For example:$ chef-server-ctl org-create 4thcoffee 'Fourth Coffee, Inc.' --association_user stevedanno --filename /path/to/4thcoffee-validator.pem
- Enable additional features of the Chef server! The packages may be downloaded directly as part of the installation process or they may be first downloaded to a local directory, and then installed.Use DownloadsThe
install
subcommand downloads packages from https://packages.chef.io/ by default. For systems that are not behind a firewall (and have connectivity to https://packages.chef.io/), these packages can be installed as described below.Feature Command Chef Manage Use Chef management console to manage data bags, attributes, run-lists, roles, environments, and cookbooks from a web user interface.On the Chef server, run:$ chef-server-ctl install chef-manage
then:$ chef-server-ctl reconfigure
and then:$ chef-manage-ctl reconfigure
NoteStarting with the Chef management console 2.3.0, the Chef MLSA must be accepted when reconfiguring the product. If the Chef MLSA has not already been accepted, the reconfigure process will prompt for ayes
to accept it. Or runchef-manage-ctl reconfigure --accept-license
to automatically accept the license. - Open the chef-manage UI in the browser with https:///login
Login with the credentials of the user you just created in the above step.
On the nodes panel if you see the following error: Error An error occurred, please try again
Then look at the chef logs with the command chef-server-ctl tail
The error will be majorly with the nginx. The error that I was facing was as follows:
FAILED SocketConnector@127.0.0.1:8983: java.net.BindException: Address already in use (Bind failed). The issue was that solr service was already running on my server before installing chef. I had to stop the solr service, the issue was resolved. I was able to see the nodes panel without any error. Chef Push Jobs Use Chef push jobs to run jobs—an action or a command to be executed—against nodes independently of a chef-client run.On the Chef server, run:$ chef-server-ctl install opscode-push-jobs-server
then:$ chef-server-ctl reconfigure
and then:$ opscode-push-jobs-server-ctl reconfigure
Reporting Use Reporting to keep track of what happens during every chef-client runs across all of the infrastructure being managed by Chef. Run Reporting with Chef management console to view reports from a web user interface.On the Chef server, run:$ chef-server-ctl install opscode-reporting
then:$ chef-server-ctl reconfigure
and then:$ opscode-reporting-ctl reconfigure
- If you want to login into postgres database of chef and see the data present in there execute the following command:
chef-server-ctl psqlYou will get an output similar to:
[ERROR] You must supply a service name. Valid names include: bifrost, bookshelf, oc-id, oc_erchef, oc_id, opscode-erchef, opscode_chef, push-jobs, reporting
This is the list of databases you can login and see the data from.
The main database where the chef data is present is opscode-erchef (previously opscode_chef). You can login to the database with the following command:
chef-server-ctl psql opscode-erchef
To see the tables in the database execute the following psql command:
\dt
This will give you a list as below:
Schema | Name | Type | Owner
——–+——————————————–+——-+—————
public | checksums | table | opscode-pgsql
public | clients | table | opscode-pgsql
public | containers | table | opscode-pgsql
public | cookbook_artifact_version_checksums | table | opscode-pgsql
public | cookbook_artifact_versions | table | opscode-pgsql
public | cookbook_artifacts | table | opscode-pgsql
public | cookbook_version_checksums | table | opscode-pgsql
public | cookbook_versions | table | opscode-pgsql
public | cookbooks | table | opscode-pgsql
public | data_bag_items | table | opscode-pgsql
public | data_bags | table | opscode-pgsql
public | environments | table | opscode-pgsql
public | groups | table | opscode-pgsql
public | keys | table | opscode-pgsql
public | node_policy | table | opscode-pgsql
public | nodes | table | opscode-pgsql
public | opc_customers | table | opscode-pgsql
public | opc_users | table | opscode-pgsql
public | org_migration_state | table | opscode-pgsql
public | org_user_associations | table | opscode-pgsql
public | org_user_invites | table | opscode-pgsql
public | orgs | table | opscode-pgsql
public | policies | table | opscode-pgsql
public | policy_groups | table | opscode-pgsql
public | policy_revisions | table | opscode-pgsql
public | policy_revisions_policy_groups_association | table | opscode-pgsql
public | roles | table | opscode-pgsql
public | sandboxed_checksums | table | opscode-pgsql
public | users | table | opscode-pgsqlYou can see the data in every table with the follwoing command:
select * from <table-name>; - If you want to see all the settings and configurations chef is using you can see the file:
vi /etc/opscode/chef-server-running.json - Find chef version:
head -n1 /opt/opscode/version-manifest.txt - Go to the chef dashboard -> Administration-> Organizations-> Starter Kit – > download starter kit.
unzip chef-starter.zip
Then unzip the starter kit in workstation. You can also use your chef server for this purpose. A chef-repo directory will be created.
cd chef-repo/.chef
cat knife.rb
Check the configurations in knife.rb file. - Install chefdk
rpm -ivh https://packages.chef.io/files/stable/chefdk/2.2.1/el/7/chefdk-2.2.1-1.el7.x86_64.rpm - Execute the following command
knife ssl fetch
If you get an permission denied error then execute the command with sudo privileges.
After execuing the above command you will get an output similar to the above:
WARNING: Certificates from vrushabh.novalocal will be fetched and placed in your trusted_cert
directory (/root/chef-repo/.chef/trusted_certs)…… - Knife is used to create cookbooks and to upload the cookbooks to chef server, upload roles, runlist etc.
Knife allows us to communicate with our chef server. - Lets bootstrap our node to chef server. For this you will need another machine which is accessible from the machine you have unzipped the chef-repo directory. Create a user in the node machine with sudo privileges, which can be ‘ssh’ed from our workstation and chef server.
Execute the command:
knife bootstrap 192.168.1.240 -N chef-node –ssh-user user1 –sudo
Where ‘chef-node’ is the node name i am giving to the node. This can be any name. If -N option is not provided the default nodename will be the hostname of the node.
‘user1’ is the user I created on node.
You might get an error: Your private key could not be loaded.
cd chef-repo then execute the bootstrap command.
You will see an output similar to the following:
……
192.168.1.240 Converging 0 resources
192.168.1.240
192.168.1.240 Running handlers:
192.168.1.240 Running handlers complete
192.168.1.240 Chef Client finished, 0/0 resources updated in 16 seconds - Then goto the chef dashboard and on the nodes panel page you can see the newly added node. In the attributes panel you can see the attributes belonging to the node like CPU,RAM etc.
- Create a project in github(ex: chef-fluency-badge). Then cd chef-repo and execute the following command:
git init
git add ./
git config –global user.email “”
git config –global user.name “”
git commit -am “Adding chef-repo”
git remote add origin https://github.com//chef-fluency-badge.git
git push -u origin master - Create a cookbook with the followig command:
knife cookbook create learn for chef < 12
chef generate cookbook for chef => 12
Add this learn cookbook to git repo with the following commands:
git add ./
git commit -m “adding learn cookbook”
git push -u origin master - Lets create apache cookbook:
cd chef-repo
chef generate cookbook cookbooks/apache
cd cookbooks/apache
Edit the metadata.rb file and enter your details. Save and close.
cd recipes
Edit default.rb and add the following lines:
##123456789package 'apache2' do
package_name 'httpd'
action :install
end
service 'apache2' do
service_name 'httpd'
action [:start, :enable]
end
- Check the ruby syntax by running the command:
ruby -c default.rb
foodcritic default.rbfoodcritic should not give any error message.
Now we want to change the default apache webpage.
In the same recipes directory create websites.rb with following content:
##12345file "default www" do
path '/var/www/html/index.html'
content 'Hello world'
end
<span data-mce-type="bookmark" id="mce_SELREST_start" data-mce-style="overflow:hidden;line-height:0" style="overflow:hidden;line-height:0" >&#65279;</span>
Check it with foodcritic. You can also comeback to cookbooks directory and execute:
foodcritic apache - Upload the cookbook to the chef server with the following command:
knife cookbook upload apacheYou can also add this code to git repo. - Then goto the chef-manage UI, in the policies section you will see the apache cookbook. Policy is basically configuration management for a node.
- In your workstation machine execute the knife node list command to get a list of nodes.
- Then we need to add our cookbook to run_list. Execute the following command for it:
knife node run_list add chef-node ‘recipe[apache]’Then execute the following command to retreive the list of run_list:
knife node show chef-nodeThe above command gives a summary of the node like recipes, OS version etc. To get a detailed list execute the following command:
knife node show -l chef-node - Now we will dry-run our cookbook on chef-client:
chef-client –why-run
OR
chef-client -W - After the why-run is successful then execute the cookbook with the following command:
chef-clientYou can check the httpd service status, it should be running. Then go to the browser and hit the <IP> of the client. It will not show our “Hello World” page but the default apache “Testing 123” page.
This was because our websites recipe did not execute. Edit the default.rb and add the following line:
include_recipe ‘apache::websites’ - Then upload the apache cookbook to chef-server:
knife cookbook upload apache - Then run chef-client your websites recipe will get executed.
- Suppose if we want to run the websites recipe manually everytime.
Edit the websites.rb file and remove the include_recipe line we just added above. Then again upload the cookbook to the chef-server. - Then we need to add the websites recipe to the run_list otherwise after running chef-client the websites recipe will not get executed.
You can add the recipe with the following command:
knife node run_list add chef-node ‘recipe[apache::websites]’ -a recipe[apache]or you can also execute knife node run_list add ‘apache’ - Now you can run chef-client it will execute the websites recipe.
- The client configuration can be found at /etc/chef/client.rb on the client machine.
- Thus we have installed and configured chef.
Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions. Configuration files describe to Terraform the components needed to run a single application or your entire datacenter. Terraform generates an execution plan describing what it will do to reach the desired state, and then executes it to build the described infrastructure. As the configuration changes, Terraform is able to determine what changed and create incremental execution plans which can be applied. The infrastructure Terraform can manage includes low-level components such as compute instances, storage, and networking, as well as high-level components such as DNS entries, SaaS features, etc. The key features of Terraform are: Infrastructure as Code : Infrastructure is described using a high-level configuration syntax. This allows a blueprint of your datacenter to be versioned and...
Comments
Post a Comment