Puppet Class: role::addlink

Defined in:
puppet/modules/role/manifests/addlink.pp

Overview

Sets up the Add Link pipeline. See wikitech.wikimedia.org/wiki/Add_Link

Parameters

db_name

Logical MySQL database name (example: 'addlink').

db_user

MySQL user to use to connect to the database (example: 'addlink_user').

db_pass

Password for MySQL account (example: 'secret123').

service_dir

Path where mwaddlink should be installed (example: '/srv/mwaddlink').

service_port

Port which the service listens on (example: 8000).

Parameters:

  • db_name (Any)
  • db_user (Any)
  • db_pass (Any)
  • service_dir (Any)
  • service_port (Any)


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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# File 'puppet/modules/role/manifests/addlink.pp', line 22

class role::addlink (
    $db_name,
    $db_user,
    $db_pass,
    $service_dir,
    $service_port,
) {
    require ::mysql
    require ::virtualenv
    require ::mwv
    include ::mediawiki

    include ::role::growthexperiments

    # needed by PyMySQL
    require_package('libmariadbclient-dev')

    $venv_dir = "${service_dir}/.venv"
    $server_url = $::mediawiki::server_url

    git::clone { 'research/mwaddlink':
        directory => $service_dir,
        branch    => 'main',
    }
    virtualenv::environment { $venv_dir:
        owner   => $::share_owner,
        group   => $::share_group,
        python  => 'python3.7',
        require => Git::Clone['research/mwaddlink'],
    }
    virtualenv::package { 'mwaddlink':
        path          => $venv_dir,
        package       => "-r ${service_dir}/requirements-query.txt",
        python_module => 'mwparserfromhell',
    }
    service::gitupdate { 'mwaddlink':
        dir            => $service_dir,
        virtualenv_dir => $venv_dir,
        type           => 'python',
        update         => true,
        restart        => true,
    }

    file { "${venv_dir}/bin/download-punkt.py":
        content => template('role/addlink/download-punkt.py.erb'),
        owner   => 'vagrant',
        mode    => 'a+rx',
        require => Virtualenv::Environment[$venv_dir],
    }
    exec { 'nltk-punkt':
        command => "${venv_dir}/bin/python ${venv_dir}/bin/download-punkt.py",
        user    => 'vagrant',
        creates => '/home/vagrant/nltk_data',
        require => [
            File["${venv_dir}/bin/download-punkt.py"],
            Virtualenv::Package['mwaddlink'],
        ],
    }

    mysql::db { $db_name:
        ensure => present,
    }
    mysql::user { $db_user:
        ensure   => present,
        grant    => "ALL ON ${db_name}.*",
        password => $db_pass,
        require  => Mysql::Db[$db_name],
    }
    exec { 'load mwaddlink data':
        command     => "${venv_dir}/bin/python load-datasets.py --download --wiki-id simplewiki --path=/tmp/mwaddlink",
        environment => [
          'DB_BACKEND=mysql',
          "DB_DATABASE=${db_name}",
          "DB_USER=${db_user}",
          "DB_PASSWORD=${db_pass}",
        ],
        cwd         => $service_dir,
        user        => 'vagrant',
        subscribe   => Mysql::User[$db_user],
        refreshonly => true,
        require     => Systemd::Service['mwaddlink'],
    }

    systemd::service { 'mwaddlink':
        ensure             => 'present',
        service_params     => {
            require   => [
                Virtualenv::Package['mwaddlink'],
                Mysql::User[$db_user],
                Exec['nltk-punkt'],
            ],
        },
        epp_template       => true,
        template_variables => {
            db_name      => $db_name,
            db_user      => $db_user,
            db_pass      => $db_pass,
            service_dir  => $service_dir,
            venv_dir     => $venv_dir,
            service_port => $service_port,
            server_url   => $server_url,
        },
        template_dir       => 'role/addlink/systemd',
    }

    file { "${venv_dir}/bin/mwaddlink-flask":
        content => template('role/addlink/mwaddlink-flask.erb'),
        owner   => 'vagrant',
        mode    => 'a+rx',
        require => Virtualenv::Environment[$venv_dir],
    }

    $service_url = "http://mwaddlink${::mwv::tld}${::port_fragment}"
    apache::reverse_proxy { 'mwaddlink':
        port => $service_port,
    }
    mediawiki::settings { 'GrowthExperiments-Mwaddlink':
        values => template('role/addlink/settings.php.erb'),
    }
    mediawiki::import::text { 'VagrantRoleAddLink':
        content => template('role/addlink/VagrantRoleAddLink.wiki.erb'),
    }
}