Difference between revisions of "Handson1"

From Gridkaschool
(Manifests)
(Manifests)
Line 40: Line 40:
 
## Hint:
 
## Hint:
 
##* https://docs.puppet.com/puppet/latest/reference/type.html#notify
 
##* https://docs.puppet.com/puppet/latest/reference/type.html#notify
##* https://docs.puppetlabs.com/puppet/3.8/reference/lang_relationships.html
+
##* https://docs.puppet.com/puppet/latest/reference/lang_relationships.html
 
##* Resources with lower case are instantiating, Resources with first letter upper case are reference
 
##* Resources with lower case are instantiating, Resources with first letter upper case are reference
 
# Write the fourth manifest to configure the sshd daemon [[Media:handson14.pp|solution]]
 
# Write the fourth manifest to configure the sshd daemon [[Media:handson14.pp|solution]]

Revision as of 12:05, 8 August 2016

Hands-On

Environment

  1. Login via ssh to the workgroup server gridkalogin01.desy.de with your assigned account
  2. Check if you can login via ssh to you assigned VM as root - hint: An ssh key-pair was generated and put into your home directory on gridkalogin01. The public key was put in 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:

Manifests

  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 debug messages 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. Start the sshd daemon
    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. Write the fifth manifest solution
    1. Improve the third manifest. The text Hello World should be in a variable.
    2. Examine the facts of the VM locally with facter
    3. Write a manifest which gives a debug message if the machine is virtual machine and the uptime
    4. Run the manifest on your VM and on naf-school03
    5. Hints:

Classes

  1. Write your first class
    1. Classes are blocks of resources
    2. They divide the definition and the declarations
    3. Classes could be parameterized
    4. Syntax:
      class my_class {
      ... puppet code ...
      }
    5. transform the fourth manifest (the sshd example) to a class.
    6. Apply the manifest. And examine if the manifest is still working
    7. A class could be instantiated/declared with
      • include foo Statement
      • Resource like class{'foo':}
      • Resource like with parameter
        class{'foo':
        bar => 42,
        }
    8. Add the declaration to the end of the manifest. And re-apply the manifest
    9. Add a string as parameter to the class and print this string as debug message
    10. Hints:

Modules

  1. 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
      sshd/
      sshd/files
      sshd/manifests
    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 config file from /tmp/examples to sshd/files and edit the file resource (see hints)
    6. Hints:
  2. 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:

Templates

  1. Templates could be used like static files
  2. The difference is that the template will be evaluated before it is written
  3. Templates could use
    • Variables
    • Facts
    • Ruby Code (in fact they are standard ruby templates)
  4. Write a class which solution
    • write a file /tmp/testfile
    • In the class define a variable $myVar
    • In the file write 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
  5. 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: