Administration von Unix-Rechnern mit cfengine


Klassen

  • bei Abarbeitung eines cfengine-Programms sind bestimmte Klassen definiert
  • welche Klassen definiert sind, ergibt sich
    • aus der Art des Aufrufs des Programms
    • aus der konkreten Hard- und Softwareumgebung des Systems, in dem das Programm läuft
    • aus Datum, Uhrzeit und Wochentag des Programmlaufs
    • aus dem Hostnamen auf dem das Programm läuft
    • durch im Programm definierte Gruppen
    • in Abhängigkeit der Ausführung bestimmter Aktionen im Programm
  • definierte Klassen bestimmen, welche Teile der einzelnen Aktionen im Programm abgearbeitet werden
  • generische Klasse any:: ist immer definiert

Vordefinierte Klassen

  • Hard- und Softwareumgebung
    • z.B.: sun4, sun3, 32_bit, solaris, sunos_5.5.1, sunos_sun4m_5.5.1, ...
    • ermitteln mit
    • asmodi% cfengine -p -v 
      ... 
      Host name is: asmodi 
      Operating System Type is sunos 
      Operating System Release is 5.5.1 
      Architecture = sun4u 
       

      Using internal soft-class solaris for host asmodi 

      The time is now Mon Dec  1 11:44:20 1997 
       

      ------------------------------------------------------------------------ 

      Additional hard class defined as: 32_bit 
      Additional hard class defined as: sunos_5.5.1 
      Additional hard class defined as: sunos_sun4u 
      Additional hard class defined as: sunos_sun4u_5.5.1 
      Additional hard class defined as: sunos_sun4u_5.5.1_Generic_103640-12 

      GNU autoconf class from compile time: solaris2.5.1 
      ...

       
  • zeitabhängige Klassen
    • Wochentage: Monday, Tuesday, Wednesday, ..., Sunday
    • Stunde: Hr00, Hr01, Hr02, ..., Hr23
    • Minute: Min00, Min01, Min03, ..., Min59
    • 5-Minuten-Intervalle: Min00_05, Min05_10, ... Min55_00
    • Tag im Monat: Day1, Day2, Day3, ... Day31
    • Monat: January, February, ... December
    • Jahr: Yr1997, Yr1998, ..., Yr2000, Yr2001, ...
  • Aufruf des Programms
    • Optionen
      • --define class_(bzw. -D class)
      • --undefine class (bzw. -N class)
    • z.B.
    • host% cfengine -D `fs sysname`
       
  • Hostnamen
    • sowohl der unqualifizierte als auch der vollständige Hostname stehen als Klasse zur Verfügung

Gruppen

  • Gruppen dienen der expliziten Definition von Klassen
  • die Vereinbarung wird in der section groups: (ab Version 1.4.0 synomym auch classes:) vorgenommen
  • es gibt folgende Möglichkeiten
    • Aufzählungen (Listen)
    • Nutzen von NIS-Netzgruppen
    • Ausführen externer Kommandos
  • Beispiele:
  • groups: 
      Clients = ( dig dag ) 
      Server  = ( digedag ) 

      SomeTimes = (Hr08 Wednesday Day3) 

      PC_Pool = ( +@pc_pool ) 
      All     = ( Clients Server PC_Pool ) 

      have_cc = ( '/bin/test -f /usr/ucb/cc' ) 

     

Dynamische Klassendefinitionen

  • einige sections erlauben die dynamische Definition von Klassen in Abhängigkeit davon, ob eine bestimmte Aktion ausgeführt wurde (z.B. bei copy:) oder eine bestimmte Situation festgestellt wurde (z.B. bei required:)

Benutzung von Klassen

  • innerhalb einer section entscheidet die Tatsache, ob eine Klasse definiert ist, über die Abarbeitung einer bestimmten Aktion
  • dabei gibt es verschiedene Kombinationsmöglichkeiten (compound classes), die durch die Angabe von Operatoren bestimmt werden
  • Operator Bedeutung/Vorrang
    () Klammern von Teilausdrücken, höchster Vorrang
    ! NOT
    . AND
    | oder || OR, niedrigster Vorrang
  • die entsprechende Aktion wird ausgeführt, wenn bei Auswertung des Ausdrucks der Wert true entsteht
  • Beispiele
  • solaris.Monday:: 

    solaris|hpux10:: 

    PC_Pool.!(dig|dag):: 

    SomeTimes.!SunDay:: 

    PC_Pool.solaris::

     

Variablen

  • in einem cfengine-Programm stehen folgenden Variablen zur Verfügung
    • alle Umgebungsvariablen (ähnlich der Shell)
    • selbstdefinierte Variablen (Makros)
    • spezielle interne Variablen (mit Werten vorbelegte reservierte Bezeichner)
  • Variablen werden referenziert als $(variable) oder ${variable}
  • Makros werden in der control: definiert
  • control: 
      srcpath  = ( /afs/tu-chemnitz.de/admin/linux ) 
      domain   = ( hrz.tu-chemnitz.de ) 
      linux:: 
        sysadmin = ( m.clauss@hrz.tu-chemnitz.de ) 
        global   = ( /afs/tu-chemnitz.de/global/linux2 ) 
      solaris:: 
        sysadmin = ( m.ehrig@hrz.tu-chemnitz.de,t.mueller@hrz.tu-chemnitz.de ) 
        global   = ( /afs/tu-chemnitz.de/global/sun5 ) 

    links: 
      /uni/global -> $(global)

  • spezielle interne Variablen werden beim Start des cfengine-Programms  mit Werten vorbelegt, dazu gehören z.B.
  • host unqualifizierter Hostname
    fqhost vollständiger Hostname
    editfilesize maximale Filegröße editierbarer Files (default: 1000 Byte)
     


01. Dezember 1997
Thomas Müller, TU Chemnitz, URZ