DevOps Classroom Series – 15/Apr/2020

Test Kitchen

  • Test Kitchen is a tool developed to test the chef-cookbooks on multiple platforms. For official docs refer here

  • For this test kitchen has a component which is called as driver, which enables kitchen to test in various platforms such as

    • Vagrant
    • Virtual Box
    • VM Ware
    • Hyper V
    • AWS
    • Azure
    • Google Cloud
    • Docker
  • In this series we will be using AWS and Azure

Test Kitchen with AWS

  • Kitchen with AWS Driver is what we would like to use.
  • Generate a cookbook for test kitchen demo with AWS
chef generate cookbook -b kitchenawsdemo
  • Lets write a very simple resource to create a file in ‘/tmp/test.txt’. I will be using file as mentioned in the documentation in the Default.rb
#
# Cookbook:: kitchenawsdemo
# Recipe:: default
#
# Copyright:: 2020, The Authors, All Rights Reserved.
file '/tmp/test.txt' do
    content 'hello im testing'
    action :create
end
  • Now i want to test this cookbook on a Linux Machine in AWS Cloud, for this we have to look at two things
    • Use Kitchen.yml file generated along with cookbook to configure the environment (AWS) to test Preview
    • Connecting to AWS: Refer to AWS Preparation Section in here Preview
    • We will be using a driver called as ec2 refer here
    • Install AWS CLI from here
    • Make a note of
      • region
      • az
      • VPC-id
      • subnet-id
      • security group
      • Image id: Preview Preview
    • My list looks like
    "SubnetId": "subnet-89fb32ee",
    "VpcId": "vpc-4366ce24"
    region: us-west-2
    az: "us-west-2b"
    image-id:  ami-0d1cd67c26f5fca19
    username: "ubuntu"
    keypair: chef.pem
    security group: sg-0fde1a94ae5592488 (chefclient)
    
    • Kitchen.yml file looks as shown below
    ---
    driver:
    name: ec2
    aws_ssh_key_id: chef
    region: us-west-2
    availability_zone: us-west-2b
    subnet_id: subnet-89fb32ee
    instance_type: t2.micro
    image_id: 'ami-0d1cd67c26f5fca19'
    security_group_ids: ["sg-0fde1a94ae5592488"]
    
    ## The forwarded_port port feature lets you connect to ports on the VM guest via
    ## localhost on the host.
    ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports.html
    
    #  network:
    #    - ["forwarded_port", {guest: 80, host: 8080}]
    
    provisioner:
    name: chef_zero
    # You may wish to disable always updating cookbooks in CI or other testing environments.
    # For example:
    #   always_update_cookbooks: <%= !ENV['CI'] %>
    always_update_cookbooks: true
    
    ## product_name and product_version specifies a specific Chef product and version to install.
    ## see the Chef documentation for more details: https://docs.chef.io/config_yml_kitchen.html
    #  product_name: chef
    #  product_version: 15
    transport:
    ssh_key: "./chef.pem"
    connection_timeout: 10
    connection_retries: 3
    username: ubuntu
    
    verifier:
    name: inspec
    
    platforms:
    - name: ubuntu-18.04
    # - name: centos-7
    
    suites:
    - name: default
        run_list:
        - recipe[kitchenawsdemo::default]
        verifier:
        inspec_tests:
            - test/integration/default
        attributes:
    
    
    • Now cd into the cookbook folder from terminal and execute the following commands
    kitchen list
    kitchen create
    kitchen list
    
    
    • Make changes in the recipe and execute the kitchen converge
    • Once you are confident with your changes, then delete the environment using kitchen destroy

Note:

  • We need to learn to work with multiple platforms if required.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Please turn AdBlock off
Floating Social Media Icons by Acurax Wordpress Designers

Discover more from Direct DevOps from Quality Thought

Subscribe now to keep reading and get access to the full archive.

Continue reading

Visit Us On FacebookVisit Us On LinkedinVisit Us On Youtube