From 94027f7332093764553162d9e80074029647f7ef Mon Sep 17 00:00:00 2001 From: N Date: Wed, 22 Jan 2020 15:55:42 +0000 Subject: [PATCH] feat(macos): basic launchctl service support --- salt/defaults.yaml | 2 ++ salt/master.sls | 21 +++++++++++++++++++ salt/minion.sls | 51 +++++++++++++++++++++++++++++++++++----------- salt/osmap.yaml | 4 ++++ 4 files changed, 66 insertions(+), 12 deletions(-) diff --git a/salt/defaults.yaml b/salt/defaults.yaml index e2a8dbf..4c42944 100644 --- a/salt/defaults.yaml +++ b/salt/defaults.yaml @@ -24,6 +24,8 @@ salt: salt_master: salt-master salt_minion: salt-minion + salt_master_macos_plist_hash: '' + salt_minion_macos_plist_hash: '' salt_syndic: salt-syndic salt_cloud: salt-cloud salt_api: salt-api diff --git a/salt/master.sls b/salt/master.sls index 4a23cca..2003be3 100644 --- a/salt/master.sls +++ b/salt/master.sls @@ -2,6 +2,27 @@ {%- from tplroot ~ "/map.jinja" import salt_settings with context %} {%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} + {%- if grains.os == 'MacOS' %} +salt-master-macos: + file.managed: + - name: /Library/LaunchDaemons/com.saltstack.salt.master.plist + - source: https://raw.githubusercontent.com/saltstack/salt/master/pkg/darwin/com.saltstack.salt.master.plist + - source_hash: {{ salt_settings.salt_master_macos_plist_hash }} + - retry: + attempts: 2 + until: True + interval: 10 + splay: 10 + cmd.run: + - names: + - launchctl load -w /Library/LaunchDaemons/com.saltstack.salt.master.plist + - launchctl unload /Library/LaunchDaemons/com.saltstack.salt.master.plist + - require: + - file: salt-master-macos + - require_in: + - service: salt-master + {%- endif %} + salt-master: {% if salt_settings.install_packages %} pkg.installed: diff --git a/salt/minion.sls b/salt/minion.sls index e492a49..01cbe42 100644 --- a/salt/minion.sls +++ b/salt/minion.sls @@ -2,33 +2,60 @@ {%- from tplroot ~ "/map.jinja" import salt_settings with context %} {%- from tplroot ~ "/libtofs.jinja" import files_switch with context %} -{% if salt_settings.install_packages and grains.os == 'MacOS' %} + {%- if grains.os == 'MacOS' %} + {% if salt_settings.install_packages %} download-salt-minion: - {% if salt_settings.salt_minion_pkg_source %} - {# only download IF we know where to get the pkg from and what version to check the current install (if installed) against #} - {# e.g. don't download unless it appears as though we're about to try and upgrade the minion #} + {% if salt_settings.salt_minion_pkg_source %} + {# only IF we know source and version to check the current install (if installed) against #} + {# e.g. don't download unless a minion upgrade is happening #} file.managed: - name: '/tmp/salt.pkg' - source: {{ salt_settings.salt_minion_pkg_source }} - {%- if salt_settings.salt_minion_pkg_hash %} + {%- if salt_settings.salt_minion_pkg_hash %} - source_hash: {{ salt_settings.salt_minion_pkg_hash }} - {% else %} + {% else %} - skip_verify: True - {% endif %} + {% endif %} - user: root - group: wheel - - mode: 0644 + - mode: '0644' - unless: - test -n "{{ salt_settings.version }}" && '/opt/salt/bin/salt-minion --version=.*{{ salt_settings.version }}.*' - require_in: - macpackage: salt-minion - {%- elif "workaround https://github.com/saltstack/salt/issues/49348" %} + - retry: + attempts: 2 + until: True + interval: 10 + splay: 10 + {%- elif "workaround https://github.com/saltstack/salt/issues/49348" %} cmd.run: - name: /usr/local/bin/brew install {{ salt_settings.salt_minion }} - onlyif: test -x /usr/local/bin/brew - runas: {{ salt_settings.rootuser }} - {%- endif %} -{% endif %} + {%- endif %} + +salt-minion-macos: + file.managed: + - onlyif: {{ grains.os == 'MacOS' }} + - name: /Library/LaunchDaemons/com.saltstack.salt.minion.plist + - source: https://raw.githubusercontent.com/saltstack/salt/master/pkg/darwin/com.saltstack.salt.minion.plist + - source_hash: {{ salt_settings.salt_minion_macos_plist_hash }} + - retry: + attempts: 2 + until: True + interval: 10 + splay: 10 + cmd.run: + - names: + - launchctl load -w /Library/LaunchDaemons/com.saltstack.salt.minion.plist + - launchctl unload /Library/LaunchDaemons/com.saltstack.salt.minion.plist + - require: + - file: salt-minion-macos + - require_in: + - service: salt-minion + {%- endif %} +{%- endif %} salt-minion: {% if salt_settings.install_packages %} @@ -36,7 +63,7 @@ salt-minion: macpackage.installed: - name: '/tmp/salt.pkg' - target: / - {# macpackage.installed behaves weirdly with version_check; version_check detects difference but fails to actually complete install. #} + {# macpackage.installed behaves weirdly with version_check, detects diff but fails to complete install. #} {# use force == True as workaround #} - force: True - unless: diff --git a/salt/osmap.yaml b/salt/osmap.yaml index 55d16b3..6bc77ec 100644 --- a/salt/osmap.yaml +++ b/salt/osmap.yaml @@ -57,3 +57,7 @@ SmartOS: config_path: /opt/local/etc/salt master: gitfs_provider: dulwich + +MacOS: + salt_master_macos_plist_hash: 9c55cb448269f4d7c433429448d1ec7dda260f180bbcf5197bc430f7645017de + salt_minion_macos_plist_hash: 6383d2d336b06802bfdf25a4c21ee25c85ee9fa57d3ef5776321d9c8cd096395