Skip to content

Commit

Permalink
feat(develop): krew & skaffold support
Browse files Browse the repository at this point in the history
  • Loading branch information
noelmcloughlin committed Jul 10, 2020
1 parent 7ba5e77 commit 1922196
Show file tree
Hide file tree
Showing 30 changed files with 388 additions and 104 deletions.
12 changes: 12 additions & 0 deletions docs/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Formula to manage kubernetes on MacOS and GNU/Linux. Currently supports:
* `minikube` (https://github.com/kubernetes/minikube)
* `octant` (https://github.com/vmware-tanzu/octant)
* `operators` (https://operatorhub.io)
* `skaffold` (https://skaffold.dev)
* `devtools` (kubectx, kubens, cue, attr2rbac, dive, stern, etc)
* `devlibs` (kubernetes clients)

Expand Down Expand Up @@ -249,6 +250,17 @@ This state installs selected kubernetes developer libraries

This state uninstalls selected kubernetes developer libraries (i.e. kubernetes client libraries, kopf, etc).

``kubernetes.skaffold``
^^^^^^^^^^^^^^^^^^^^^^^

This state installs kind only (https://github.com/GoogleContainerTools/skaffold)

``kubernetes.skaffold.clean``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This state uninstalls skaffold only.



Main Sub-states
---------------
Expand Down
2 changes: 1 addition & 1 deletion kitchen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ suites:
'*':
- kubernetes
pillars_from_files:
kubernetes.sls: test/salt/pillar/redhat.sls
kubernetes.sls: test/salt/pillar/default.sls
verifier:
inspec_tests:
- path: test/integration/redhat
2 changes: 2 additions & 0 deletions kubernetes/clean.sls
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,15 @@
# vim: ft=sls

include:
- .skaffold.clean
- .octant.clean
- .minikube.clean
- .linkerd2.clean
- .kubebuilder.clean
- .kudo.clean
- .k3s.clean
- .kind.clean
- .krew.clean
- .istio.clean
- .devspace.clean
- .node.clean
Expand Down
2 changes: 1 addition & 1 deletion kubernetes/client/aliases/clean.sls
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{{ formula }}-client-aliases-aliases-clean:
{{ formula }}-client-aliases-clean:
file.absent:
- names:
- {{ d.client.aliases_file }}
20 changes: 9 additions & 11 deletions kubernetes/client/aliases/install.sls
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,27 @@
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{%- if 'environ' in d.server and d.server.environ %}
{%- set sls_archive_install = tplroot ~ '.server.archive.install' %}
{%- set sls_package_install = tplroot ~ '.server.package.install' %}
{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %}
{%- set sls_archive_install = tplroot ~ '.client.archive.install' %}
{%- set sls_binary_install = tplroot ~ '.client.binary.install' %}
{%- set sls_package_install = tplroot ~ '.client.package.install' %}
{%- from tplroot ~ "/libtofs.jinja" import files_switch with context %}
include:
- {{ sls_archive_install if d.server.pkg.use_upstream_archive else sls_package_install }}
- {{ sls_archive_install if d.client.pkg.use_upstream_archive else sls_binary_install if d.client.pkg.use_upstream_binary else sls_package_install }} # noqa 204
{{ formula }}-server-config-file-managed-environ_file:
{{ formula }}-client-aliases-file-managed-environ_file:
file.managed:
- name: {{ d.server.environ_file }}
- name: {{ d.client.environ_file }}
- source: {{ files_switch(['aliases.sh.jinja'],
lookup='k8s-server-config-file-managed-environ_file'
lookup='k8s-client-aliases-file-managed-environ_file'
)
}}
- mode: '0640'
- user: {{ d.identity.rootuser }}
- group: {{ d.identity.rootgroup }}
- makedirs: True
- template: jinja
- context:
environ: {{ d.server.environ|json }}
- require:
- sls: {{ sls_archive_install if d.server.pkg.use_upstream_archive else sls_package_install }}
- sls: {{ sls_archive_install if d.client.pkg.use_upstream_archive else sls_binary_install if d.client.pkg.use_upstream_binary else sls_package_install }} # noqa 204
{%- endif %}
31 changes: 28 additions & 3 deletions kubernetes/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ kubernetes:
- octant
- k3s
- kind
- krew
- kudo
- minikube
- operators
- devlibs
- devtools
- skaffold

identity:
rootuser: root
Expand Down Expand Up @@ -263,8 +265,6 @@ kubernetes:
version: 1.18.0
config_file: /etc/default/kubernetes-node.ini
config: {}
environ_file: /etc/default/kubernetes-node.sh
environ: []
service: {}
pkg:
name: kubernetes-node
Expand Down Expand Up @@ -392,6 +392,16 @@ kubernetes:
name: kind
source: null # set in map.jinja
source_hash: '781c3db479b805d161b7c2c7a31896d1a504b583ebfcce8fcd49538c684d96bc'
skaffold:
version: 1.12.0
pkg:
use_upstream_binary: true
use_upstream_repo: false
binary:
uri: 'https://storage.googleapis.com/skaffold/releases'
name: skaffold
source: null # set in map.jinja
source_hash: null # set in map.jinja
istio:
version: 1.6.5
pkg:
Expand Down Expand Up @@ -425,7 +435,22 @@ kubernetes:
trim_output: true
enforce_toplevel: false
options: '--strip-components=1'

krew:
version: '0.3.4'
pkg:
name: krew
use_upstream_archive: true
suffix: tar.gz
commands:
- krew
archive:
name: null # set in map.jinja
uri: 'https://github.com/kubernetes-sigs/krew/releases/download'
source: null # set in map.jinja
source_hash: null # set in map.jinja
trim_output: true
enforce_toplevel: false
options: '--strip-components=1'
kubebuilder:
version: 2.3.1
pkg:
Expand Down
2 changes: 2 additions & 0 deletions kubernetes/init.sls
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ include:
- .devspace
- .istio
- .kind
- .krew
- .k3s
- .kudo
- .kubebuilder
- .linkerd2
- .minikube
- .octant
- .operators
- .skaffold
- .devtools
- .devlibs
25 changes: 25 additions & 0 deletions kubernetes/krew/archive/alternatives/clean.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{%- if grains.kernel|lower == 'linux' and grains.os_family not in ('Arch',) %}
{%- if d.krew.pkg.use_upstream_archive and d.linux.altpriority|int > 0 %}
include:
- {{ sls_archive_clean }}
{{ formula }}-krew-archive-alternatives-remove:
alternatives.remove:
- name: link-k8s-krew
- path: {{ d.krew.pkg.archive.name }}/bin/krew
- onlyif: update-alternatives --get-selections |grep ^link-k8s-krew
- require:
- sls: {{ sls_archive_clean }}
- unless:
- {{ grains.os_family in ('Arch',) }}
{%- endif %}
{%- endif %}
5 changes: 5 additions & 0 deletions kubernetes/krew/archive/alternatives/init.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

include:
- .install
41 changes: 41 additions & 0 deletions kubernetes/krew/archive/alternatives/install.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{%- if grains.kernel|lower == 'linux' and grains.os_family not in ('Arch',) %}
{%- if d.krew.pkg.use_upstream_archive and d.linux.altpriority|int > 0 %}
include:
- {{ sls_archive_install }}
{{ formula }}-krew-archive-alternatives-install:
alternatives.install:
- unless:
- {{ grains.os_family in ('Suse', 'Arch') }}
- name: link-k8s-krew
- link: /usr/local/bin/krew
- path: {{ d.krew.pkg.archive.name }}/bin/krew
- priority: {{ d.linux.altpriority }}
- order: 10
- require:
- sls: {{ sls_archive_install }}
cmd.run:
- onlyif: {{ grains.os_family in ('Suse',) }}
- name: update-alternatives --install /usr/local/bin/krew link-k8s-krew {{ d.krew.pkg.archive.name }}/bin/krew {{ d.linux.altpriority }} # noqa 204
{{ formula }}-krew-archive-alternatives-set:
alternatives.set:
- unless:
# {{ grains.os in ('Debian',) }}
- {{ grains.os_family in ('Suse', 'Arch') }}
- name: link-k8s-krew
- path: {{ d.krew.pkg.archive.name }}/bin/krew
- require:
- alternatives: {{ formula }}-krew-archive-alternatives-install
- sls: {{ sls_archive_install }}
{%- endif %}
{%- endif %}
21 changes: 21 additions & 0 deletions kubernetes/krew/archive/clean.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{%- set sls_alternatives_clean = tplroot ~ '.krew.archive.alternatives.clean' %}
include:
- {{ sls_alternatives_clean }}
{{ formula }}-krew-archive-absent:
file.absent:
- names:
- {{ d.dir.tmp }}/krew*
- {{ d.krew.pkg.archive.name }}/bin
{%- if d.linux.altpriority|int == 0 or grains.os_family in ('Arch', 'MacOS') %}
{%- for cmd in d.krew.pkg.commands %}
- /usr/local/bin/{{ cmd }}
{%- endfor %}
{%- endif %}
6 changes: 6 additions & 0 deletions kubernetes/krew/archive/init.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#.-*- coding: utf-8 -*-
# vim: ft=sls

include:
- .install
- .alternatives
56 changes: 56 additions & 0 deletions kubernetes/krew/archive/install.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{%- if grains.kernel|lower in ('linux', 'darwin') %}

{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{%- from tplroot ~ "/files/macros.jinja" import format_kwargs with context %}
{{ formula }}-krew-archive-install:
file.directory:
- name: {{ d.krew.pkg.archive.name }}
- user: {{ d.identity.rootuser }}
- group: {{ d.identity.rootgroup }}
- mode: 755
- makedirs: True
- clean: True
- require_in:
- archive: {{ formula }}-krew-archive-install
- recurse:
- user
- group
- mode
archive.extracted:
{{- format_kwargs(d.krew.pkg.archive) }}
- retry: {{ d.retry_option|json }}
- user: {{ d.identity.rootuser }}
- group: {{ d.identity.rootgroup }}
- recurse:
- user
- group
- require:
- file: {{ formula }}-krew-archive-install
{%- if d.linux.altpriority|int == 0 or grains.os_family in ('Arch', 'MacOS') %}
{%- for cmd in d.krew.pkg.commands %}
{{ formula }}-archive-install-symlink-{{ cmd }}:
file.symlink:
- name: /usr/local/bin/{{ cmd }}
- target: {{ d.krew.pkg.archive.name }}/bin/{{ cmd }}
- force: True
- require:
- archive: {{ formula }}-krew-archive-install
{%- endfor %}
{%- endif %}
{%- else %}
{{ formula }}-krew-archive-install-other:
test.show_notification:
- text: |
The krew archive is unavailable for {{ salt['grains.get']('finger', grains.os_family) }}
{%- endif %}
5 changes: 5 additions & 0 deletions kubernetes/krew/clean.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

include:
- .archive.clean
5 changes: 5 additions & 0 deletions kubernetes/krew/init.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

include:
- .archive
9 changes: 7 additions & 2 deletions kubernetes/map.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
{%- set url = '%s/v%s/%s_%s_%s_%s.%s'|format(d[comp]['pkg']['archive']['uri'], d[comp]['version'],
comp, d[comp]['version'], grains.kernel|lower, d.arch, d[comp]['pkg']['suffix']) %}

{%- elif comp in ('krew',) %}
https://github.com/kubernetes-sigs/krew/releases/download/v0.3.4/krew.tar.gz
{%- set url = '%s/v%s/%s.%s'|format(d[comp]['pkg']['archive']['uri'], d[comp]['version'], comp,
d[comp]['pkg']['suffix']) %}

{%- elif comp in ('istio',) %}
{%- set kernel = 'osx' if grains.kernel == 'Darwin' else grains.kernel %}
{%- set kernel = 'win' if kernel == 'Windows' else kernel %}
Expand All @@ -68,7 +73,8 @@
{%- if comp in ('client', 'server', 'node') %}
{%- set url = '%s/v%s/bin/%s/%s'|format(d[comp]['pkg']['binary']['uri'], d[comp]['version'],
grains.kernel|lower, d.arch) %}
{%- elif comp in ('minikube', 'devspace', 'kind') %}

{%- elif comp in ('minikube', 'devspace', 'kind', 'skaffold') %}
{%- set url = '%s/v%s/%s-%s-%s'|format(d[comp]['pkg']['binary']['uri'], d[comp]['version'],
comp, grains.kernel|lower, d.arch) %}
{%- elif comp in ('linkerd2',) %}
Expand All @@ -88,7 +94,6 @@
{%- if not ('source_hash' in d[comp]['pkg']['binary'] or d[comp]['pkg']['binary']['source_hash']) %}
{%- do d[comp]['pkg']['binary'].update({'source_hash': url ~ '.sha256'}) %}
{%- endif %}

{%- do d[comp]['pkg']['binary'].update({ 'name': d.dir.binary + '/' + dirname, 'source': url }) %}
{%- endif %}

Expand Down
2 changes: 2 additions & 0 deletions kubernetes/osfamilymap.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -237,3 +237,5 @@ MacOS:
audit2rbac:
archive:
source_hash: 'e89d9e7e6e68d7fdf135ab0912f57afda0fea07931ac443a367d35671f83d1b1'
skaffold:
use_upstream_package: false # homebrew
12 changes: 12 additions & 0 deletions kubernetes/skaffold/binary/clean.sls
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
# vim: ft=sls

{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ "/map.jinja" import data as d with context %}
{%- set formula = d.formula %}
{{ formula }}-skaffold-binary-clean:
file.absent:
- names:
- /usr/local/bin/skaffold
- {{ d.skaffold.pkg.binary.name }}/bin/skaffold
Loading

0 comments on commit 1922196

Please sign in to comment.