From Gridkaschool



  1. Login via ssh to the workgroup server gridkalogin01.desy.de with your assigned account
  2. Check if you can login via ssh to your assigned VM as root - hint: An ssh key-pair was generated and put into your home directory on gridkalogin01. The public key is copied to the root account of your VM
  3. Check if you can edit a text file on the wgs and the VM node. We provide vim, emacs, nano

First steps

  1. Use the puppet RAL to examine and configure the VM node solution
    1. Show all managed resources
    2. Show description of the resource service
    3. Show all configured services
    4. Create a testuser
    5. Show resource of the created user
    6. Delete the testuser
    7. HINT:


  1. Write the first Manifest solution
    1. Create a puppet manifest which creates two testuser. Filename: handson1create.pp
    2. Create a puppet manifest which removes both testuser. Filename: handson1remove.pp
    3. Concatenate both puppet manifest. Filename: handson1combine.pp
    4. Apply the manifests to your node.
    5. Try to understand why the handson1combine.pp manifest fails?
    6. Hint:
  2. Write the second Manifest solution
    1. Create a puppet manifest which creates the file /etc/motd with the content Hello World!. Filename: handson1motd.pp
    2. Apply the manifest to your node
    3. Examine what happens if you re-apply the manifest.
    4. Add a line to the file /etc/motd and re-apply the manifest
    5. Hint:
  3. Write the third Manifest solution
    1. Write a manifest which writes 10 time Hello World followed by a number from 1 to 10. The messages should appear in the following order
      • Hello World 1
        Hello World 2
        Hello World 3
        Hello World 10
    2. Hint:
  4. Write the fourth manifest to configure the sshd daemon solution
    1. Copy the file /etc/ssh/sshd_config in the folder /tmp
    2. Create a manifest which defines the following resources in the described order
      1. Install package sshd
      2. Copy the file from /tmp to /etc/ssh/sshd_config
      3. Ensure that the daemon is running and restart the sshd daemon when the config has changed
    3. Apply the manifest with "--noop" parameter the /etc/ssh/sshd_config file shouldn't be changed. No line like
      Notice: /Stage[main]/Main/File[foo]/content: current_value {md5}...., should be {md5}.... (noop)
    4. Apply the manifest without "--noop" parameter
  5. Improve the third manifest. solution
    1. The text Hello World should be in a variable.
    2. Examine the facts of the VM locally with facter and write a manifest which gives a debug message with the uptime and if the machine is virtualized.
    3. Hints:

Classes And Modules

  1. Write your first class solution
    1. transform the the sshd example manifest to a class.
    2. Apply the manifest. And examine if the manifest is still working
    3. Add the declaration to the end of the manifest. And re-apply the manifest
    4. Add a string as parameter to the class and print this string as debug message
    5. Hints:
  2. Write your first module solution
    1. A module is a directory tree which stores all manifests, files, templates, tests which belong to one feature
    2. Create the following tree structure
    3. Copy the sshd class manifest as sshd/manifests/init.pp
    4. Apply the module. Set the parameter --modulepath to the directory where sshd directory was created, and add -e "include sshd"
    5. Copy the /etc/ssh/sshd_config file to sshd/files and edit the file resource (see hints)
    6. Hints:
  3. Write your first pretty module solution
    1. It is best practice to divide a feature in subclasses.
      • install - Install the packages
      • config - Configure the feature
      • service - start the service
      • params - define the parameter of the feature
    2. create for each subclass an seperate file under manifest
    3. create the file init.pp
      • will be autoloaded if you declare the module
      • defines a class with the same name like the module
      • declare all subclasses.
    4. Move the ordering from the resources to the init class using chaining arrows
    5. Hints:


  1. Write a manifest which utilize templates solution
    • Initialize a variable $myVar with a string.
    • write a file /tmp/testfile with the content of $myVar and the uptime fact
    • Alter the output depending on the uptime hours. less then 24 hours write the uptime_hours otherwise the uptime_days
  2. Hints:

Node definitions

  1. Write a node definition which includes the pretty sshd module solution
  2. Apply the node definition (don't forget the modulepath)
  3. Hints: