diff --git a/README.rst b/README.rst index 1d8e3df..6539ebd 100644 --- a/README.rst +++ b/README.rst @@ -176,6 +176,16 @@ You can specify: Centos has no native ``snapd`` package at this time. + +``packages.golang`` +------------------- + +You can specify: + +* ``clean`` golang packages, removed using ``go clean -i ...``. +* ``goget`` golang packages, installed using ``go get``. + + ``packages.remote_pkgs`` ------------------------ diff --git a/kitchen.yml b/kitchen.yml index 6032baf..e6a9296 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -21,12 +21,16 @@ platforms: run_command: /lib/systemd/systemd provision_command: - apt-get update && apt-get install -y udev locales git + - echo 'export PATH=${PATH}:/usr/local/go/bin' >/etc/default/golang.sh + - export PATH="${PATH}:/usr/local/go/bin" - name: ubuntu-18.04 driver_config: image: ubuntu:18.04 run_command: /lib/systemd/systemd provision_command: - apt-get update && apt-get install -y udev locales git + - echo 'export PATH=${PATH}:/usr/local/go/bin' >/etc/default/golang.sh + - export PATH="${PATH}:/usr/local/go/bin" - name: ubuntu-16.04 driver_config: image: ubuntu:16.04 @@ -35,6 +39,8 @@ platforms: - apt-get update && apt-get install -y udev locales git - locale-gen en_US.UTF-8 - update-locale LANG=en_US.UTF-8 + - echo 'export PATH=${PATH}:/usr/local/go/bin' >/etc/default/golang.sh + - export PATH="${PATH}:/usr/local/go/bin" - name: centos-7 driver_config: image: centos:7 diff --git a/packages/archives.sls b/packages/archives.sls index e666db4..54babfd 100644 --- a/packages/archives.sls +++ b/packages/archives.sls @@ -33,7 +33,7 @@ packages-archive-wanted-target-{{ package }}-directory: {%- if packages.tmpdir != '/tmp' %} - {{ packages.tmpdir }} {%- endif %} - - user: {{ 'root' if 'user' not in archive else archive.user }} + - user: {{ packages.rootuser if 'user' not in archive else archive.user }} - mode: {{ '0755' if 'mode' not in archive else archive.mode }} - makedirs: True - require_in: @@ -85,7 +85,7 @@ packages-archive-wanted-download-{{ package }}: - name: {{ archive.dest }}/{{ archivename }} - source: {{ archive.dl.source }} - mode: {{ '0755' if archive.dl.format in ('bin',) else '0644' if 'mode' not in archive else archive.mode }} - - user: {{ 'root' if 'user' not in archive else archive.user }} + - user: {{ packages.rootuser if 'user' not in archive else archive.user }} - makedirs: True {%- if 'hashsum' in archive.dl and archive.dl.hashsum %} - source_hash: {{ archive.dl.hashsum }} diff --git a/packages/defaults.yaml b/packages/defaults.yaml index dc18809..a363cdd 100644 --- a/packages/defaults.yaml +++ b/packages/defaults.yaml @@ -2,6 +2,7 @@ # vim: ft=yaml packages: tmpdir: /tmp/saltstack-packages-formula-archives + rootuser: root remote_pkgs: {} pkgs: held: {} @@ -40,6 +41,9 @@ packages: required: states: [] pkgs: [] + golang: + goget: [] + clean: [] archives: pkgs: required: ['curl', 'bzip2', 'gzip'] diff --git a/packages/golang/clean.sls b/packages/golang/clean.sls new file mode 100644 index 0000000..b3c4bbb --- /dev/null +++ b/packages/golang/clean.sls @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import packages with context %} + + {%- for package in packages.golang.clean %} + +packages-golang-clean-{{ package }}-cmd-run: + cmd.run: + - name: go clean -i {{ package }}... + - runas: {{ packages.rootuser }} + + {%- endfor %} diff --git a/packages/golang/goget.sls b/packages/golang/goget.sls new file mode 100644 index 0000000..ee138f1 --- /dev/null +++ b/packages/golang/goget.sls @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import packages with context %} + + {%- for package in packages.golang.goget %} + +packages-golang-goget-{{ package }}-cmd-run: + cmd.run: + - name: go get {{ package }} + - runas: {{ packages.rootuser }} + + {%- endfor %} diff --git a/packages/golang/init.sls b/packages/golang/init.sls new file mode 100644 index 0000000..ba0a430 --- /dev/null +++ b/packages/golang/init.sls @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +include: + - .clean + - .goget diff --git a/packages/map.jinja b/packages/map.jinja index 401c360..c2d1a65 100644 --- a/packages/map.jinja +++ b/packages/map.jinja @@ -18,3 +18,10 @@ ), base='packages') %} + +{#- Post-processing for specific non-YAML customisations #} +{%- do packages.update({'kernel': grains.kernel | lower}) %} +{%- if grains.os == 'MacOS' %} +{%- set macos_user = salt['cmd.run']("stat -f '%Su' /dev/console") %} +{%- do packages.update({'rootuser': macos_user}) %} +{%- endif %} diff --git a/packages/npms.sls b/packages/npms.sls index c04c795..57b550f 100644 --- a/packages/npms.sls +++ b/packages/npms.sls @@ -32,8 +32,8 @@ npm_req_pkgs: npms_dir: file.directory: - name: {{ packages.npms.dir }} - - user: {{ 'root' if 'user' not in packages.npms else packages.npms.user }} - - group: {{ 'root' if 'group' not in packages.npms else packages.npms.group }} + - user: {{ packages.rootuser if 'user' not in packages.npms else packages.npms.user }} + - group: {{ packages.rootuser if 'group' not in packages.npms else packages.npms.group }} - mode: {{ '0755' if 'mode' not in packages.npms else packages.npms.mode }} - makedirs: True {% endif %} diff --git a/pillar.example b/pillar.example index e324d45..9ef9c94 100644 --- a/pillar.example +++ b/pillar.example @@ -61,6 +61,14 @@ packages: unwanted: - goodbye-world + golang: + goget: + - github.com/golang/example/hello + - github.com/golang/example/outyet + clean: + - github.com/golang/example/hello + - github.com/golang/example/outyet + npms: dir: /home/kitchen/npms # The target directory in which to install the package, or None for global installation user: kitchen # The user to run NPM with (and to assign to `dir`) diff --git a/test/integration/default/archives_spec.rb b/test/integration/default/archives_spec.rb index 0892e83..9297dbe 100644 --- a/test/integration/default/archives_spec.rb +++ b/test/integration/default/archives_spec.rb @@ -15,7 +15,7 @@ control 'Archive packages' do it { should exist } end end - describe file('/usr/local/bin/kubectl') do + describe file('/usr/local/go/bin/go') do it { should be_executable } end end diff --git a/test/integration/default/golang_spec.rb b/test/integration/default/golang_spec.rb new file mode 100644 index 0000000..17ed458 --- /dev/null +++ b/test/integration/default/golang_spec.rb @@ -0,0 +1,22 @@ +go_path = '/home/kitchen/go' + +# GO GET +control 'go get github.com/golang/example/hello' do + title 'should be installed' + desc '(only testing in the Debian platform, as these are OS-independent' + + only_if do + os.debian? + end + + describe file('/usr/local/go/bin/go') do + it { should be_executable } + end + + %w( + github.com/golang/example/hello + ).each do |f| + describe file("#{go_path}/src/#{f}") do + it { should exist } + end + end diff --git a/test/integration/default/pillar.example.ubuntu.1604 b/test/integration/default/pillar.example.ubuntu.1604 index 887b33f..bc74f2a 100644 --- a/test/integration/default/pillar.example.ubuntu.1604 +++ b/test/integration/default/pillar.example.ubuntu.1604 @@ -79,14 +79,22 @@ packages: format: raw source: https://raw.githubusercontent.com/openstack/cinder/master/contrib/block-box/docker-compose.yml hashsum: 1751f8e4f6b4cddd8c4843a0f4473274 - kubectl: - dest: /usr/local/bin + golang: + dest: /usr/local dl: - format: bin - source: https://storage.googleapis.com/kubernetes-release/release/v1.12.0/bin/darwin/amd64/kubectl + format: tar + source: https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz + hashsum: 66d83bfb5a9ede000e33c6579a91a29e6b101829ad41fffb5c5bb6c900e109d9 unwanted: - /usr/local/boring_archive_software remote_pkgs: zoom: 'https://zoom.us/client/latest/zoom_amd64.deb' + golang: + goget: + - github.com/golang/example/hello + - github.com/golang/example/outyet + clean: + - github.com/golang/example/hello + - github.com/golang/example/outyet diff --git a/test/integration/default/pillar.example.ubuntu.1804 b/test/integration/default/pillar.example.ubuntu.1804 index e7e1e03..3e5fdb9 100644 --- a/test/integration/default/pillar.example.ubuntu.1804 +++ b/test/integration/default/pillar.example.ubuntu.1804 @@ -81,14 +81,22 @@ packages: format: raw source: https://raw.githubusercontent.com/openstack/cinder/master/contrib/block-box/docker-compose.yml hashsum: 1751f8e4f6b4cddd8c4843a0f4473274 - kubectl: - dest: /usr/local/bin + golang: + dest: /usr/local dl: - format: bin - source: https://storage.googleapis.com/kubernetes-release/release/v1.12.0/bin/darwin/amd64/kubectl + format: tar + source: https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz + hashsum: 66d83bfb5a9ede000e33c6579a91a29e6b101829ad41fffb5c5bb6c900e109d9 unwanted: - /usr/local/boring_archive_software remote_pkgs: zoom: 'https://zoom.us/client/latest/zoom_amd64.deb' + golang: + goget: + - github.com/golang/example/hello + - github.com/golang/example/outyet + clean: + - github.com/golang/example/hello + - github.com/golang/example/outyet