$30 off During Our Annual Pro Sale. View Details »

Rex - Mini-Einführung Frankfurt Perl-Community Workshop 2016

Renee
June 04, 2016

Rex - Mini-Einführung Frankfurt Perl-Community Workshop 2016

Renee

June 04, 2016
Tweet

More Decks by Renee

Other Decks in Programming

Transcript

  1. Rex

    View Slide

  2. Rex
    rexify.org

    View Slide

  3. Automatisierung / Konfiguration
    von Aufgaben

    View Slide

  4. Automatisierung / Konfiguration
    von Aufgaben
    mit Perl!

    View Slide


  5. OTRS-Demoinstanzen

    Auswertungen von Servern
    holen

    Upgrades

    Deployment von
    Anwendungen

    View Slide


  6. Tasks werden in
    Rexfile gespeichert

    Start über
    rex

    View Slide

  7. task uname_a => sub {
    my $result = run 'uname -a';
    say "uname: $result";
    };

    View Slide

  8. $ rex uname_a
    [2016-06-04 11:34:24] INFO - Running task uname_a on
    uname: Linux perl-services 3.13.0-86-generic \
    #131-Ubuntu SMP Thu May 12 23:33:13 UTC 2016 \
    x86_64 x86_64 x86_64 GNU/Linux

    View Slide


  9. Wenn kein Server angegeben
    ist, wird alles auf localhost
    ausgeführt

    View Slide

  10. $ rex -H perl-services.de uname_a

    View Slide


  11. Server können gruppiert
    werden

    View Slide

  12. group fra_pw => qw/
    perl-services.de
    frankfurt.pm
    /;
    task uname_a => sub {
    my $result = run 'uname -a';
    say "uname: $result";
    };

    View Slide

  13. $ rex -G fra_pw uname_a

    View Slide


  14. Beschreibungen für
    die Tasks

    View Slide

  15. desc "Lasse uname laufen...";
    task uname_a => sub {
    my $result = run 'uname -a';
    say "uname: $result";
    };

    View Slide

  16. Auth

    View Slide

  17. user "root";
    password "mypassword";
    desc "Lasse uname laufen...";
    task uname_a => sub {
    my $result = run 'uname -a';
    say "uname: $result";
    };

    View Slide

  18. user 'root';
    private_key '/path/to/your/private.key';
    public_key '/path/to/your/public.key';
    password 'my_password';
    key_auth;
    desc "Lasse uname laufen...";
    task uname_a => sub {
    my $result = run 'uname -a';
    say "uname: $result";
    };

    View Slide

  19. Beispiele

    View Slide

  20. task prepare => sub {
    pkg "apache2", ensure => "latest";
    service "apache2", ensure => "started";
    };

    View Slide

  21. task prepare => sub {
    create_user "otrs" =>
    home => '/opt/otrs/',
    no_create_home => 1,
    %{ $params->{otrs_user} || {} };
    };

    View Slide

  22. task prepare => sub {
    # download, unpack and link otrs
    if ( ! is_file '/tmp/otrs-' . $version . '.tar.gz' ) {
    my $source = "http://otrs/.../otrs-$version.tar.gz";
    my $target = "/tmp/otrs-$version.tar.gz";
    run "wget -O $target $source";
    }
    };

    View Slide

  23. task prepare => sub {
    file "/opt/otrs-$version/Kernel/Config.pm",
    content => template(
    '@Config',
    db => {
    host => $params->{db}->{schema}->{host},
    schema => $params->{db}->{schema}->{name},
    user => $params->{db}->{user}->{name},
    password => $params->{db}->{user}->{password},
    dsn => $self->db_obj->dsn,
    },
    config_pm => $params->{'config.pm'} || [],
    ),
    owner => "root",
    mode => 630;
    };
    __DATA__
    @Config
    $Self->{DatabaseHost} = '<%= $db->{host} %>';
    $Self->{Database} = '<%= $db->{schema} %>';
    $Self->{DatabaseUser} = '<%= $db->{user} %>';

    View Slide

  24. $ rex -e 'say `uname -a`'
    [2016-06-04 12:29:16] INFO - Running task eval-line on
    Linux perl-services 3.13.0-86-generic #131-Ubuntu SMP \
    Thu May 12 23:33:13 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

    View Slide

  25. Zusatzpakete

    View Slide


  26. Ähnlich wie CPAN-Module

    Für alle möglichen Bereiche
    existieren Zusatzpakete

    Werden mit „include“
    eingebunden

    View Slide

  27. $ rexify --use Rex::Database::MySQL

    View Slide

  28. include qw/Rex::Database::MySQL::Admin/;
    set mysql => user => 'root';
    desc "Get the timestamp when the users logged in for the last time";
    task last_logged_in => sub {
    my $result = Rex::Database::MySQL::Admin::execute({
    schema => 'otrs',
    sql => $sql,
    });
    my @lines = split /\n/, $result;
    shift @lines;
    for my $line ( @lines ) {
    my ($user, $time) = split /\s+/, $line;
    say "$user → $time";
    }
    });

    View Slide