diff --git a/ansible/inventory.yml b/ansible/inventory.yml index 84f1336f1..b011f65c9 100644 --- a/ansible/inventory.yml +++ b/ansible/inventory.yml @@ -130,6 +130,9 @@ hosts: ubuntu1604-arm64_odroid_c2-2: {ip: 70.167.220.148, user: odroid} ubuntu1604-arm64_odroid_c2-3: {ip: 70.167.220.149, user: odroid} + - macstadium: + macos10.12-x64-1: {ip: 207.254.58.162, port: 5, user: administrator} + - osuosl: aix61-ppc64_be-1: {ip: 140.211.9.101} aix61-ppc64_be-2: {ip: 140.211.9.100} diff --git a/ansible/partials/install-homebrew.sh b/ansible/partials/install-homebrew.sh new file mode 100644 index 000000000..b1964b318 --- /dev/null +++ b/ansible/partials/install-homebrew.sh @@ -0,0 +1,2 @@ +#!/bin/bash +yes | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" diff --git a/ansible/partials/install-xcode.sh b/ansible/partials/install-xcode.sh new file mode 100644 index 000000000..d50df4a75 --- /dev/null +++ b/ansible/partials/install-xcode.sh @@ -0,0 +1,8 @@ +#!/bin/bash +touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress; +PROD=$(softwareupdate -l | + grep "\*.*Command Line" | + head -n 1 | awk -F"*" '{print $2}' | + sed -e 's/^ *//' | +tr -d '\n') +softwareupdate -i "$PROD"; diff --git a/ansible/plugins/inventory/nodejs_yaml.py b/ansible/plugins/inventory/nodejs_yaml.py index 8e61bb4e9..f415a2f49 100755 --- a/ansible/plugins/inventory/nodejs_yaml.py +++ b/ansible/plugins/inventory/nodejs_yaml.py @@ -47,7 +47,7 @@ # providers - validated for consistency 'provider': ('azure', 'digitalocean', 'joyent', 'ibm', 'linuxonecc', - 'marist', 'mininodes', 'msft', 'osuosl', 'rackspace', + 'macstadium', 'marist', 'mininodes', 'msft', 'osuosl', 'rackspace', 'requireio', 'scaleway', 'softlayer', 'voxer', 'packetnet', 'nearform') } diff --git a/ansible/roles/baselayout/tasks/main.yml b/ansible/roles/baselayout/tasks/main.yml index 0d2c53349..45344ac7a 100644 --- a/ansible/roles/baselayout/tasks/main.yml +++ b/ansible/roles/baselayout/tasks/main.yml @@ -13,7 +13,7 @@ # also, some os:es complain about underscores in hostnames - name: set hostname when: not os|startswith("alpine") and not os|startswith("smartos") - and not os|startswith("zos") + and not os|startswith("zos") and not os|startswith("macos") hostname: name="{{ inventory_hostname|replace('_', '-') }}" - name: disable joyent smartconnect @@ -51,7 +51,19 @@ register: has_git - name: install packages - when: not os|startswith("zos") + when: not os|startswith("zos") and not os|startswith("macos") + package: name="{{ package }}" state=present + loop_control: + loop_var: package + with_items: + # ansible doesn't like empty lists + - "{{ packages[os]|default('[]') }}" + - "{{ packages[os|stripversion]|default('[]') }}" + - "{{ common_packages|default('[]') }}" + +- name: install packages (macos) + when: os|startswith("macos") + become_user: administrator package: name="{{ package }}" state=present loop_control: loop_var: package diff --git a/ansible/roles/baselayout/vars/main.yml b/ansible/roles/baselayout/vars/main.yml index 5cb02c877..cd6fab993 100644 --- a/ansible/roles/baselayout/vars/main.yml +++ b/ansible/roles/baselayout/vars/main.yml @@ -30,7 +30,6 @@ common_packages: [ 'automake', 'bash', 'libtool', - 'sudo', ] # you can either add os family or os to this list (see smartos) @@ -46,27 +45,32 @@ packages: { 'm4', 'make', 'procps', - 'xz' + 'xz', + 'sudo', ], centos: [ 'ccache', 'git', + 'sudo', ], centos7: [ 'gcc-c++', + 'sudo', ], debian7: [ 'gcc-4.8', 'g++-4.8', + 'sudo', ], debian8: [ 'ccache', 'git', 'libfontconfig1', + 'sudo', ], fedora: [ @@ -74,12 +78,18 @@ packages: { 'gcc-c++', 'git', 'fontconfig', + 'sudo', ], freebsd: [ 'ccache', 'git', - 'gmake' + 'gmake', + 'sudo', + ], + + macos: [ + 'python2', ], smartos14: [ @@ -88,7 +98,8 @@ packages: { 'gccmakedep', 'git', 'gmake', - 'xz' + 'xz', + 'sudo', ], smartos15: [ @@ -97,7 +108,8 @@ packages: { 'gccmakedep', 'git', 'gmake', - 'xz' + 'xz', + 'sudo', ], smartos16: [ @@ -106,7 +118,8 @@ packages: { 'gccmakedep', 'git', 'gmake', - 'xz' + 'xz', + 'sudo', ], ubuntu: [ @@ -115,11 +128,13 @@ packages: { 'gcc', 'git', 'libfontconfig1', + 'sudo', ], ubuntu1404: [ 'ntp', 'g++-4.9', 'gcc-4.9', + 'sudo', ] } diff --git a/ansible/roles/java-base/tasks/main.yml b/ansible/roles/java-base/tasks/main.yml index f10a0f27a..f48b102f2 100644 --- a/ansible/roles/java-base/tasks/main.yml +++ b/ansible/roles/java-base/tasks/main.yml @@ -29,13 +29,26 @@ # if this fails you want to check in vars/main.yml and add package name # as appropriate -- try to use generic os family if available. + +- name: Check if java is already installed + raw: java -version + register: java + ignore_errors: yes + - name: install java - when: not os|startswith("zos") + when: java.rc > 0 and not os|startswith("zos") and not os|startswith("macos") package: name="{{ java_package_name }}" state=present - name: install webupd8 oracle java 8 extras - when: os in ("ubuntu1204", "ubuntu1404") + when: java.rc > 0 and os in ("ubuntu1204", "ubuntu1404") package: name="{{item}}" state=present with_items: - ca-certificates - oracle-java8-set-default + +- name: install java (macos) + become_user: administrator + when: java.rc > 0 and os|startswith("macos") + homebrew_cask: + name: java + state: present diff --git a/ansible/roles/jenkins-worker/tasks/main.yml b/ansible/roles/jenkins-worker/tasks/main.yml index 1f3aa663c..c7b0fbec8 100644 --- a/ansible/roles/jenkins-worker/tasks/main.yml +++ b/ansible/roles/jenkins-worker/tasks/main.yml @@ -23,11 +23,11 @@ line: ::1 localhost.localdomain localhost - name: create NODE_TEST_DIR directory - file: path=/home/{{ server_user }}/tmp state=directory + file: path="{{ home }}/{{ server_user }}/tmp" state=directory - name: set NODE_TEST_DIR permission and owner file: - path: /home/{{ server_user }}/tmp + path: "{{ home }}/{{ server_user }}/tmp" owner: "{{ server_user }}" group: "{{ server_user }}" mode: 0755 @@ -53,7 +53,7 @@ mode: 0644 timeout: 60 -# temporary until we get the righ cert bundles +# temporary until we get the right cert bundles - name: download slave.jar -zos when: os|startswith("zos") get_url: @@ -97,6 +97,14 @@ dest: "{{ jenkins.dest }}" mode: "{{ jenkins.mode|default('0644') }}" +# TODO - Should this run on every machine? +- name: copy start.sh to {{ home }}/{{ server_user }}/start.sh + when: os|startswith("macos") + template: + src: "start.j2" + dest: "{{ home }}/{{ server_user }}/start.sh" + mode: "0755" + - name: import manifest to svcadm when: os|startswith("smartos") raw: "svccfg import {{ jenkins.dest }}" @@ -140,9 +148,17 @@ command: "chown -R {{ server_user }} {{ home }}/{{ server_user }}/gyp" - name: enable jenkins at startup - general - when: not os|startswith("zos") + when: not os|startswith("zos") and not os|startswith("macos") service: name=jenkins state=started enabled=yes +- name: Load org.nodejs.osx.jenkins.plist into launchctl + when: os|startswith("macos") + command: launchctl load /Library/LaunchDaemons/org.nodejs.osx.jenkins.plist + +- name: Start org.nodejs.osx.jenkins.plist + when: os|startswith("macos") + command: launchctl start org.nodejs.osx.jenkins + # lineinfile does not work on zos due to character conversions # the inserted line ends up in the wrong character set. We # tried a few variations to work around this without diff --git a/ansible/roles/jenkins-worker/tasks/partials/tap2junit/macos.yml b/ansible/roles/jenkins-worker/tasks/partials/tap2junit/macos.yml new file mode 100644 index 000000000..efce67051 --- /dev/null +++ b/ansible/roles/jenkins-worker/tasks/partials/tap2junit/macos.yml @@ -0,0 +1,10 @@ +--- + +# +# macos: python2.7 +# + +- name: install pip + pip: + name: tap2junit + executable: /usr/local/bin/pip2 diff --git a/ansible/roles/jenkins-worker/templates/org.nodejs.osx.jenkins.plist b/ansible/roles/jenkins-worker/templates/org.nodejs.osx.jenkins.plist new file mode 100644 index 000000000..7b3c2c72f --- /dev/null +++ b/ansible/roles/jenkins-worker/templates/org.nodejs.osx.jenkins.plist @@ -0,0 +1,29 @@ + + + + + Label + org.nodejs.osx.jenkins + + UserName + iojs + + WorkingDirectory + /Users/iojs + + Program + /Users/iojs/start.sh + + RunAtLoad + + + KeepAlive + + + StandardErrorPath + /Users/iojs/jenkins_err.log + + StandardOutPath + /Users/iojs/jenkins.log + + diff --git a/ansible/roles/jenkins-worker/templates/start.j2 b/ansible/roles/jenkins-worker/templates/start.j2 index 79374f7fb..6bd468e95 100644 --- a/ansible/roles/jenkins-worker/templates/start.j2 +++ b/ansible/roles/jenkins-worker/templates/start.j2 @@ -1,26 +1,11 @@ -#!/NODEJS2/bin/bash - -su -s - iojs <<'EOF' - -export PATH=/NODEJS/bin:$PATH +#!/bin/bash export HOME={{ home }}/{{ server_user }} -export NODE_COMMON_PIPE="$HOME/test.pipe" export NODE_TEST_DIR="$HOME/tmp" -export JOBS="{{ server_jobs | default(ansible_processor_vcpus) }}" -export OSTYPE=zos - -export _BPXK_AUTOCVT=ON -export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)" -export _TAG_REDIR_ERR=txt -export _TAG_REDIR_IN=txt -export _TAG_REDIR_OUT=txt - -export CC=/bin/xlc -export LINK=/bin/xlc -export CFLAGS="-q64" -export LDFLAGS="-q64" - -{{ java_path[os] }} -Dfile.encoding=ISO8859_1 -Xmx{{ server_ram|default('128m') }} \ - -jar {{ home }}/{{ server_user }}/slave.jar -secret {{ secret }} \ - -jnlpUrl {{ jenkins_url }}/computer/{{ inventory_hostname }}/slave-agent.jnlp >{{ home }}/{{ server_user }}/jenkins.log 2>&1 & -EOF +export JOBS=2 +export NODE_COMMON_PIPE=/Users/iojs/test.pipe +export OSTYPE=osx +export ARCH=x64 +export DESTCPU=x64 + +java -jar {{ home }}/{{ server_user }}/slave.jar -secret {{ secret }} \ + -jnlpUrl {{ jenkins_url }}/computer/{{ inventory_hostname }}/slave-agent.jnlp diff --git a/ansible/roles/jenkins-worker/templates/zos_start.j2 b/ansible/roles/jenkins-worker/templates/zos_start.j2 new file mode 100644 index 000000000..79374f7fb --- /dev/null +++ b/ansible/roles/jenkins-worker/templates/zos_start.j2 @@ -0,0 +1,26 @@ +#!/NODEJS2/bin/bash + +su -s - iojs <<'EOF' + +export PATH=/NODEJS/bin:$PATH +export HOME={{ home }}/{{ server_user }} +export NODE_COMMON_PIPE="$HOME/test.pipe" +export NODE_TEST_DIR="$HOME/tmp" +export JOBS="{{ server_jobs | default(ansible_processor_vcpus) }}" +export OSTYPE=zos + +export _BPXK_AUTOCVT=ON +export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG) POSIX(ON)" +export _TAG_REDIR_ERR=txt +export _TAG_REDIR_IN=txt +export _TAG_REDIR_OUT=txt + +export CC=/bin/xlc +export LINK=/bin/xlc +export CFLAGS="-q64" +export LDFLAGS="-q64" + +{{ java_path[os] }} -Dfile.encoding=ISO8859_1 -Xmx{{ server_ram|default('128m') }} \ + -jar {{ home }}/{{ server_user }}/slave.jar -secret {{ secret }} \ + -jnlpUrl {{ jenkins_url }}/computer/{{ inventory_hostname }}/slave-agent.jnlp >{{ home }}/{{ server_user }}/jenkins.log 2>&1 & +EOF diff --git a/ansible/roles/jenkins-worker/vars/main.yml b/ansible/roles/jenkins-worker/vars/main.yml index 1d8200281..fa3869657 100644 --- a/ansible/roles/jenkins-worker/vars/main.yml +++ b/ansible/roles/jenkins-worker/vars/main.yml @@ -8,12 +8,13 @@ init: { centos: ['centos5', 'centos6','centos7'], debian: ['debian7', 'ubuntu1204'], freebsd: 'freebsd', + macos: 'macos', openrc: 'alpine', systemd: ['centos7', 'debian8', 'fedora', 'ubuntu1604', 'ubuntu1610'], svc: 'smartos', upstart: ['ubuntu12', 'ubuntu1404'], - start: 'zos' + zos_start: 'zos' } jenkins_init: { @@ -32,6 +33,11 @@ jenkins_init: { src: 'freebsd.initd.j2', mode: '0755' }, + macos: { + dest: '/Library/LaunchDaemons/org.nodejs.osx.jenkins.plist', + src: 'org.nodejs.osx.jenkins.plist', + mode: '0755' + }, openrc: { dest: '/etc/init.d/jenkins', src: 'openrc.initd.j2', @@ -49,9 +55,9 @@ jenkins_init: { dest: '/etc/init/jenkins.conf', src: 'upstart.j2' }, - start: { + zos_start: { dest: '{{ home }}/{{ server_user }}/start.sh', - src: 'start.j2' + src: 'zos_start.j2' }, } diff --git a/ansible/roles/package-upgrade/tasks/partials/brew.yml b/ansible/roles/package-upgrade/tasks/partials/brew.yml new file mode 100644 index 000000000..55f320397 --- /dev/null +++ b/ansible/roles/package-upgrade/tasks/partials/brew.yml @@ -0,0 +1,38 @@ +--- + +# +# Updates all packages for macos-based distributions +# + + - name: Check for xcode-tools + raw: xcode-select -p &> /dev/null + register: xcode + ignore_errors: yes + + - name: Install xcode-tools + script: ../../partials/install-xcode.sh + when: xcode.rc > 1 + + - name: Check if Homebrew is already installed + stat: + path: /usr/local/bin/brew + register: brew + + - name: Install Homebrew + become_user: administrator + script: ../../partials/install-homebrew.sh + when: not brew.stat.exists + + - name: Upgrade installed packages + become_user: administrator + homebrew: + upgrade_all: yes + + - name: Install brew cu + become_user: administrator + homebrew_tap: + name: buo/cask-upgrade + + - name: Update Casks + become_user: administrator + command: /usr/local/bin/brew cu diff --git a/ansible/roles/package-upgrade/vars/main.yml b/ansible/roles/package-upgrade/vars/main.yml index e7cacb118..a5da8ee6e 100644 --- a/ansible/roles/package-upgrade/vars/main.yml +++ b/ansible/roles/package-upgrade/vars/main.yml @@ -11,6 +11,7 @@ 'dnf': 'fedora', 'pkg': 'freebsd', 'pkgin': 'smartos', + 'brew': 'macos' } # see plugins/filter/filters.py -- second arg is just feedback