Bug 1357147: run taskcluster-worker on linux hardware; r?dragos draft
authorDustin J. Mitchell <dustin@mozilla.com>
Thu, 20 Apr 2017 21:00:39 +0000
changeset 5113 b0df23e84bb063facecebfc3bd8ef62c1f2ab13f
parent 5112 97c6e89f963a158e5adce71c2d1a1d0a58a184a9
push id2634
push userdmitchell@mozilla.com
push dateThu, 20 Apr 2017 21:00:44 +0000
reviewersdragos
bugs1357147
Bug 1357147: run taskcluster-worker on linux hardware; r?dragos MozReview-Commit-ID: 788fMRgqJOx
manifests/moco-nodes.pp
modules/packages/manifests/mozilla/taskcluster_worker.pp
modules/taskcluster_worker/manifests/init.pp
modules/taskcluster_worker/templates/gnome-terminal.desktop.erb
modules/taskcluster_worker/templates/taskcluster-worker.yml.erb
modules/toplevel/manifests/worker.pp
modules/toplevel/manifests/worker/releng.pp
modules/toplevel/manifests/worker/releng/taskcluster_worker.pp
--- a/manifests/moco-nodes.pp
+++ b/manifests/moco-nodes.pp
@@ -1047,13 +1047,15 @@ node "dhouse-1330169.srv.releng.scl3.moz
     $aspects = [ 'low-security' ]
     include toplevel::server
 }
 
 # See Bug 1343963
 node "moonshot-test3.test.releng.scl3.mozilla.com" {
     $aspects = [ 'low-security' ]
     $slave_trustlevel = 'try'
+    $taskcluster_worker_type = 'gecko-t-linux-talos'
+    $taskcluster_worker_group = 'moonshot-scl3'
     $pin_puppet_server = "releng-puppet2.srv.releng.scl3.mozilla.com"
-    $pin_puppet_env = "dcrisan"
-    include toplevel::slave::releng::test::gpu
+    $pin_puppet_env = "dmitchell"
+    include toplevel::worker::releng::taskcluster_worker::test::gpu
 }
 
--- a/modules/packages/manifests/mozilla/taskcluster_worker.pp
+++ b/modules/packages/manifests/mozilla/taskcluster_worker.pp
@@ -1,13 +1,15 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 class packages::mozilla::taskcluster_worker {
+    include ::users::root
+
     anchor {
         'packages::mozilla::taskcluster_worker::begin': ;
         'packages::mozilla::taskcluster_worker::end': ;
     }
 
     $version = '0.0.13'
 
     # Binaries should be downloaded from
@@ -16,18 +18,27 @@ class packages::mozilla::taskcluster_wor
 
     Anchor['packages::mozilla::taskcluster_worker::begin'] ->
     case $::operatingsystem {
         Darwin: {
             file {
                 '/usr/local/bin/taskcluster-worker':
                     source => "puppet:///repos/EXEs/taskcluster-worker-${version}-darwin-amd64",
                     mode => 0755,
-                    owner => root,
-                    group => wheel,
+                    owner => $::users::root::username,
+                    group => $::users::root::group,
+            }
+        }
+        Ubuntu, Fedora, CentOS: {
+            file {
+                '/usr/local/bin/taskcluster-worker':
+                    source => "puppet:///repos/EXEs/taskcluster-worker-${version}-linux-amd64",
+                    mode => 0755,
+                    owner => $::users::root::username,
+                    group => $::users::root::group,
             }
         }
         default: {
             fail("cannot install on $::operatingsystem")
         }
     } -> Anchor['packages::mozilla::taskcluster_worker::end']
 }
 
--- a/modules/taskcluster_worker/manifests/init.pp
+++ b/modules/taskcluster_worker/manifests/init.pp
@@ -1,35 +1,52 @@
 class taskcluster_worker {
     include packages::mozilla::taskcluster_worker
+    include ::users::root
+    include ::users::builder
+
+    $taskcluster_client_id = secret('taskcluster_worker_client_id')
+    $taskcluster_access_token = hiera('taskcluster_worker_access_token')
+
+    file { '/etc/taskcluster-worker.yml':
+        ensure => present,
+        content => template('taskcluster_worker/taskcluster-worker.yml.erb'),
+        mode => 0644,
+        owner => $::users::root::username,
+        group => $::users::root::group
+    }
 
     case $::operatingsystem {
         Darwin: {
-            $macos_version = regsubst($::macosx_productversion_major, '\.', '-')
-            $taskcluster_client_id = secret('taskcluster_worker_client_id')
-            $taskcluster_access_token = hiera('taskcluster_worker_access_token')
-
             file { '/Library/LaunchAgents/net.taskcluster.worker.plist':
                 ensure => present,
                 content => template('taskcluster_worker/taskcluster-worker.plist.erb'),
                 mode => 0644,
-                owner => root,
-                group => wheel,
-            }
-            file { '/etc/taskcluster-worker.yml':
-                ensure => present,
-                content => template('taskcluster_worker/taskcluster-worker.yml.erb'),
-                mode => 0644,
-                owner => root,
-                group => wheel,
+                owner => $::users::root::username,
+                group => $::users::root::group
             }
             service { "net.taskcluster.worker":
                 require   => [
                     File["/Library/LaunchAgents/net.taskcluster.worker.plist"],
                 ],
                 enable    => true;
             }
         }
+
+        Ubuntu: {
+            file {
+                ["${::users::builder::home}/.config",
+                "${::users::builder::home}/.config/autostart"]:
+                    ensure => directory,
+                    owner  => $users::builder::username,
+                    group  => $users::builder::group;
+                "${::users::builder::home}/.config/autostart/gnome-terminal.desktop":
+                    content => template("taskcluster_worker/gnome-terminal.desktop.erb"),
+                    owner   => $users::builder::username,
+                    group   => $users::builder::group;
+            }
+        }
+
         default: {
             fail("cannot install on $::operatingsystem")
         }
     }
 }
new file mode 100644
--- /dev/null
+++ b/modules/taskcluster_worker/templates/gnome-terminal.desktop.erb
@@ -0,0 +1,15 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+[Desktop Entry]
+Type=Application
+# run the daemon, sending output to syslog and to the terminal
+Exec=gnome-terminal -x sh -c 'exec /usr/local/bin/taskcluster-worker daemon run /etc/taskcluster-worker.yml 2>&1 | logger -t taskcluster-worker -s'
+Hidden=false
+X-GNOME-Autostart-enabled=true
+Name=Taskcluster-Worker
+Comment=Start taskcluster-worker in a terminal session
+StartupNotify=false
+Terminal=false
+Type=Application
+
--- a/modules/taskcluster_worker/templates/taskcluster-worker.yml.erb
+++ b/modules/taskcluster_worker/templates/taskcluster-worker.yml.erb
@@ -7,41 +7,46 @@ transforms:
 config:
   capacity:         1
   credentials:
     # Create a client with the scope:
     # assume:project:taskcluster:worker-test-scopes
     # secrets:get:project/taskcluster/taskcluster-worker/stateless-dns
     clientId:       <%= @taskcluster_client_id %>
     accessToken:    <%= @taskcluster_access_token %>
-  provisionerId:    tc-worker-provisioner
-  workerType:       gecko-t-osx-<%= @macos_version %>
-  workerGroup:      macosx-tc-worker
+  provisionerId:    releng-hardware
+  workerType :      <%= @taskcluster_worker_type %>
+  workerGroup:      <%= @taskcluster_worker_group %>
   workerId:         <%= @hostname %>
   engine:           native
   engines:
     native:
       createUser: false
-      groups: ['staff', 'everyone', 'localaccounts', '_developer', '_lpoperator', 'com.apple.sharepoint.group.1']
   logLevel:         info
   plugins:
+<% if @operatingsystem == 'Darwin' -%>
     disabled:       ['interactive', 'maxruntime']
     reboot:
       rebootAfter: 96 # hours
       rebootCommand: ['/usr/bin/sudo', '/sbin/reboot']
     env:
       extra:
         TMPDIR: {$env: TMPDIR}
         SHELL: '/bin/bash'
         LANG: 'en_US.UTF-8'
         LC_ALL: 'en_US.UTF-8'
         XPC_FLAGS: '0x0'
         XPC_SERVICE_NAME: '0'
-        IDLEIZER_DISABLE_SHUTDOWN: 'true'
         PATH: "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
+<% else -%>
+    disabled:       ['interactive', 'maxruntime', 'env']
+    reboot:
+      rebootAfter: 96 # hours
+      rebootCommand: ['/usr/bin/sudo', '/sbin/reboot']
+<% end -%>
   pollingInterval:  10
   queueBaseUrl:     https://queue.taskcluster.net/v1
   reclaimOffset:    120
   temporaryFolder:  /var/tmp/tc-worker-tmp
   serverIp:           127.0.0.1
   serverPort:         60000
   tlsCertificiate:
     $secret:  project/taskcluster/taskcluster-worker/stateless-dns
--- a/modules/toplevel/manifests/worker.pp
+++ b/modules/toplevel/manifests/worker.pp
@@ -9,18 +9,13 @@ class toplevel::worker inherits toplevel
     include puppet::atboot
     include sudoers::reboot
     include users::builder
 
     # apply tweaks
     include tweaks::dev_ptmx
     include tweaks::locale
 
-    case $::operatingsystem {
-        'Darwin': {
-            include users::builder::autologin
-        }
-
-        default: {
-            fail("worker not (yet) supported on ${::operatingsystem}")
-        }
+    # *all* Darwin and Windows workers need to autologin, not just testers
+    if ($::operatingsystem == "Darwin") or ($::operatingsystem == "Windows") {
+        include users::builder::autologin
     }
 }
--- a/modules/toplevel/manifests/worker/releng.pp
+++ b/modules/toplevel/manifests/worker/releng.pp
@@ -1,35 +1,56 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 class toplevel::worker::releng inherits toplevel::worker {
     include instance_metadata
     include clean::appstate
 
-    # packages common to all slaves
+    # packages common to all workers
     include dirs::tools
     include packages::mozilla::python27
     include packages::mozilla::tooltool
     include packages::wget
     include packages::mozilla::py27_mercurial
     # TODO: run mig agent on boot?
     include mig::agent::daemon
-    include packages::mozilla::py27_virtualenv
-    include buildslave::install
+
+    # not sure why these are required on Darwin..
+    if ($::operatingsystem == 'Darwin') {
+        include packages::mozilla::py27_virtualenv
+        include buildslave::install
+    }
 
     case $::kernel {
         'Linux': {
             # authorize aws-manager to reboot instances
             users::builder::extra_authorized_key {
                 'aws-ssh-key': ;
             }
         }
     }
 
     # ensure runner is actually disabled, in case this machine was once set up
     # to run buildbot (temporary)
-    file {
-        "/Library/LaunchAgents/com.mozilla.runner.plist":
-            ensure => absent,
+    case $::operatingsystem {
+        'Darwin': {
+            file {
+                "/Library/LaunchAgents/com.mozilla.runner.plist":
+                    ensure => absent,
+            }
+        }
+
+        'Ubuntu': {
+            service {
+                'runner':
+                    provider  => 'systemd',
+                    hasstatus => false,
+                    enable    => false;
+            }
+        }
+
+        default: {
+            fail("not (yet) supported on ${::operatingsystem}")
+        }
     }
 }
--- a/modules/toplevel/manifests/worker/releng/taskcluster_worker.pp
+++ b/modules/toplevel/manifests/worker/releng/taskcluster_worker.pp
@@ -1,14 +1,16 @@
 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 class toplevel::worker::releng::taskcluster_worker inherits toplevel::worker::releng {
 
     include ::taskcluster_worker
 
-    # ensure generic-worker is disabled, in case this machine previously ran it
-    file {
-        "/Library/LaunchAgents/net.generic.worker.plist":
-            ensure => absent,
+    if ($::operatingsystem == "Darwin") {
+        # ensure generic-worker is disabled, in case this machine previously ran it
+        file {
+            "/Library/LaunchAgents/net.generic.worker.plist":
+                ensure => absent,
+        }
     }
 }