Puppet Class: libraryupgrader

Defined in:
modules/libraryupgrader/manifests/init.pp

Overview

Class: libraryupgrader

This class sets up libraryupgrader aka LibUp www.mediawiki.org/wiki/Libraryupgrader

Parameters:

  • base_dir (Optional[Stdlib::Unixpath]) (defaults to: undefined)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'modules/libraryupgrader/manifests/init.pp', line 6

class libraryupgrader(
    Optional[Stdlib::Unixpath] $base_dir = undefined
){
    $data_dir  = "${base_dir}/data"
    $clone_dir  = "${base_dir}/libraryupgrader"

    apt::package_from_component { 'thirdparty-kubeadm-k8s':
        component => 'thirdparty/kubeadm-k8s-1-15',
        packages  => ['docker-ce'],
    }

    require_package([
        'virtualenv',
        'rabbitmq-server',
    ])

    if os_version('debian == buster') {
        # We need iptables 1.8.3+ for compatibility with docker
        # (see comments on <https://gerrit.wikimedia.org/r/565752>)
        apt::pin { 'iptables':
            pin      => 'release a=buster-backports',
            package  => 'iptables',
            priority => '1001',
            before   => Package['docker-ce'],
        }
    }

    file { $data_dir:
        ensure => directory,
        owner  => 'libup',
        group  => 'libup',
        mode   => '0755',
    }

    group { 'libup':
        ensure => present,
        name   => 'libup',
        system => true,
    }

    user { 'libup':
        ensure  => present,
        system  => true,
        groups  => 'docker',
        require => Package['docker-ce'],
    }

    git::clone {'labs/libraryupgrader':
        ensure    => present,
        directory => $clone_dir,
        branch    => 'master',
        require   => User['libup'],
        owner     => 'libup',
        group     => 'libup',
    }

    # Create virtualenv
    exec { 'create virtualenv':
        command => '/usr/bin/virtualenv -p python3 venv',
        cwd     => $clone_dir,
        user    => 'libup',
        creates => "${clone_dir}/venv/bin/python",
        require => Git::Clone['labs/libraryupgrader'],
    }

    # Bootstrap initial dependencies
    exec { 'install virtualenv dependencies':
        command => "${clone_dir}/venv/bin/pip install -r requirements.txt",
        cwd     => $clone_dir,
        user    => 'libup',
        # Just one example file created after the deps are installed
        creates => "${clone_dir}/venv/bin/gunicorn",
        require => Exec['create virtualenv'],
    }

    # Install libup into venv
    exec { 'install libup':
        command => "${clone_dir}/venv/bin/python install setup.py",
        cwd     => $clone_dir,
        user    => 'libup',
        # Just one example file created after libup is installed
        creates => "${clone_dir}/venv/bin/libup-run",
        require => Exec['install virtualenv dependencies'],
    }

    systemd::service { 'libup-celery':
        ensure  => present,
        content => template('libraryupgrader/initscripts/libup-celery.service.erb'),
        require => [
            Exec['install libup'],
            Package['rabbitmq-server'],
        ]
    }

    systemd::service { 'libup-web':
        ensure  => present,
        content => template('libraryupgrader/initscripts/libup-web.service.erb'),
        require => Exec['install libup']
    }

    systemd::service { 'libup-ssh-agent':
        ensure  => present,
        content => template('libraryupgrader/initscripts/libup-ssh-agent.service.erb'),
        require => User['libup'],
    }

    systemd::timer::job { 'libup-run':
        description => 'Trigger the libup daily run',
        command     => "${clone_dir}/venv/bin/libup-run",
        user        => 'libup',
        interval    => {
            'start'    => 'OnCalendar',
            'interval' => '*-*-* 00:00:00',  # Every day at midnight
        },
        require     => Exec['install libup'],
    }
}