salt/pkg/windows/nsis/installer/Salt-Minion-Setup.nsi

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

1901 lines
70 KiB
NSIS
Raw Normal View History

2016-08-23 22:37:17 +00:00
!define PRODUCT_NAME "Salt Minion"
!define PRODUCT_PUBLISHER "SaltStack, Inc"
2022-10-19 17:07:48 -06:00
!define PRODUCT_WEB_SITE "http://saltproject.io"
2016-08-08 23:23:04 +00:00
!define PRODUCT_CALL_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\salt-call.exe"
!define PRODUCT_CP_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\salt-cp.exe"
!define PRODUCT_KEY_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\salt-key.exe"
!define PRODUCT_MASTER_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\salt-master.exe"
!define PRODUCT_MINION_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\salt-minion.exe"
!define PRODUCT_RUN_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\salt-run.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
Merge 3003.3 into master (#60924) * Merge 3002.6 bugfix changes (#59822) * Pass `CI_RUN` as an environment variable to the test run. This allows us to know if we're running the test suite under a CI environment or not and adapt/adjust if needed * Migrate `unit.setup` to PyTest * Backport ae36b15 just for test_install.py * Only skip tests on CI runs * Always store git sha in _version.py during installation * Fix PEP440 compliance. The wheel metadata version 1.2 states that the package version MUST be PEP440 compliant. This means that instead of `3002.2-511-g033c53eccb`, the salt version string should look like `3002.2+511.g033c53eccb`, a post release of `3002.2` ahead by 511 commits with the git sha `033c53eccb` * Fix and migrate `tests/unit/test_version.py` to PyTest * Skip test if `easy_install` is not available * We also need to be PEP440 compliant when there's no git history * Allow extra_filerefs as sanitized kwargs for SSH client * Fix regression on cmd.run when passing tuples as cmd Co-authored-by: Alexander Graul <agraul@suse.com> * Add unit tests to ensure cmd.run accepts tuples * Add unit test to check for extra_filerefs on SSH opts * Add changelog file * Fix comment for test case * Fix unit test to avoid failing on Windows * Skip failing test on windows * Fix test to work on Windows * Add all ssh kwargs to sanitize_kwargs method * Run pre-commit * Fix pylint * Fix cmdmod loglevel and module_names tests * Fix pre-commit * Skip ssh tests if binary does not exist * Use setup_loader for cmdmod test * Prevent argument injection in restartcheck * Add changelog for restartcheck fix * docs_3002.6 * Add back tests removed in merge Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> * Remove glance state module in favor of glance_image * update wording in changelog * bump deprecation warning to Silicon. * Updating warnutil version to Phosphorous. * Update salt/modules/keystone.py Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Check $HOMEBREW_PREFIX when linking against libcrypto When loading `libcrypto`, Salt checks for a Homebrew installation of `openssl` at Homebrew's default prefix of `/usr/local`. However, on Apple Silicon Macs, Homebrew's default installation prefix is `/opt/homebrew`. On all platforms, the prefix is configurable. If Salt doesn't find one of those `libcrypto`s, it will fall back on the un-versioned `/usr/lib/libcrypto.dylib`, which will cause the following crash: Application Specific Information: /usr/lib/libcrypto.dylib abort() called Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. This commit checks $HOMEBREW_PREFIX instead of hard-coding `/usr/local`. * Add test case * Add changelog for 59808 * Add changelog entry * Make _find_libcrypto fail on Big Sur if it can't find a library Right now, if `_find_libcrypto` can't find any externally-managed versions of libcrypto, it will fall back on the pre-Catalina un-versioned system libcrypto. This does not exist on Big Sur and it would be better to raise an exception here rather than crashing later when trying to open it. * Update _find_libcrypto tests This commit simplifies the unit tests for _find_libcrypto by mocking out the host's filesystem and testing the common libcrypto installations (brew, ports, etc.) on Big Sur. It simplifies the tests for falling back on system versions of libcrypto on previous versions of macOS. * Fix description of test_find_libcrypto_with_system_before_catalina * Patch sys.platform for test_rsax931 tests * modules/match: add missing "minion_id" in Pillar example The documented Pillar example for `match.filter_by` lacks the `minion_id` parameter. Without it, the assignment won't work as expected. - fix documentation - add tests: - to prove the misbehavior of the documented example - to prove the proper behaviour when supplying `minion_id` - to ensure some misbehaviour observed with compound matchers doesn't occur * Fix for issue #59773 - When instantiating the loader grab values of grains and pillars if they are NamedLoaderContext instances. - The loader uses a copy of opts. - Impliment deepcopy on NamedLoaderContext instances. * Add changelog for #59773 * _get_initial_pillar function returns pillar * Fix linter issues * Clean up test * Bump deprecation release for neutron * Uncomment Sulfur release name * Removing the _ext_nodes deprecation warning and alias. * Adding changelog. * Renaming changelog file. * Update 59804.removed * Initial pass at fips_mode config option * Fix pre-commit * Fix tests and add changelog * update docs 3003 * update docs 3003 - newline * Fix warts in changelog * update releasenotes 3003 * add ubuntu-2004-amd64 m2crypto pycryptodome and tcp tests * add distro_arch * changing the cloud platforms file missed in 1a9b7be0e2f300d87924731dc5816fd1000cd22b * Update __utils__ calls to import utils in azure * Add changelog for 59744 * Fix azure unit tests and move to pytest * Use contextvars from site-packages for thin If a contextvars package exists one of the site-packages locations use it for the generated thin tarball. This overrides python's builtin contextvars and allows salt-ssh to work with python <=3.6 even when the master's python is >3.6 (Fixes #59942) * Add regression test for #59942 * Add changelog for #59942 * Update filemap to include test_py_versions * Fix broken thin tests * Always install the `contextvars` backport, even on Py3.7+ Without this change, salt-ssh cannot target systems with Python <= 3.6 * Use salt-factories to handle the container. Don't override default roster * Fix thin tests on windows * No need to use warn log level here * Fix getsitepackages for old virtualenv versions * Add explicit pyobjc reqs * Add back the passthrough stuff * Remove a line so pre-commit will run * Bugfix release docs * Bugfix release docs * Removing pip-compile log files * Bump requirements to address a few security issues * Address traceback on macOS ``` Traceback (most recent call last): File "setup.py", line 1448, in <module> setup(distclass=SaltDistribution) File "/Users/jenkins/setup-tests/.venv/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup return distutils.core.setup(**attrs) File "/opt/salt/lib/python3.7/distutils/core.py", line 108, in setup _setup_distribution = dist = klass(attrs) File "setup.py", line 1068, in __init__ self.update_metadata() File "setup.py", line 1074, in update_metadata attrvalue = getattr(self, attrname, None) File "setup.py", line 1182, in _property_install_requires install_requires += _parse_requirements_file(reqfile) File "setup.py", line 270, in _parse_requirements_file platform.python_version(), _parse_op(op), _parse_ver(ver) File "setup.py", line 247, in _check_ver return getattr(operator, "__{}__".format(op))(pyver, wanted) File "/opt/salt/lib/python3.7/distutils/version.py", line 46, in __eq__ c = self._cmp(other) File "/opt/salt/lib/python3.7/distutils/version.py", line 337, in _cmp if self.version < other.version: TypeError: '<' not supported between instances of 'str' and 'int' ``` * Replace `saltstack.com` with `saltproject.io` on URLs being tested * Add back support to load old entrypoints by iterating instead of type checking Fixes #59961 * Fix issue #59975 * Fix pillar serialization for jinja #60083 * Fix test * Add changelog for #60083 * Update changelog and release for 3003.1 * Remove the changelog source refs * Add connect to IPCMessageSubscriber's async_methods Fixes #60049 by making sure an IPCMessageSubscriber that is wrapped by SyncWrapper has a connect method that runs the coroutine rather than returns a fugure. * Add changelog for #60049 * Update 60049.fixed * Fix coroutine spelling error Co-authored-by: Wayne Werner <waynejwerner@gmail.com> * IPC on windows cannot use socket paths Fixes #60298 * Update Jinja2 and lxml due to security related bugfix releases Jinja2 ------ CVE-2020-28493 moderate severity Vulnerable versions: < 2.11.3 Patched version: 2.11.3 This affects the package jinja2 from 0.0.0 and before 2.11.3. The ReDOS vulnerability of the regex is mainly due to the sub-pattern [a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+ This issue can be mitigated by Markdown to format user content instead of the urlize filter, or by implementing request timeouts and limiting process memory. lxml ---- CVE-2021-28957 moderate severity Vulnerable versions: < 4.6.3 Patched version: 4.6.3 An XSS vulnerability was discovered in the python lxml clean module versions before 4.6.3. When disabling the safe_attrs_only and forms arguments, the Cleaner class does not remove the formaction attribute allowing for JS to bypass the sanitizer. A remote attacker could exploit this flaw to run arbitrary JS code on users who interact with incorrectly sanitized HTML. This issue is patched in lxml 4.6.3. * fix github actions jobs on branch until bullseye comes out * Upgrade to `six==1.16.0` to avoid problems on CI runs ``` 13:59:02 nox > Session invoke-pre-commit was successful. 13:59:02 nox > Running session invoke-pre-commit 13:59:02 nox > pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt 13:59:02 Collecting blessings==1.7 13:59:02 Using cached blessings-1.7-py3-none-any.whl (18 kB) 13:59:02 Collecting invoke==1.4.1 13:59:02 Using cached invoke-1.4.1-py3-none-any.whl (210 kB) 13:59:02 Collecting pyyaml==5.3.1 13:59:02 Using cached PyYAML-5.3.1.tar.gz (269 kB) 13:59:02 Collecting six==1.15.0 13:59:02 Using cached six-1.15.0-py2.py3-none-any.whl (10 kB) 13:59:02 Building wheels for collected packages: pyyaml 13:59:02 Building wheel for pyyaml (setup.py) ... - \ | / - \ | done 13:59:02 Created wheel for pyyaml: filename=PyYAML-5.3.1-cp37-cp37m-linux_x86_64.whl size=546391 sha256=e42e1d66cc32087f4d33ceb81268c86b59f1a97029b19459f91b8d6ad1430167 13:59:02 Stored in directory: /var/jenkins/.cache/pip/wheels/5e/03/1e/e1e954795d6f35dfc7b637fe2277bff021303bd9570ecea653 13:59:02 Successfully built pyyaml 13:59:02 Installing collected packages: six, pyyaml, invoke, blessings 13:59:02 Attempting uninstall: six 13:59:02 Found existing installation: six 1.16.0 13:59:02 Uninstalling six-1.16.0: 13:59:02 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/var/jenkins/.cache/pre-commit/repomw8oee1s/py_env-python3/lib/python3.7/site-packages/__pycache__/six.cpython-37.pyc' 13:59:02 13:59:02 nox > Command pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt failed with exit code 1 13:59:02 nox > Session invoke-pre-commit failed. ``` * add changelog for https://github.com/saltstack/salt/issues/59982 * Regression test for #56273 * Fix race condition in batch. #56273 * Add changelog for #56273 * Update salt/client/__init__.py Co-authored-by: Pedro Algarvio <pedro@algarvio.me> * Update doc for salt/client * Update changelog/56273.fixed Thoreau said, "Simplify, Simplify" * Update docs * Update docs * Update CHANGELOG.md * Update 3003.1.rst * Ignore configuration for 'enable_fqdns_grains' for AIX, Solaris and Juniper * Added changelog * Let Mac OS Mojave run for 8 hours to avoid timeout * Remove FreeBSD-12.2 * Use Popen for VT * Still allow shell True * Drop shlex split * Add crypto re-init * Fix pre-commit * Do not call close in isalive * Skip tests not valid on windows * Cleanup things that are not really needed * We do not support irix * Fix pre-commit * Remove commented out lines * Add changelog for #60504 * Fix pre-commit issues * pyupgrade does not remove six imports * Fix OSErrors in some test cases * Remove un-needed args processing * Make state_running test more reliable * Removing tmpfs from Fedora 33. * Address leaks in fileserver caused by git backends At this time we do not have the ability to fix the upstream memory leaks in the gitfs backend providers. Work around their limitations by periodically restarting the file server update proccess. This will at least partially address #50313 * Remove un-used import * Fix warts caused by black version * Add changelog * We don't need two changelogs * Also pin the ``pip`` upgrade to be ``<21.2`` * Update the external ipaddress to the latest 3.9.5 version which has some security fixes. Updating the compat.p to use the vendored version if the python version is below 3.9.5 and only run the test_ipaddress.py tests if below 3.9.5. * Adding changelog * Requested changes. * Add shh_timeout to ssh_kwargs * move to with blocks * one with block * reight crypto * add back test file * add changelog * change log file number * add m2crypt support * only check m2crpto * Delete 60571.fixed * add back log * add newline * add newline for log file * Work around https://github.com/pypa/pip/pull/9450 See https://github.com/pypa/pip/issues/10212 * Drop six and Py2 * [3003.2] Add server alive (#60573) * add server alive * rename log * change default alive time * add requested changes * format string * reformat string again * run pre * customize * space * remove EOF dead space * fix pre-commit * run pre Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Changelog for 3003.2 * Man pages update for 3003.2 * Allow CVE entries in `changelog/` * Add security type for towncrier changelog * Add security type for changelog entries pre-commit check * Pin to ``pip>=20.2.4,<21.2`` Refs https://github.com/pypa/pip/pull/9450 * Drop six and Py2 * Fix bug introduced in https://github.com/saltstack/salt/pull/59648 Fixes #60046 * Add changelog * Fix doc builds * fix release notes about dropping ubuntu 16.04 * update file client * add changelog file * update changelog * Check permissions of minion config directory * Fix some wording in the messagebox and in comments * Add changelog * Fix extension for changelog * Add missing commas. It also worked, but now is better * docs_3003.3 * fixing version numbers in man pages. * removing newlines. * removing newlines. * Fixing release notes. * Fix changelog file for 3003.2 release * Fix test_state test using loader.context * Re-add test_context test * Allow Local System account, add timestamp * swaping the git-source for vsphere-automation-sdk-python * Remove destroy, handled in context manager Co-authored-by: Daniel Wozniak <dwozniak@saltstack.com> Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@wiked.org> Co-authored-by: Hoa-Long Tam <hoalong@apple.com> Co-authored-by: krionbsd <krion@freebsd.org> Co-authored-by: Elias Probst <e.probst@ssc-services.de> Co-authored-by: Daniel A. Wozniak <dwozniak@vmware.com> Co-authored-by: Frode Gundersen <frogunder@gmail.com> Co-authored-by: twangboy <slee@saltstack.com> Co-authored-by: twangboy <leesh@vmware.com> Co-authored-by: ScriptAutomate <derek@icanteven.io> Co-authored-by: Wayne Werner <waynejwerner@gmail.com> Co-authored-by: David Murphy < dmurphy@saltstack.com> Co-authored-by: Joe Eacott <jeacott@vmware.com> Co-authored-by: cmcmarrow <charles.mcmarrow.4@gmail.com> Co-authored-by: Twangboy <shane.d.lee@gmail.com>
2021-09-22 20:42:38 -04:00
!define /date TIME_STAMP "%Y-%m-%d-%H-%M-%S"
2021-06-25 16:08:16 -06:00
# Request admin rights
RequestExecutionLevel admin
2016-08-08 23:23:04 +00:00
# Import Libraries
2021-06-25 16:08:16 -06:00
!include "FileFunc.nsh"
!include "LogicLib.nsh"
!include "MoveFileFolder.nsh"
!include "MUI2.nsh"
!include "nsDialogs.nsh"
!include "StrFunc.nsh"
2016-08-08 23:23:04 +00:00
!include "WinMessages.nsh"
!include "WinVer.nsh"
2021-06-25 16:08:16 -06:00
!include "x64.nsh"
${StrLoc}
${StrStrAdv}
2021-06-25 16:08:16 -06:00
# Required by MoveFileFolder.nsh
!insertmacro Locate
# Get salt version from CLI argument /DSaltVersion
!ifdef SaltVersion
2016-08-08 23:23:04 +00:00
!define PRODUCT_VERSION "${SaltVersion}"
!else
2016-08-08 23:23:04 +00:00
!define PRODUCT_VERSION "Undefined Version"
!endif
# Get architecture from CLI argument /DPythonArchitecture
# Should be x64, AMD64, or x86
!ifdef PythonArchitecture
!define PYTHON_ARCHITECTURE "${PythonArchitecture}"
!else
# Default
!define PYTHON_ARCHITECTURE "x64"
!endif
2023-01-31 18:43:41 -07:00
# Get Estimated Size from CLI argument /DEstimatedSize
!ifdef PythonArchitecture
!define ESTIMATED_SIZE "${EstimatedSize}"
!else
# Default
!define ESTIMATED_SIZE 0
!endif
# x64 and AMD64 are AMD64, all others are x86
!if "${PYTHON_ARCHITECTURE}" == "x64"
2016-08-08 23:23:04 +00:00
!define CPUARCH "AMD64"
!else if "${PYTHON_ARCHITECTURE}" == "AMD64"
!define CPUARCH "AMD64"
!else
2016-08-08 23:23:04 +00:00
!define CPUARCH "x86"
!endif
2022-10-19 17:07:48 -06:00
!define BUILD_TYPE "Python 3"
!define OUTFILE "Salt-Minion-${PRODUCT_VERSION}-Py3-${CPUARCH}-Setup.exe"
2017-09-12 12:49:20 -06:00
# Part of the Trim function for Strings
2016-08-08 23:23:04 +00:00
!define Trim "!insertmacro Trim"
!macro Trim ResultVar String
Push "${String}"
Call Trim
2021-09-24 15:55:24 -06:00
Pop "${ResultVar}"
2016-08-08 23:23:04 +00:00
!macroend
# Part of the Explode function for Strings
!define Explode "!insertmacro Explode"
!macro Explode Length Separator String
2021-09-24 15:55:24 -06:00
Push "${Separator}"
Push "${String}"
Call Explode
Pop "${Length}"
!macroend
# Part of the StrContains function for Strings
!define StrContains "!insertmacro StrContains"
!macro StrContains OUT NEEDLE HAYSTACK
Push "${HAYSTACK}"
Push "${NEEDLE}"
Call StrContains
Pop "${OUT}"
!macroend
2016-08-08 23:23:04 +00:00
###############################################################################
# Configure Pages, Ordering, and Configuration
###############################################################################
!define MUI_ABORTWARNING
!define MUI_ICON "salt.ico"
!define MUI_UNICON "salt.ico"
2015-06-09 09:34:41 -06:00
!define MUI_WELCOMEFINISHPAGE_BITMAP "panel.bmp"
2019-01-31 15:53:31 -07:00
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "panel.bmp"
2017-09-12 12:49:20 -06:00
# Welcome page
!insertmacro MUI_PAGE_WELCOME
2016-08-08 23:23:04 +00:00
2017-09-12 12:49:20 -06:00
# License page
!insertmacro MUI_PAGE_LICENSE "LICENSE.txt"
2016-08-08 23:23:04 +00:00
2021-06-08 10:32:12 -06:00
# Install location page
!define MUI_PAGE_CUSTOMFUNCTION_SHOW pageCheckExistingInstall
!insertmacro MUI_PAGE_DIRECTORY
2017-09-12 12:49:20 -06:00
# Configure Minion page
Page custom pageMinionConfig pageMinionConfig_Leave
2016-08-08 23:23:04 +00:00
2017-09-12 12:49:20 -06:00
# Instfiles page
!insertmacro MUI_PAGE_INSTFILES
2017-09-12 12:49:20 -06:00
# Finish page (Customized)
2016-08-08 23:23:04 +00:00
!define MUI_PAGE_CUSTOMFUNCTION_SHOW pageFinish_Show
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE pageFinish_Leave
!insertmacro MUI_PAGE_FINISH
2017-09-12 12:49:20 -06:00
# Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
2017-09-12 12:49:20 -06:00
# Language files
!insertmacro MUI_LANGUAGE "English"
2016-08-08 23:23:04 +00:00
###############################################################################
# Custom Dialog Box Variables
###############################################################################
Var Dialog
Var Label
2021-06-25 16:08:16 -06:00
Var MinionStart_ChkBox
Var MinionStartDelayed_ChkBox
Var MasterHost_Cfg
Var MasterHost_TxtBox
2016-08-08 23:23:04 +00:00
Var MasterHost
2021-06-25 16:08:16 -06:00
Var MinionName_Cfg
Var MinionName_TxtBox
2016-08-08 23:23:04 +00:00
Var MinionName
Var ExistingConfigFound
2021-06-25 16:08:16 -06:00
Var ConfigType_DropList
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Var ConfigType
2021-06-25 16:08:16 -06:00
Var CustomConfig_TxtBox
Var CustomConfig_Btn
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Var CustomConfig
2021-06-25 16:08:16 -06:00
Var CustomConfigWarning_Lbl
Var ExistingConfigWarning_Lbl
Var DefaultConfigWarning_Lbl
Var MoveExistingConfig_ChkBox
Var MoveExistingConfig
2016-08-08 23:23:04 +00:00
Var StartMinion
Var StartMinionDelayed
2017-03-10 21:52:38 +00:00
Var DeleteInstallDir
2021-06-08 10:32:12 -06:00
Var DeleteRootDir
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Var ConfigWriteMinion
Var ConfigWriteMaster
2021-06-08 10:32:12 -06:00
# For new method installation
2021-09-24 11:19:06 -06:00
Var RegInstDir
2021-09-24 15:55:24 -06:00
Var RegRootDir
2021-06-08 10:32:12 -06:00
Var RootDir
Var SysDrive
Var ExistingInstallation
Var CustomLocation
###############################################################################
# Directory Picker Dialog Box
###############################################################################
Function pageCheckExistingInstall
# If this is an Existing Installation we want to disable the directory
# picker functionality
# https://nsis-dev.github.io/NSIS-Forums/html/t-166727.html
# Use the winspy tool (https://sourceforge.net/projects/winspyex/) to get
# the Control ID for the items you want to disable
# The Control ID is in the Details tab
# It is a Hex value that needs to be converted to an integer
${If} $ExistingInstallation == 1
# 32770 is Class name used by all NSIS dialog boxes
FindWindow $R0 "#32770" "" $HWNDPARENT
# 1019 is the Destination Folder text field (0x3FB)
GetDlgItem $R1 $R0 1019
EnableWindow $R1 0
# 1001 is the Browse button (0x3E9)
GetDlgItem $R1 $R0 1001
EnableWindow $R1 0
# Disabling the Location Picker causes the buttons to behave incorrectly
# Esc and Enter don't work. Nor can you use Alt+N and Alt+B. Setting
# the focus to the Next button seems to fix this
# Set focus on Next button (0x1)
# Next=1, cancel=2, back=3
2021-06-08 10:32:12 -06:00
GetDlgItem $R1 $HWNDPARENT 1
SendMessage $HWNDPARENT ${WM_NEXTDLGCTL} $R1 1
${EndIf}
FunctionEnd
2016-08-08 23:23:04 +00:00
###############################################################################
# Minion Settings Dialog Box
###############################################################################
Function pageMinionConfig
2016-08-08 23:23:04 +00:00
# Set Page Title and Description
!insertmacro MUI_HEADER_TEXT "Minion Settings" "Set the Minion Master and ID"
nsDialogs::Create 1018
Pop $Dialog
2016-08-08 23:23:04 +00:00
${If} $Dialog == error
Abort
${EndIf}
# Master IP or Hostname Dialog Control
2021-06-25 16:08:16 -06:00
${NSD_CreateLabel} 0 0 100% 9u "&Master IP or Hostname:"
2016-08-08 23:23:04 +00:00
Pop $Label
2021-06-25 16:08:16 -06:00
${NSD_CreateText} 0 10u 100% 12u $MasterHost
Pop $MasterHost_TxtBox
# Minion ID Dialog Control
2021-06-25 16:08:16 -06:00
${NSD_CreateLabel} 0 30u 100% 9u "Minion &Name:"
2016-08-08 23:23:04 +00:00
Pop $Label
2021-06-25 16:08:16 -06:00
${NSD_CreateText} 0 40u 100% 12u $MinionName
Pop $MinionName_TxtBox
2016-08-08 23:23:04 +00:00
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Config Drop List
2021-06-25 16:08:16 -06:00
${NSD_CreateDropList} 0 60u 25% 36u ""
Pop $ConfigType_DropList
${NSD_CB_AddString} $ConfigType_DropList "Default Config"
${NSD_CB_AddString} $ConfigType_DropList "Custom Config"
${NSD_OnChange} $ConfigType_DropList pageMinionConfig_OnChange
# Add Existing Config Warning Label
${NSD_CreateLabel} 0 75u 100% 50u \
"The values above are taken from an existing configuration found in \
`$RootDir\conf\minion`.$\n\
2021-06-08 10:32:12 -06:00
$\n\
Clicking `Install` will leave the existing config unchanged."
2021-06-25 16:08:16 -06:00
Pop $ExistingConfigWarning_Lbl
CreateFont $0 "Arial" 10 500 /ITALIC
2021-06-25 16:08:16 -06:00
SendMessage $ExistingConfigWarning_Lbl ${WM_SETFONT} $0 1
SetCtlColors $ExistingConfigWarning_Lbl 0xBB0000 transparent
# Add Checkbox to move root_dir
${NSD_CreateCheckBox} 0 125u 100% 10u \
"Move &existing root directory (C:\salt) to %ProgramData%\Salt."
2021-06-25 16:08:16 -06:00
Pop $MoveExistingConfig_ChkBox
CreateFont $0 "Arial" 10 500
SendMessage $MoveExistingConfig_ChkBox ${WM_SETFONT} $0 1
${If} $MoveExistingConfig == 1
${NSD_Check} $MoveExistingConfig_ChkBox
${EndIf}
# Add Default Config Warning Label
2021-06-25 16:08:16 -06:00
${NSD_CreateLabel} 0 75u 100% 60u "Clicking `Install` will backup the \
existing minion config file and minion.d directories. The values \
2021-06-25 16:08:16 -06:00
above will be used in the new default config.$\n\
$\n\
NOTE: If Master IP is set to `salt` and Minion Name is set to \
`hostname` no changes will be made."
2021-06-25 16:08:16 -06:00
Pop $DefaultConfigWarning_Lbl
CreateFont $0 "Arial" 10 500 /ITALIC
2021-06-25 16:08:16 -06:00
SendMessage $DefaultConfigWarning_Lbl ${WM_SETFONT} $0 1
SetCtlColors $DefaultConfigWarning_Lbl 0xBB0000 transparent
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Add Custom Config File Selector and Warning Label
2021-06-25 16:08:16 -06:00
${NSD_CreateText} 26% 60u 64% 12u $CustomConfig
Pop $CustomConfig_TxtBox
${NSD_CreateButton} 91% 60u 9% 12u "..."
Pop $CustomConfig_Btn
${NSD_OnClick} $CustomConfig_Btn pageCustomConfigBtn_OnClick
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${If} $ExistingConfigFound == 0
${NSD_CreateLabel} 0 75u 100% 60u \
"Values entered above will be used in the custom config.$\n\
2021-06-25 16:08:16 -06:00
$\n\
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
NOTE: If Master IP is set to `salt` and Minion Name is set to \
`hostname` no changes will be made."
${Else}
${NSD_CreateLabel} 0 75u 100% 60u \
"Clicking `Install` will backup the the existing minion config \
file and minion.d directories. The values above will be used in \
the custom config.$\n\
2021-06-25 16:08:16 -06:00
$\n\
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
NOTE: If Master IP is set to `salt` and Minion Name is set to \
`hostname` no changes will be made."
${Endif}
2021-06-25 16:08:16 -06:00
Pop $CustomConfigWarning_Lbl
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
CreateFont $0 "Arial" 10 500 /ITALIC
2021-06-25 16:08:16 -06:00
SendMessage $CustomConfigWarning_Lbl ${WM_SETFONT} $0 1
SetCtlColors $CustomConfigWarning_Lbl 0xBB0000 transparent
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# If existing config found, add the Existing Config option to the Drop List
# If not, hide the Default Warning
${If} $ExistingConfigFound == 1
2021-06-25 16:08:16 -06:00
${NSD_CB_AddString} $ConfigType_DropList "Existing Config"
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Else}
2021-06-25 16:08:16 -06:00
ShowWindow $DefaultConfigWarning_Lbl ${SW_HIDE}
${Endif}
2021-06-25 16:08:16 -06:00
${NSD_CB_SelectString} $ConfigType_DropList $ConfigType
${NSD_SetText} $CustomConfig_TxtBox $CustomConfig
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Call pageMinionConfig_OnChange
2016-08-08 23:23:04 +00:00
nsDialogs::Show
FunctionEnd
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Function pageMinionConfig_OnChange
# You have to pop the top handle to keep the stack clean
Pop $R0
# Assign the current checkbox state to the variable
2021-06-25 16:08:16 -06:00
${NSD_GetText} $ConfigType_DropList $ConfigType
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Update Dialog
2021-06-25 16:08:16 -06:00
${Switch} $ConfigType
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Case} "Existing Config"
# Enable Master/Minion and set values
2021-06-25 16:08:16 -06:00
EnableWindow $MasterHost_TxtBox 0
EnableWindow $MinionName_TxtBox 0
${NSD_SetText} $MasterHost_TxtBox $MasterHost_Cfg
${NSD_SetText} $MinionName_TxtBox $MinionName_Cfg
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Hide Custom File Picker
2021-06-25 16:08:16 -06:00
ShowWindow $CustomConfig_TxtBox ${SW_HIDE}
ShowWindow $CustomConfig_Btn ${SW_HIDE}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Hide Warnings
2021-06-25 16:08:16 -06:00
ShowWindow $DefaultConfigWarning_Lbl ${SW_HIDE}
ShowWindow $CustomConfigWarning_Lbl ${SW_HIDE}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Show Existing Warning
2021-06-25 16:08:16 -06:00
ShowWindow $ExistingConfigWarning_Lbl ${SW_SHOW}
${If} $RootDir == "C:\salt"
ShowWindow $MoveExistingConfig_ChkBox ${SW_SHOW}
${Else}
ShowWindow $MoveExistingConfig_ChkBox ${SW_HIDE}
${EndIf}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Break}
${Case} "Custom Config"
# Enable Master/Minion and set values
2021-06-25 16:08:16 -06:00
EnableWindow $MasterHost_TxtBox 1
EnableWindow $MinionName_TxtBox 1
${NSD_SetText} $MasterHost_TxtBox $MasterHost
${NSD_SetText} $MinionName_TxtBox $MinionName
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Show Custom File Picker
2021-06-25 16:08:16 -06:00
ShowWindow $CustomConfig_TxtBox ${SW_SHOW}
ShowWindow $CustomConfig_Btn ${SW_SHOW}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Hide Warnings
2021-06-25 16:08:16 -06:00
ShowWindow $DefaultConfigWarning_Lbl ${SW_HIDE}
ShowWindow $ExistingConfigWarning_Lbl ${SW_HIDE}
ShowWindow $MoveExistingConfig_ChkBox ${SW_HIDE}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Show Custom Warning
2021-06-25 16:08:16 -06:00
ShowWindow $CustomConfigWarning_Lbl ${SW_SHOW}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Break}
${Case} "Default Config"
# Enable Master/Minion and set values
2021-06-25 16:08:16 -06:00
EnableWindow $MasterHost_TxtBox 1
EnableWindow $MinionName_TxtBox 1
${NSD_SetText} $MasterHost_TxtBox $MasterHost
${NSD_SetText} $MinionName_TxtBox $MinionName
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Hide Custom File Picker
2021-06-25 16:08:16 -06:00
ShowWindow $CustomConfig_TxtBox ${SW_HIDE}
ShowWindow $CustomConfig_Btn ${SW_HIDE}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Hide Warnings
2021-06-25 16:08:16 -06:00
ShowWindow $ExistingConfigWarning_Lbl ${SW_HIDE}
ShowWindow $MoveExistingConfig_ChkBox ${SW_HIDE}
ShowWindow $CustomConfigWarning_Lbl ${SW_HIDE}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Show Default Warning, if there is an existing config
${If} $ExistingConfigFound == 1
2021-06-25 16:08:16 -06:00
ShowWindow $DefaultConfigWarning_Lbl ${SW_SHOW}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Endif}
${Break}
${EndSwitch}
FunctionEnd
2017-12-20 19:14:47 -07:00
# File Picker Definitions
!define OFN_FILEMUSTEXIST 0x00001000
!define OFN_DONTADDTOREC 0x02000000
!define OPENFILENAME_SIZE_VERSION_400 76
!define OPENFILENAME 'i,i,i,i,i,i,i,i,i,i,i,i,i,i,&i2,&i2,i,i,i,i'
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Function pageCustomConfigBtn_OnClick
Pop $0
System::Call '*(&t${NSIS_MAX_STRLEN})i.s' # Allocate OPENFILENAME.lpstrFile buffer
System::Call '*(${OPENFILENAME})i.r0' # Allocate OPENFILENAME struct
System::Call '*$0(${OPENFILENAME})(${OPENFILENAME_SIZE_VERSION_400}, \
$hwndparent, , , , , , sr1, ${NSIS_MAX_STRLEN} , , , , \
t"Select Custom Config File", \
${OFN_FILEMUSTEXIST} | ${OFN_DONTADDTOREC})'
# Populate file name field
2021-06-25 16:08:16 -06:00
${NSD_GetText} $CustomConfig_TxtBox $2
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
System::Call "*$1(&t${NSIS_MAX_STRLEN}r2)" ; Set lpstrFile to the old path (if any)
# Open the dialog
System::Call 'COMDLG32::GetOpenFileName(ir0)i.r2'
# Get file name field
${If} $2 <> 0
System::Call "*$1(&t${NSIS_MAX_STRLEN}.r2)"
2021-06-25 16:08:16 -06:00
${NSD_SetText} $CustomConfig_TxtBox $2
${EndIf}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Free resources
System::Free $1
System::Free $0
FunctionEnd
2016-08-08 23:23:04 +00:00
Function pageMinionConfig_Leave
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Save the State
2021-06-25 16:08:16 -06:00
${NSD_GetText} $MasterHost_TxtBox $MasterHost
${NSD_GetText} $MinionName_TxtBox $MinionName
${NSD_GetText} $ConfigType_DropList $ConfigType
${NSD_GetText} $CustomConfig_TxtBox $CustomConfig
${NSD_GetState} $MoveExistingConfig_ChkBox $MoveExistingConfig
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Abort if config file not found
2021-06-25 16:08:16 -06:00
${If} $ConfigType == "Custom Config"
IfFileExists "$CustomConfig" done 0
MessageBox MB_OK|MB_ICONEXCLAMATION \
"File not found: $CustomConfig" \
/SD IDOK
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Abort
${EndIf}
2021-06-25 16:08:16 -06:00
${If} $MoveExistingConfig == 1
# This makes the $APPDATA variable point to the ProgramData folder
# instead of the current user's roaming AppData folder
2021-09-24 11:19:06 -06:00
SetShellVarContext all
2021-06-25 16:08:16 -06:00
# Get directory status
# We don't want to overwrite data in the new location, so it needs to
# either be empty or not found. Otherwise, warn and abort
2021-06-25 16:08:16 -06:00
${DirState} "$APPDATA\Salt Project\Salt" $R0 # 0=Empty, 1=full, -1=Not Found
StrCmp $R0 "1" 0 done # Move files if directory empty or missing
2021-06-25 16:08:16 -06:00
MessageBox MB_OKCANCEL \
"The $APPDATA\Salt Project\Salt directory is not empty.$\n\
These files will need to be moved manually." \
/SD IDOK IDCANCEL cancel
# OK: We're continuing without moving existing config
2021-06-25 16:08:16 -06:00
StrCpy $MoveExistingConfig 0
Goto done
2021-06-25 16:08:16 -06:00
cancel:
# Cancel: We're unchecking the checkbox and returning the user to
# the dialog box
# Abort just returns the user back to the dialog box
2021-06-25 16:08:16 -06:00
${NSD_UNCHECK} $MoveExistingConfig_ChkBox
Abort
${EndIf}
done:
2016-08-08 23:23:04 +00:00
FunctionEnd
###############################################################################
# Custom Finish Page
###############################################################################
Function pageFinish_Show
# Imports so the checkboxes will show up
2016-08-08 23:23:04 +00:00
!define SWP_NOSIZE 0x0001
!define SWP_NOMOVE 0x0002
!define HWND_TOP 0x0000
# Create Start Minion Checkbox
2016-08-08 23:23:04 +00:00
${NSD_CreateCheckbox} 120u 90u 100% 12u "&Start salt-minion"
2021-06-25 16:08:16 -06:00
Pop $MinionStart_ChkBox
SetCtlColors $MinionStart_ChkBox "" "ffffff"
# This command required to bring the checkbox to the front
2021-06-25 16:08:16 -06:00
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($MinionStart_ChkBox, ${HWND_TOP}, 0, 0, 0, 0, ${SWP_NOSIZE}|${SWP_NOMOVE})"
2016-08-08 23:23:04 +00:00
2016-10-04 16:14:13 -06:00
# Create Start Minion Delayed ComboBox
2017-03-31 15:12:41 -06:00
${NSD_CreateCheckbox} 130u 102u 100% 12u "&Delayed Start"
2021-06-25 16:08:16 -06:00
Pop $MinionStartDelayed_ChkBox
SetCtlColors $MinionStartDelayed_ChkBox "" "ffffff"
# This command required to bring the checkbox to the front
2021-06-25 16:08:16 -06:00
System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($MinionStartDelayed_ChkBox, ${HWND_TOP}, 0, 0, 0, 0, ${SWP_NOSIZE}|${SWP_NOMOVE})"
2016-08-08 23:23:04 +00:00
# Load current settings for Minion
2016-08-23 22:37:17 +00:00
${If} $StartMinion == 1
2021-06-25 16:08:16 -06:00
${NSD_Check} $MinionStart_ChkBox
${EndIf}
# Load current settings for Minion Delayed
${If} $StartMinionDelayed == 1
2021-06-25 16:08:16 -06:00
${NSD_Check} $MinionStartDelayed_ChkBox
${EndIf}
FunctionEnd
2016-08-08 23:23:04 +00:00
Function pageFinish_Leave
# Assign the current checkbox states
2021-06-25 16:08:16 -06:00
${NSD_GetState} $MinionStart_ChkBox $StartMinion
${NSD_GetState} $MinionStartDelayed_ChkBox $StartMinionDelayed
FunctionEnd
2016-08-08 23:23:04 +00:00
###############################################################################
# Installation Settings
###############################################################################
Name "${PRODUCT_NAME} ${PRODUCT_VERSION} (${BUILD_TYPE})"
OutFile "${OutFile}"
2021-06-08 10:32:12 -06:00
InstallDir "C:\Program Files\Salt Project\Salt"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
Section "MainSection" SEC01
${If} $MoveExistingConfig == 1
# This makes the $APPDATA variable point to the ProgramData folder
# instead of the current user's roaming AppData folder
SetShellVarContext all
detailPrint "Moving existing config to $APPDATA\Salt Project\Salt"
# Make sure the target directory exists
nsExec::Exec "md $APPDATA\Salt Project\Salt"
# Take ownership of the C:\salt directory
detailPrint "Taking ownership: $RootDir"
nsExec::Exec "takeown /F $RootDir /R"
# Move the C:\salt directory to the new location
StrCpy $switch_overwrite 0
detailPrint "Moving $RootDir to $APPDATA"
IfFileExists "$RootDir\conf" 0 +2
!insertmacro MoveFolder "$RootDir\conf" "$APPDATA\Salt Project\Salt\conf" "*.*"
IfFileExists "$RootDir\srv" 0 +2
!insertmacro MoveFolder "$RootDir\srv" "$APPDATA\Salt Project\Salt\srv" "*.*"
IfFileExists "$RootDir\var" 0 +2
!insertmacro MoveFolder "$RootDir\var" "$APPDATA\Salt Project\Salt\var" "*.*"
# Make RootDir the new location
StrCpy $RootDir "$APPDATA\Salt Project\Salt"
${EndIf}
${If} $ConfigType != "Existing Config"
Call BackupExistingConfig
${EndIf}
# Install files to the Installation Directory
2016-08-08 23:23:04 +00:00
SetOutPath "$INSTDIR\"
SetOverwrite off
2022-12-22 18:18:28 -07:00
File /r "..\..\buildenv\"
# Set up Root Directory
2021-07-01 17:02:00 -06:00
CreateDirectory "$RootDir\conf\pki\minion"
CreateDirectory "$RootDir\conf\minion.d"
CreateDirectory "$RootDir\var\cache\salt\minion\extmods\grains"
CreateDirectory "$RootDir\var\cache\salt\minion\proc"
CreateDirectory "$RootDir\var\log\salt"
2021-07-01 17:02:00 -06:00
CreateDirectory "$RootDir\var\run"
2021-06-08 10:32:12 -06:00
nsExec::Exec 'icacls $RootDir /inheritance:r /grant:r "*S-1-5-32-544":(OI)(CI)F /grant:r "*S-1-5-18":(OI)(CI)F'
SectionEnd
2016-08-08 23:23:04 +00:00
Function .onInit
# This function gets executed before any other. This is where we will
# detect existing installations and config to be used by the installer
# Make sure we do not allow 32-bit Salt on 64-bit systems
# This is the system the installer is running on
${If} ${RunningX64}
# This is the Python architecture the installer was built with
${If} ${CPUARCH} == "x86"
MessageBox MB_OK|MB_ICONEXCLAMATION \
"Detected 64-bit Operating system.$\n$\n\
Please install the 64-bit version of Salt on this operating system." \
/SD IDOK
Abort
${EndIf}
${Else}
# This is the Python architecture the installer was built with
${If} ${CPUARCH} == "AMD64"
MessageBox MB_OK|MB_ICONEXCLAMATION \
"Detected 32-bit Operating system.$\n$\n\
Please install the 32-bit version of Salt on this operating system." \
/SD IDOK
Abort
${EndIf}
${EndIf}
2021-06-08 10:32:12 -06:00
Call parseInstallerCommandLineSwitches
2020-05-04 14:24:45 +02:00
# Uninstall msi-installed salt
2021-06-25 16:08:16 -06:00
# Source: https://nsis-dev.github.io/NSIS-Forums/html/t-303468.html
# TODO: Add a message box here confirming the uninstall of the MSI
!define upgradecode {FC6FB3A2-65DE-41A9-AD91-D10A402BD641} # Salt upgrade code
2020-05-04 14:24:45 +02:00
StrCpy $0 0
loop:
System::Call 'MSI::MsiEnumRelatedProducts(t "${upgradecode}",i0,i r0,t.r1)i.r2'
${If} $2 = 0
# Now $1 contains the product code
2020-05-04 14:24:45 +02:00
DetailPrint product:$1
push $R0
StrCpy $R0 $1
Call UninstallMSI
pop $R0
IntOp $0 $0 + 1
goto loop
${Endif}
# If a custom config is passed on the CLI, verify its existence before
# continuing so we don't uninstall an existing installation and then fail
# NOTE: This handles custom config for silent installations where the
# NOTE: custom config is passed on the CLI. The GUI has its own checking
# NOTE: when the user selects a custom config.
2021-06-25 16:08:16 -06:00
${If} $ConfigType == "Custom Config"
IfFileExists "$CustomConfig" checkExistingInstallation 0
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Abort
${EndIf}
checkExistingInstallation:
2020-05-21 21:05:56 -06:00
# Check for existing installation
# The NSIS installer is a 32bit application and will use the WOW6432Node
# in the registry by default. We need to look in the 64 bit location on
# 64 bit systems
${If} ${RunningX64}
# https://nsis.sourceforge.io/Docs/Chapter4.html#setregview
SetRegView 64 # View the 64 bit portion of the registry
${EndIf}
2020-05-21 21:05:56 -06:00
ReadRegStr $R0 HKLM \
"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
"UninstallString"
2021-06-25 16:08:16 -06:00
# Puts the nullsoft installer back to its default
SetRegView 32 # Set it back to the 32 bit portion of the registry
2021-06-25 16:08:16 -06:00
# If not found, look in 32 bit
${If} $R0 == ""
ReadRegStr $R0 HKLM \
"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
"UninstallString"
${EndIf}
# If it's empty it's not installed
StrCmp $R0 "" skipUninstall
2021-06-25 16:08:16 -06:00
# Set InstDir to the parent directory so that we can uninstall it
${GetParent} $R0 $INSTDIR
2017-09-12 12:49:20 -06:00
# Found existing installation, prompt to uninstall
2021-06-08 10:32:12 -06:00
MessageBox MB_OKCANCEL|MB_USERICON \
"${PRODUCT_NAME} is already installed.$\n$\n\
2016-08-23 22:37:17 +00:00
Click `OK` to remove the existing installation." \
/SD IDOK IDOK uninst
Abort
2016-08-08 23:23:04 +00:00
uninst:
2017-03-10 21:52:38 +00:00
2017-09-12 12:49:20 -06:00
# Get current Silent status
2017-03-10 21:52:38 +00:00
StrCpy $R0 0
${If} ${Silent}
StrCpy $R0 1
2016-08-08 23:23:04 +00:00
${EndIf}
2017-09-12 12:49:20 -06:00
# Turn on Silent mode
2017-03-10 21:52:38 +00:00
SetSilent silent
2021-06-08 10:32:12 -06:00
# Don't remove all directories when upgrading (old method)
2017-03-10 21:52:38 +00:00
StrCpy $DeleteInstallDir 0
2021-06-08 10:32:12 -06:00
# Don't remove RootDir when upgrading (new method)
StrCpy $DeleteRootDir 0
2017-09-12 12:49:20 -06:00
# Uninstall silently
2017-03-10 21:52:38 +00:00
Call uninstallSalt
2017-09-12 12:49:20 -06:00
# Set it back to Normal mode, if that's what it was before
2017-03-10 21:52:38 +00:00
${If} $R0 == 0
SetSilent normal
${EndIf}
2016-08-09 18:58:58 +00:00
2016-08-08 23:23:04 +00:00
skipUninstall:
2021-06-08 10:32:12 -06:00
Call getExistingInstallation
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Call getExistingMinionConfig
${If} $ExistingConfigFound == 0
2021-06-25 16:08:16 -06:00
${AndIf} $ConfigType == "Existing Config"
StrCpy $ConfigType "Default Config"
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${EndIf}
FunctionEnd
2021-06-08 10:32:12 -06:00
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Function BackupExistingConfig
${If} $ExistingConfigFound == 1 # If existing config found
2021-06-25 16:08:16 -06:00
${AndIfNot} $ConfigType == "Existing Config" # If not using Existing Config
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Backup the minion config
2021-06-08 10:32:12 -06:00
Rename "$RootDir\conf\minion" "$RootDir\conf\minion-${TIME_STAMP}.bak"
IfFileExists "$RootDir\conf\minion.d" 0 +2
Rename "$RootDir\conf\minion.d" "$RootDir\conf\minion.d-${TIME_STAMP}.bak"
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${EndIf}
# By this point there should be no existing config. It was either backed up
# or wasn't there to begin with
2021-06-25 16:08:16 -06:00
${If} $ConfigType == "Custom Config" # If we're using Custom Config
${AndIfNot} $CustomConfig == "" # If a custom config is passed
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Check for a file name
# Named file should be in the same directory as the installer
2021-06-08 10:32:12 -06:00
CreateDirectory "$RootDir\conf"
2021-06-25 16:08:16 -06:00
IfFileExists "$EXEDIR\$CustomConfig" 0 checkFullPath
CopyFiles /SILENT /FILESONLY "$EXEDIR\$CustomConfig" "$RootDir\conf\minion"
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
goto finished
# Maybe it was a full path to a file
checkFullPath:
2021-06-25 16:08:16 -06:00
IfFileExists "$CustomConfig" 0 finished
CopyFiles /SILENT /FILESONLY "$CustomConfig" "$RootDir\conf\minion"
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
finished:
${EndIf}
2016-08-08 23:23:04 +00:00
FunctionEnd
2016-08-08 23:23:04 +00:00
Section -Post
2016-08-08 23:23:04 +00:00
WriteUninstaller "$INSTDIR\uninst.exe"
# The NSIS installer is a 32bit application and will use the WOW6432Node in
# the registry by default. We need to look in the 64 bit location on 64 bit
# systems
${If} ${RunningX64}
# https://nsis.sourceforge.io/Docs/Chapter4.html#setregview
SetRegView 64 # View 64 bit portion of the registry
${EndIf}
2021-06-08 10:32:12 -06:00
# Write Uninstall Registry Entries
2016-08-23 22:37:17 +00:00
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"UninstallString" "$INSTDIR\uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"DisplayIcon" "$INSTDIR\salt.ico"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"Publisher" "${PRODUCT_PUBLISHER}"
WriteRegStr HKLM "SYSTEM\CurrentControlSet\services\salt-minion" \
"DependOnService" "nsi"
2023-01-31 18:43:41 -07:00
# If ESTIMATED_SIZE is not set, calculated it
${If} ${ESTIMATED_SIZE} == 0
${GetSize} "$INSTDIR" "/S=OK" $0 $1 $2
${Else}
StrCpy $0 ${ESTIMATED_SIZE}
${Endif}
IntFmt $0 "0x%08X" $0
WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"EstimatedSize" "$0"
2016-08-23 22:37:17 +00:00
2021-06-08 10:32:12 -06:00
# Write Commandline Registry Entries
WriteRegStr HKLM "${PRODUCT_CALL_REGKEY}" "" "$INSTDIR\salt-call.exe"
WriteRegStr HKLM "${PRODUCT_CALL_REGKEY}" "Path" "$INSTDIR\"
WriteRegStr HKLM "${PRODUCT_MINION_REGKEY}" "" "$INSTDIR\salt-minion.exe"
WriteRegStr HKLM "${PRODUCT_MINION_REGKEY}" "Path" "$INSTDIR\"
2016-08-23 22:37:17 +00:00
2021-06-08 10:32:12 -06:00
# Write Salt Configuration Registry Entries
2021-09-24 11:19:06 -06:00
# We want to write EXPAND_SZ string types to allow us to use environment
# variables. It's OK to use EXPAND_SZ even if you don't use an environment
# variable so we'll just do that whether it's new location or old.
2021-09-24 15:55:24 -06:00
# Check for Program Files
2021-09-24 11:19:06 -06:00
# Set the current setting for INSTDIR... we'll only change it if it contains
# Program Files
StrCpy $RegInstDir $INSTDIR
# Program Files
# We want to use the environment variables instead of the hardcoded path
2021-09-24 11:19:06 -06:00
${StrContains} $0 "Program Files" $INSTDIR
2021-09-24 15:55:24 -06:00
StrCmp $0 "" +2 # If it's empty, skip the next line
2021-09-24 11:19:06 -06:00
StrCpy $RegInstDir "%ProgramFiles%\Salt Project\Salt"
2021-09-24 15:55:24 -06:00
# Check for ProgramData
2021-09-24 11:19:06 -06:00
# Set the current setting for RootDir. we'll only change it if it contains
# ProgramData
StrCpy $RegRootDir $RootDir
# We want to use the environment variables instead of the hardcoded path
${StrContains} $0 "ProgramData" $RootDir
2021-09-24 15:55:24 -06:00
StrCmp $0 "" +2 # If it's empty, skip the next line
2021-09-24 11:19:06 -06:00
StrCpy $RegRootDir "%ProgramData%\Salt Project\Salt"
2021-09-24 15:55:24 -06:00
WriteRegExpandStr HKLM "SOFTWARE\Salt Project\Salt" "install_dir" "$RegInstDir"
WriteRegExpandStr HKLM "SOFTWARE\Salt Project\Salt" "root_dir" "$RegRootDir"
2021-09-24 11:19:06 -06:00
# Puts the nullsoft installer back to its default
2021-06-25 16:08:16 -06:00
SetRegView 32 # Set it back to the 32 bit portion of the registry
2021-06-08 10:32:12 -06:00
2017-09-12 12:49:20 -06:00
# Register the Salt-Minion Service
nsExec::Exec `$INSTDIR\ssm.exe install salt-minion "$INSTDIR\salt-minion.exe" -c """$RootDir\conf""" -l quiet`
nsExec::Exec "$INSTDIR\ssm.exe set salt-minion Description Salt Minion from saltstack.com"
nsExec::Exec "$INSTDIR\ssm.exe set salt-minion Start SERVICE_AUTO_START"
nsExec::Exec "$INSTDIR\ssm.exe set salt-minion AppStopMethodConsole 24000"
nsExec::Exec "$INSTDIR\ssm.exe set salt-minion AppStopMethodWindow 2000"
nsExec::Exec "$INSTDIR\ssm.exe set salt-minion AppRestartDelay 60000"
2021-07-01 17:35:59 -06:00
# There is a default minion config laid down in the $INSTDIR directory
${Switch} $ConfigType
${Case} "Existing Config"
# If this is an Existing Config, we don't do anything
2021-07-01 17:35:59 -06:00
${Break}
${Case} "Custom Config"
# If this is a Custom Config, update the custom config
2021-07-01 17:35:59 -06:00
Call updateMinionConfig
${Break}
${Case} "Default Config"
# If this is the Default Config, we move it and update it
2021-07-01 17:35:59 -06:00
StrCpy $switch_overwrite 1
2021-09-24 11:19:06 -06:00
!insertmacro MoveFolder "$INSTDIR\configs" "$RootDir\conf" "*.*"
2021-07-01 17:35:59 -06:00
Call updateMinionConfig
${Break}
${EndSwitch}
# Delete the configs directory that came with the installer
RMDir /r "$INSTDIR\configs"
# Add $INSTDIR in the Path
EnVar::SetHKLM
EnVar::AddValue Path "$INSTDIR"
2016-08-09 18:58:58 +00:00
2016-08-08 23:23:04 +00:00
SectionEnd
2016-08-08 23:23:04 +00:00
Function .onInstSuccess
2017-09-12 12:49:20 -06:00
# If StartMinionDelayed is 1, then set the service to start delayed
${If} $StartMinionDelayed == 1
nsExec::Exec "$INSTDIR\ssm.exe set salt-minion Start SERVICE_DELAYED_AUTO_START"
${EndIf}
2017-09-12 12:49:20 -06:00
# If start-minion is 1, then start the service
2016-08-08 23:23:04 +00:00
${If} $StartMinion == 1
nsExec::Exec 'net start salt-minion'
2016-08-08 23:23:04 +00:00
${EndIf}
2016-08-08 23:23:04 +00:00
FunctionEnd
2016-08-08 23:23:04 +00:00
Function un.onInit
2017-03-10 21:52:38 +00:00
2021-06-08 10:32:12 -06:00
Call un.parseUninstallerCommandLineSwitches
2017-03-10 21:52:38 +00:00
2021-06-08 10:32:12 -06:00
MessageBox MB_USERICON|MB_YESNO|MB_DEFBUTTON1 \
"Are you sure you want to completely remove $(^Name) and all of its \
components?" \
2016-08-23 22:37:17 +00:00
/SD IDYES IDYES +2
2016-08-08 23:23:04 +00:00
Abort
2017-03-10 21:52:38 +00:00
2016-08-08 23:23:04 +00:00
FunctionEnd
2015-03-31 17:26:46 -06:00
2016-08-08 23:23:04 +00:00
Section Uninstall
2016-08-09 18:58:58 +00:00
2017-03-10 21:52:38 +00:00
Call un.uninstallSalt
# Remove $INSTDIR from the Path
EnVar::SetHKLM
EnVar::DeleteValue Path "$INSTDIR"
2017-03-10 21:52:38 +00:00
SectionEnd
!macro uninstallSalt un
Function ${un}uninstallSalt
2021-07-21 17:14:44 -06:00
# WARNING: Any changes made here need to be reflected in the MSI uninstaller
2017-09-12 12:49:20 -06:00
# Make sure we're in the right directory
${If} $INSTDIR == "c:\salt\Scripts"
2017-03-10 21:52:38 +00:00
StrCpy $INSTDIR "C:\salt"
${EndIf}
2021-06-08 10:32:12 -06:00
# $ProgramFiles is different depending on the CPU Architecture
# https://nsis.sourceforge.io/Reference/$PROGRAMFILES
2021-06-08 10:32:12 -06:00
# x86 : C:\Program Files
# x64 : C:\Program Files (x86)
${If} $INSTDIR == "$ProgramFiles\Salt Project\Salt\Scripts"
2021-06-08 10:32:12 -06:00
StrCpy $INSTDIR "$ProgramFiles\Salt Project\Salt"
${EndIf}
# $ProgramFiles64 is the C:\Program Files directory
${If} $INSTDIR == "$ProgramFiles64\Salt Project\Salt\Scripts"
2021-06-08 10:32:12 -06:00
StrCpy $INSTDIR "$ProgramFiles64\Salt Project\Salt"
${EndIf}
2017-09-12 12:49:20 -06:00
# Stop and Remove salt-minion service
nsExec::Exec "net stop salt-minion"
nsExec::Exec "sc delete salt-minion"
2017-09-12 12:49:20 -06:00
# Stop and remove the salt-master service
nsExec::Exec "net stop salt-master"
nsExec::Exec "sc delete salt-master"
# We need to make sure the service is stopped and removed before deleting
# any files
StrCpy $0 1 # Tries
StrCpy $1 1 # Service Present
loop:
detailPrint "Verifying salt-minion deletion: try $0"
nsExec::ExecToStack 'net start | FIND /C /I "salt-minion"'
pop $2 # First on the stack is the return code
pop $1 # Next on the stack is standard out (service present)
${If} $1 == 1
${If} $0 < 5
IntOp $0 $0 + 1
Sleep 1000
goto loop
${Else}
MessageBox MB_OK|MB_ICONEXCLAMATION \
"Failed to remove salt-minion service" \
/SD IDOK
Abort
${EndIf}
${EndIf}
2017-03-10 21:52:38 +00:00
2017-09-12 12:49:20 -06:00
# Remove files
2023-08-23 14:14:57 -06:00
Delete "$INSTDIR\multi-minion*"
Delete "$INSTDIR\salt*"
2023-08-23 14:14:57 -06:00
Delete "$INSTDIR\ssm.exe"
Delete "$INSTDIR\uninst.exe"
Delete "$INSTDIR\vcredist.exe"
RMDir /r "$INSTDIR\DLLs"
RMDir /r "$INSTDIR\Include"
RMDir /r "$INSTDIR\Lib"
RMDir /r "$INSTDIR\libs"
RMDir /r "$INSTDIR\Scripts"
# Remove everything in the 64 bit registry
# The NSIS installer is a 32bit application and will use the WOW6432Node in
# the registry by default. We need to look in the 64 bit location on 64 bit
# systems
${If} ${RunningX64}
# https://nsis.sourceforge.io/Docs/Chapter4.html#setregview
SetRegView 64 # View the 64 bit portion of the registry
# Get Root Directory from the Registry (64 bit)
ReadRegStr $RootDir HKLM "SOFTWARE\Salt Project\Salt" "root_dir"
# Remove Registry entries
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
# Remove Command Line Registry entries
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_CALL_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_CP_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_KEY_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_MASTER_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_MINION_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_RUN_REGKEY}"
DeleteRegKey HKLM "SOFTWARE\Salt Project"
${EndIf}
# Remove everything in the 32 bit registry
SetRegView 32 # Set it to 32 bit
${If} $RootDir == ""
# Get Root Directory from the Registry (32 bit)
ReadRegStr $RootDir HKLM "SOFTWARE\Salt Project\Salt" "root_dir"
${EndIf}
2017-09-12 12:49:20 -06:00
# Remove Registry entries
2017-03-10 21:52:38 +00:00
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
2021-06-08 10:32:12 -06:00
# Remove Command Line Registry entries
2017-03-10 21:52:38 +00:00
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_CALL_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_CP_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_KEY_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_MASTER_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_MINION_REGKEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_RUN_REGKEY}"
2021-06-08 10:32:12 -06:00
DeleteRegKey HKLM "SOFTWARE\Salt Project"
2021-07-01 16:37:12 -06:00
# SystemDrive is not a built in NSIS constant, so we need to get it from
# the environment variables
ReadEnvStr $0 "SystemDrive" # Get the SystemDrive env var
StrCpy $SysDrive "$0\"
2017-09-12 12:49:20 -06:00
# Automatically close when finished
2017-03-10 21:52:38 +00:00
SetAutoClose true
2021-06-08 10:32:12 -06:00
# Old Method Installation
${If} $INSTDIR == "C:\salt"
# Prompt to remove the Installation Directory. This is because that
# directory is also the root_dir which includes the config and pki
# directories
${IfNot} $DeleteInstallDir == 1
MessageBox MB_YESNO|MB_DEFBUTTON2|MB_USERICON \
"Would you like to completely remove $INSTDIR and all of its contents?" \
/SD IDNO IDNO finished
${EndIf}
2021-07-01 16:37:12 -06:00
SetOutPath "$SysDrive" # Can't remove CWD
RMDir /r "$INSTDIR"
2021-06-08 10:32:12 -06:00
${Else}
2023-08-23 14:14:57 -06:00
# Prompt for the removal of the Installation Directory which contains
# the extras directory and the Root Directory which contains the config
# and pki directories. These directories will not be removed during
# an upgrade.
${IfNot} $DeleteRootDir == 1
MessageBox MB_YESNO|MB_DEFBUTTON2|MB_USERICON \
"Would you like to completely remove the entire Salt \
Installation? This includes the following:$\n\
- Extra Pip Packages ($INSTDIR\extras-3.##)$\n\
- Minion Config ($RootDir\conf)$\n\
- Minion PKIs ($RootDir\conf\pki)"\
/SD IDNO IDNO finished
${EndIf}
2021-06-08 10:32:12 -06:00
# New Method Installation
# This makes the $APPDATA variable point to the ProgramData folder instead
# of the current user's roaming AppData folder
SetShellVarContext all
# We can always remove the Installation Directory on New Method Installs
# because it only contains binary data
# Remove INSTDIR
# Make sure you're not removing important system directory such as
# Program Files, C:\Windows, or C:
${If} $INSTDIR != $ProgramFiles
${AndIf} $INSTDIR != $ProgramFiles64
${AndIf} $INSTDIR != $SysDrive
${AndIf} $INSTDIR != $WinDir
2021-07-01 16:37:12 -06:00
SetOutPath "$SysDrive" # Can't remove CWD
2021-06-08 10:32:12 -06:00
RMDir /r $INSTDIR
${EndIf}
# Remove INSTDIR (The parent)
# For example, though salt is installed in ProgramFiles\Salt Project\Salt
# We want to remove ProgramFiles\Salt Project
# Only delete Salt Project directory if it's in Program Files
# Otherwise, we can't guess where the user may have installed salt
${GetParent} $INSTDIR $0 # Get parent directory (Salt Project)
2023-08-23 14:14:57 -06:00
${If} $0 == "$ProgramFiles\Salt Project" # Make sure it's ProgramFiles
${OrIf} $0 == "$ProgramFiles64\Salt Project" # Make sure it's Program Files (x86)
2021-07-01 16:37:12 -06:00
SetOutPath "$SysDrive" # Can't remove CWD
2021-06-08 10:32:12 -06:00
RMDir /r $0
${EndIf}
# If RootDir is still empty, use C:\salt
${If} $RootDir == ""
StrCpy $RootDir "C:\salt"
${EndIf}
# Expand any environment variables
ExpandEnvStrings $RootDir $RootDir
2021-06-08 10:32:12 -06:00
# Remove the Salt Project directory in ProgramData
# The Salt Project directory will only ever be in ProgramData
# It is not user selectable
${GetParent} $RootDir $0 # Get parent directory
${If} $0 == "$APPDATA\Salt Project" # Make sure it's not ProgramData
2021-07-01 16:37:12 -06:00
SetOutPath "$SysDrive" # Can't remove CWD
2021-06-08 10:32:12 -06:00
RMDir /r $0
${EndIf}
2017-03-10 21:52:38 +00:00
2016-08-08 23:23:04 +00:00
${EndIf}
2017-03-10 21:52:38 +00:00
finished:
2016-08-08 23:23:04 +00:00
2017-03-10 21:52:38 +00:00
FunctionEnd
!macroend
2016-08-09 18:58:58 +00:00
2016-08-08 23:23:04 +00:00
2017-03-10 21:52:38 +00:00
!insertmacro uninstallSalt ""
!insertmacro uninstallSalt "un."
2016-08-08 23:23:04 +00:00
2016-08-08 23:23:04 +00:00
Function un.onUninstSuccess
HideWindow
2021-06-08 10:32:12 -06:00
MessageBox MB_OK|MB_USERICON \
"$(^Name) was successfully removed from your computer." \
/SD IDOK
FunctionEnd
2016-08-08 23:23:04 +00:00
###############################################################################
# Helper Functions
###############################################################################
#------------------------------------------------------------------------------
# Trim Function
# - Trim whitespace from the beginning and end of a string
# - Trims spaces, \r, \n, \t
#
# Usage:
2017-09-21 14:11:21 -06:00
# Push " some string " ; String to Trim
# Call Trim
2017-09-21 14:11:21 -06:00
# Pop $0 ; Trimmed String: "some string"
#
# or
#
# ${Trim} $0 $1 ; Trimmed String, String to Trim
#------------------------------------------------------------------------------
Function Trim
2017-09-12 12:49:20 -06:00
Exch $R1 # Original string
Push $R2
2016-08-08 23:23:04 +00:00
Loop:
StrCpy $R2 "$R1" 1
StrCmp "$R2" " " TrimLeft
StrCmp "$R2" "$\r" TrimLeft
StrCmp "$R2" "$\n" TrimLeft
StrCmp "$R2" "$\t" TrimLeft
GoTo Loop2
TrimLeft:
StrCpy $R1 "$R1" "" 1
Goto Loop
Loop2:
StrCpy $R2 "$R1" 1 -1
StrCmp "$R2" " " TrimRight
StrCmp "$R2" "$\r" TrimRight
StrCmp "$R2" "$\n" TrimRight
StrCmp "$R2" "$\t" TrimRight
GoTo Done
TrimRight:
StrCpy $R1 "$R1" -1
Goto Loop2
Done:
Pop $R2
Exch $R1
FunctionEnd
2017-09-21 14:11:21 -06:00
#------------------------------------------------------------------------------
# Explode Function
# - Splits a string based off the passed separator
# - Each item in the string is pushed to the stack
# - The last item pushed to the stack is the length of the array
#
# Usage:
# Push "," ; Separator
# Push "string,to,separate" ; String to explode
# Call Explode
# Pop $0 ; Number of items in the array
#
# or
#
# ${Explode} $0 $1 $2 ; Length, Separator, String
#------------------------------------------------------------------------------
Function Explode
# Initialize variables
Var /GLOBAL explString
Var /GLOBAL explSeparator
Var /GLOBAL explStrLen
Var /GLOBAL explSepLen
Var /GLOBAL explOffset
Var /GLOBAL explTmp
Var /GLOBAL explTmp2
Var /GLOBAL explTmp3
Var /GLOBAL explArrCount
# Get input from user
Pop $explString
Pop $explSeparator
# Calculates initial values
StrLen $explStrLen $explString
StrLen $explSepLen $explSeparator
StrCpy $explArrCount 1
${If} $explStrLen <= 1 # If we got a single character
${OrIf} $explSepLen > $explStrLen # or separator is larger than the string,
Push $explString # then we return initial string with no change
Push 1 # and set array's length to 1
Return
${EndIf}
# Set offset to the last symbol of the string
StrCpy $explOffset $explStrLen
IntOp $explOffset $explOffset - 1
# Clear temp string to exclude the possibility of appearance of occasional data
StrCpy $explTmp ""
StrCpy $explTmp2 ""
StrCpy $explTmp3 ""
# Loop until the offset becomes negative
${Do}
# If offset becomes negative, it is time to leave the function
${IfThen} $explOffset == -1 ${|} ${ExitDo} ${|}
# Remove everything before and after the searched part ("TempStr")
StrCpy $explTmp $explString $explSepLen $explOffset
${If} $explTmp == $explSeparator
# Calculating offset to start copy from
IntOp $explTmp2 $explOffset + $explSepLen # Offset equals to the current offset plus length of separator
StrCpy $explTmp3 $explString "" $explTmp2
Push $explTmp3 # Throwing array item to the stack
IntOp $explArrCount $explArrCount + 1 # Increasing array's counter
StrCpy $explString $explString $explOffset 0 # Cutting all characters beginning with the separator entry
StrLen $explStrLen $explString
${EndIf}
${If} $explOffset = 0 # If the beginning of the line met and there is no separator,
# copying the rest of the string
${If} $explSeparator == "" # Fix for the empty separator
IntOp $explArrCount $explArrCount - 1
${Else}
Push $explString
${EndIf}
${EndIf}
IntOp $explOffset $explOffset - 1
${Loop}
Push $explArrCount
FunctionEnd
2021-09-24 15:55:24 -06:00
#------------------------------------------------------------------------------
# StrContains
#
# This function does a case sensitive searches for an occurrence of a substring in a string.
# It returns the substring if it is found.
# Otherwise it returns null("").
# Written by kenglish_hi
# Adapted from StrReplace written by dandaman32
#------------------------------------------------------------------------------
Function StrContains
# Initialize variables
Var /GLOBAL STR_HAYSTACK
Var /GLOBAL STR_NEEDLE
Var /GLOBAL STR_CONTAINS_VAR_1
Var /GLOBAL STR_CONTAINS_VAR_2
Var /GLOBAL STR_CONTAINS_VAR_3
Var /GLOBAL STR_CONTAINS_VAR_4
Var /GLOBAL STR_RETURN_VAR
Exch $STR_NEEDLE
Exch 1
Exch $STR_HAYSTACK
# Uncomment to debug
#MessageBox MB_OK 'STR_NEEDLE = $STR_NEEDLE STR_HAYSTACK = $STR_HAYSTACK '
StrCpy $STR_RETURN_VAR ""
StrCpy $STR_CONTAINS_VAR_1 -1
StrLen $STR_CONTAINS_VAR_2 $STR_NEEDLE
StrLen $STR_CONTAINS_VAR_4 $STR_HAYSTACK
loop:
IntOp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_1 + 1
StrCpy $STR_CONTAINS_VAR_3 $STR_HAYSTACK $STR_CONTAINS_VAR_2 $STR_CONTAINS_VAR_1
StrCmp $STR_CONTAINS_VAR_3 $STR_NEEDLE found
StrCmp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_4 done
Goto loop
found:
StrCpy $STR_RETURN_VAR $STR_NEEDLE
Goto done
done:
Pop $STR_NEEDLE # Prevent "invalid opcode" errors and keep the stack clean
Exch $STR_RETURN_VAR
FunctionEnd
2020-05-04 14:24:45 +02:00
#------------------------------------------------------------------------------
# UninstallMSI Function
# - Uninstalls MSI by product code
#
# Usage:
# Push product code
# Call UninstallMSI
#
# Source:
# https://nsis.sourceforge.io/Uninstalling_a_previous_MSI_(Windows_installer_package)
#------------------------------------------------------------------------------
Function UninstallMSI
; $R0 === product code
2021-06-08 10:32:12 -06:00
MessageBox MB_OKCANCEL|MB_ICONINFORMATION \
2020-05-04 14:24:45 +02:00
"${PRODUCT_NAME} is already installed via MSI.$\n$\n\
Click `OK` to remove the existing installation." \
/SD IDOK IDOK UninstallMSI
Abort
UninstallMSI:
2020-05-05 22:13:40 +02:00
ExecWait '"msiexec.exe" /x $R0 /qb /quiet /norestart'
2020-05-04 14:24:45 +02:00
FunctionEnd
2016-08-09 16:49:28 +00:00
###############################################################################
# Specialty Functions
###############################################################################
Function getExistingInstallation
# Try to detect an existing installation. There are three possible scenarios
# 1. Existing New Method Installation
# 2. Existing Old Method Installation
# 3. New Installation
# The results of this function will determine if the user is allowed to set
# the install location in the GUI. If there is an existing installation
# present, the location picker will be grayed out
# This function also sets the RootDir and INSTDIR variables used by the
# installer.
# Reset ExistingInstallation
StrCpy $ExistingInstallation 0
# Get ProgramFiles
# Use RunningX64 here to get the Architecture for the system running the
# installer.
# There are 3 scenarios here:
${If} ${RunningX64}
StrCpy $INSTDIR "$ProgramFiles64\Salt Project\Salt"
${Else}
# 32 bit Salt on 32 bit system (C:\Program Files)
StrCpy $INSTDIR "$ProgramFiles\Salt Project\Salt"
${EndIf}
# This makes the $APPDATA variable point to the ProgramData folder instead
# of the current user's roaming AppData folder
SetShellVarContext all
# Set default location of for salt config
StrCpy $RootDir "$APPDATA\Salt Project\Salt"
# The NSIS installer is a 32bit application and will use the WOW6432Node in
# the registry by default. We need to look in the 64 bit location on 64 bit
# systems
${If} ${RunningX64}
# https://nsis.sourceforge.io/Docs/Chapter4.html#setregview
SetRegView 64 # View the 64 bit portion of the registry
${EndIf}
# Check for existing new method installation from registry
# Look for `install_dir` in HKLM\SOFTWARE\Salt Project\Salt
ReadRegStr $R0 HKLM "SOFTWARE\Salt Project\Salt" "install_dir"
StrCmp $R0 "" checkOldInstallation
StrCpy $ExistingInstallation 1
# Set INSTDIR to the location in the registry
StrCpy $INSTDIR $R0
# Expand any environment variables it contains
ExpandEnvStrings $INSTDIR $INSTDIR
# Set RootDir, if defined
ReadRegStr $R0 HKLM "SOFTWARE\Salt Project\Salt" "root_dir"
StrCmp $R0 "" finished
StrCpy $RootDir $R0
# Expand any environment variables it contains
ExpandEnvStrings $RootDir $RootDir
Goto finished
# Check for existing old method installation
# Look for `python.exe` in C:\salt\bin
checkOldInstallation:
IfFileExists "C:\salt\bin\python.exe" 0 newInstallation
StrCpy $ExistingInstallation 1
StrCpy $INSTDIR "C:\salt"
StrCpy $RootDir "C:\salt"
Goto finished
# This is a new installation
# Check if custom location was passed via command line
newInstallation:
${IfNot} $CustomLocation == ""
StrCpy $INSTDIR $CustomLocation
${EndIf}
finished:
SetRegView 32 # View the 32 bit portion of the registry
FunctionEnd
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Function getExistingMinionConfig
2016-08-08 23:23:04 +00:00
# Set Config Found Default Value
StrCpy $ExistingConfigFound 0
2021-06-08 10:32:12 -06:00
# Find config, should be in $RootDir\conf\minion
# Root dir is usually ProgramData\Salt Project\Salt\conf though it may be
# C:\salt\conf if Salt was installed the old way
2021-09-24 15:55:24 -06:00
IfFileExists "$RootDir\conf\minion" check_owner
2021-06-25 16:08:16 -06:00
IfFileExists "C:\salt\conf\minion" old_location confNotFound
old_location:
StrCpy $RootDir "C:\salt"
2016-08-08 23:23:04 +00:00
Merge 3003.3 into master (#60924) * Merge 3002.6 bugfix changes (#59822) * Pass `CI_RUN` as an environment variable to the test run. This allows us to know if we're running the test suite under a CI environment or not and adapt/adjust if needed * Migrate `unit.setup` to PyTest * Backport ae36b15 just for test_install.py * Only skip tests on CI runs * Always store git sha in _version.py during installation * Fix PEP440 compliance. The wheel metadata version 1.2 states that the package version MUST be PEP440 compliant. This means that instead of `3002.2-511-g033c53eccb`, the salt version string should look like `3002.2+511.g033c53eccb`, a post release of `3002.2` ahead by 511 commits with the git sha `033c53eccb` * Fix and migrate `tests/unit/test_version.py` to PyTest * Skip test if `easy_install` is not available * We also need to be PEP440 compliant when there's no git history * Allow extra_filerefs as sanitized kwargs for SSH client * Fix regression on cmd.run when passing tuples as cmd Co-authored-by: Alexander Graul <agraul@suse.com> * Add unit tests to ensure cmd.run accepts tuples * Add unit test to check for extra_filerefs on SSH opts * Add changelog file * Fix comment for test case * Fix unit test to avoid failing on Windows * Skip failing test on windows * Fix test to work on Windows * Add all ssh kwargs to sanitize_kwargs method * Run pre-commit * Fix pylint * Fix cmdmod loglevel and module_names tests * Fix pre-commit * Skip ssh tests if binary does not exist * Use setup_loader for cmdmod test * Prevent argument injection in restartcheck * Add changelog for restartcheck fix * docs_3002.6 * Add back tests removed in merge Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> * Remove glance state module in favor of glance_image * update wording in changelog * bump deprecation warning to Silicon. * Updating warnutil version to Phosphorous. * Update salt/modules/keystone.py Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Check $HOMEBREW_PREFIX when linking against libcrypto When loading `libcrypto`, Salt checks for a Homebrew installation of `openssl` at Homebrew's default prefix of `/usr/local`. However, on Apple Silicon Macs, Homebrew's default installation prefix is `/opt/homebrew`. On all platforms, the prefix is configurable. If Salt doesn't find one of those `libcrypto`s, it will fall back on the un-versioned `/usr/lib/libcrypto.dylib`, which will cause the following crash: Application Specific Information: /usr/lib/libcrypto.dylib abort() called Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. This commit checks $HOMEBREW_PREFIX instead of hard-coding `/usr/local`. * Add test case * Add changelog for 59808 * Add changelog entry * Make _find_libcrypto fail on Big Sur if it can't find a library Right now, if `_find_libcrypto` can't find any externally-managed versions of libcrypto, it will fall back on the pre-Catalina un-versioned system libcrypto. This does not exist on Big Sur and it would be better to raise an exception here rather than crashing later when trying to open it. * Update _find_libcrypto tests This commit simplifies the unit tests for _find_libcrypto by mocking out the host's filesystem and testing the common libcrypto installations (brew, ports, etc.) on Big Sur. It simplifies the tests for falling back on system versions of libcrypto on previous versions of macOS. * Fix description of test_find_libcrypto_with_system_before_catalina * Patch sys.platform for test_rsax931 tests * modules/match: add missing "minion_id" in Pillar example The documented Pillar example for `match.filter_by` lacks the `minion_id` parameter. Without it, the assignment won't work as expected. - fix documentation - add tests: - to prove the misbehavior of the documented example - to prove the proper behaviour when supplying `minion_id` - to ensure some misbehaviour observed with compound matchers doesn't occur * Fix for issue #59773 - When instantiating the loader grab values of grains and pillars if they are NamedLoaderContext instances. - The loader uses a copy of opts. - Impliment deepcopy on NamedLoaderContext instances. * Add changelog for #59773 * _get_initial_pillar function returns pillar * Fix linter issues * Clean up test * Bump deprecation release for neutron * Uncomment Sulfur release name * Removing the _ext_nodes deprecation warning and alias. * Adding changelog. * Renaming changelog file. * Update 59804.removed * Initial pass at fips_mode config option * Fix pre-commit * Fix tests and add changelog * update docs 3003 * update docs 3003 - newline * Fix warts in changelog * update releasenotes 3003 * add ubuntu-2004-amd64 m2crypto pycryptodome and tcp tests * add distro_arch * changing the cloud platforms file missed in 1a9b7be0e2f300d87924731dc5816fd1000cd22b * Update __utils__ calls to import utils in azure * Add changelog for 59744 * Fix azure unit tests and move to pytest * Use contextvars from site-packages for thin If a contextvars package exists one of the site-packages locations use it for the generated thin tarball. This overrides python's builtin contextvars and allows salt-ssh to work with python <=3.6 even when the master's python is >3.6 (Fixes #59942) * Add regression test for #59942 * Add changelog for #59942 * Update filemap to include test_py_versions * Fix broken thin tests * Always install the `contextvars` backport, even on Py3.7+ Without this change, salt-ssh cannot target systems with Python <= 3.6 * Use salt-factories to handle the container. Don't override default roster * Fix thin tests on windows * No need to use warn log level here * Fix getsitepackages for old virtualenv versions * Add explicit pyobjc reqs * Add back the passthrough stuff * Remove a line so pre-commit will run * Bugfix release docs * Bugfix release docs * Removing pip-compile log files * Bump requirements to address a few security issues * Address traceback on macOS ``` Traceback (most recent call last): File "setup.py", line 1448, in <module> setup(distclass=SaltDistribution) File "/Users/jenkins/setup-tests/.venv/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup return distutils.core.setup(**attrs) File "/opt/salt/lib/python3.7/distutils/core.py", line 108, in setup _setup_distribution = dist = klass(attrs) File "setup.py", line 1068, in __init__ self.update_metadata() File "setup.py", line 1074, in update_metadata attrvalue = getattr(self, attrname, None) File "setup.py", line 1182, in _property_install_requires install_requires += _parse_requirements_file(reqfile) File "setup.py", line 270, in _parse_requirements_file platform.python_version(), _parse_op(op), _parse_ver(ver) File "setup.py", line 247, in _check_ver return getattr(operator, "__{}__".format(op))(pyver, wanted) File "/opt/salt/lib/python3.7/distutils/version.py", line 46, in __eq__ c = self._cmp(other) File "/opt/salt/lib/python3.7/distutils/version.py", line 337, in _cmp if self.version < other.version: TypeError: '<' not supported between instances of 'str' and 'int' ``` * Replace `saltstack.com` with `saltproject.io` on URLs being tested * Add back support to load old entrypoints by iterating instead of type checking Fixes #59961 * Fix issue #59975 * Fix pillar serialization for jinja #60083 * Fix test * Add changelog for #60083 * Update changelog and release for 3003.1 * Remove the changelog source refs * Add connect to IPCMessageSubscriber's async_methods Fixes #60049 by making sure an IPCMessageSubscriber that is wrapped by SyncWrapper has a connect method that runs the coroutine rather than returns a fugure. * Add changelog for #60049 * Update 60049.fixed * Fix coroutine spelling error Co-authored-by: Wayne Werner <waynejwerner@gmail.com> * IPC on windows cannot use socket paths Fixes #60298 * Update Jinja2 and lxml due to security related bugfix releases Jinja2 ------ CVE-2020-28493 moderate severity Vulnerable versions: < 2.11.3 Patched version: 2.11.3 This affects the package jinja2 from 0.0.0 and before 2.11.3. The ReDOS vulnerability of the regex is mainly due to the sub-pattern [a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+ This issue can be mitigated by Markdown to format user content instead of the urlize filter, or by implementing request timeouts and limiting process memory. lxml ---- CVE-2021-28957 moderate severity Vulnerable versions: < 4.6.3 Patched version: 4.6.3 An XSS vulnerability was discovered in the python lxml clean module versions before 4.6.3. When disabling the safe_attrs_only and forms arguments, the Cleaner class does not remove the formaction attribute allowing for JS to bypass the sanitizer. A remote attacker could exploit this flaw to run arbitrary JS code on users who interact with incorrectly sanitized HTML. This issue is patched in lxml 4.6.3. * fix github actions jobs on branch until bullseye comes out * Upgrade to `six==1.16.0` to avoid problems on CI runs ``` 13:59:02 nox > Session invoke-pre-commit was successful. 13:59:02 nox > Running session invoke-pre-commit 13:59:02 nox > pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt 13:59:02 Collecting blessings==1.7 13:59:02 Using cached blessings-1.7-py3-none-any.whl (18 kB) 13:59:02 Collecting invoke==1.4.1 13:59:02 Using cached invoke-1.4.1-py3-none-any.whl (210 kB) 13:59:02 Collecting pyyaml==5.3.1 13:59:02 Using cached PyYAML-5.3.1.tar.gz (269 kB) 13:59:02 Collecting six==1.15.0 13:59:02 Using cached six-1.15.0-py2.py3-none-any.whl (10 kB) 13:59:02 Building wheels for collected packages: pyyaml 13:59:02 Building wheel for pyyaml (setup.py) ... - \ | / - \ | done 13:59:02 Created wheel for pyyaml: filename=PyYAML-5.3.1-cp37-cp37m-linux_x86_64.whl size=546391 sha256=e42e1d66cc32087f4d33ceb81268c86b59f1a97029b19459f91b8d6ad1430167 13:59:02 Stored in directory: /var/jenkins/.cache/pip/wheels/5e/03/1e/e1e954795d6f35dfc7b637fe2277bff021303bd9570ecea653 13:59:02 Successfully built pyyaml 13:59:02 Installing collected packages: six, pyyaml, invoke, blessings 13:59:02 Attempting uninstall: six 13:59:02 Found existing installation: six 1.16.0 13:59:02 Uninstalling six-1.16.0: 13:59:02 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/var/jenkins/.cache/pre-commit/repomw8oee1s/py_env-python3/lib/python3.7/site-packages/__pycache__/six.cpython-37.pyc' 13:59:02 13:59:02 nox > Command pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt failed with exit code 1 13:59:02 nox > Session invoke-pre-commit failed. ``` * add changelog for https://github.com/saltstack/salt/issues/59982 * Regression test for #56273 * Fix race condition in batch. #56273 * Add changelog for #56273 * Update salt/client/__init__.py Co-authored-by: Pedro Algarvio <pedro@algarvio.me> * Update doc for salt/client * Update changelog/56273.fixed Thoreau said, "Simplify, Simplify" * Update docs * Update docs * Update CHANGELOG.md * Update 3003.1.rst * Ignore configuration for 'enable_fqdns_grains' for AIX, Solaris and Juniper * Added changelog * Let Mac OS Mojave run for 8 hours to avoid timeout * Remove FreeBSD-12.2 * Use Popen for VT * Still allow shell True * Drop shlex split * Add crypto re-init * Fix pre-commit * Do not call close in isalive * Skip tests not valid on windows * Cleanup things that are not really needed * We do not support irix * Fix pre-commit * Remove commented out lines * Add changelog for #60504 * Fix pre-commit issues * pyupgrade does not remove six imports * Fix OSErrors in some test cases * Remove un-needed args processing * Make state_running test more reliable * Removing tmpfs from Fedora 33. * Address leaks in fileserver caused by git backends At this time we do not have the ability to fix the upstream memory leaks in the gitfs backend providers. Work around their limitations by periodically restarting the file server update proccess. This will at least partially address #50313 * Remove un-used import * Fix warts caused by black version * Add changelog * We don't need two changelogs * Also pin the ``pip`` upgrade to be ``<21.2`` * Update the external ipaddress to the latest 3.9.5 version which has some security fixes. Updating the compat.p to use the vendored version if the python version is below 3.9.5 and only run the test_ipaddress.py tests if below 3.9.5. * Adding changelog * Requested changes. * Add shh_timeout to ssh_kwargs * move to with blocks * one with block * reight crypto * add back test file * add changelog * change log file number * add m2crypt support * only check m2crpto * Delete 60571.fixed * add back log * add newline * add newline for log file * Work around https://github.com/pypa/pip/pull/9450 See https://github.com/pypa/pip/issues/10212 * Drop six and Py2 * [3003.2] Add server alive (#60573) * add server alive * rename log * change default alive time * add requested changes * format string * reformat string again * run pre * customize * space * remove EOF dead space * fix pre-commit * run pre Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Changelog for 3003.2 * Man pages update for 3003.2 * Allow CVE entries in `changelog/` * Add security type for towncrier changelog * Add security type for changelog entries pre-commit check * Pin to ``pip>=20.2.4,<21.2`` Refs https://github.com/pypa/pip/pull/9450 * Drop six and Py2 * Fix bug introduced in https://github.com/saltstack/salt/pull/59648 Fixes #60046 * Add changelog * Fix doc builds * fix release notes about dropping ubuntu 16.04 * update file client * add changelog file * update changelog * Check permissions of minion config directory * Fix some wording in the messagebox and in comments * Add changelog * Fix extension for changelog * Add missing commas. It also worked, but now is better * docs_3003.3 * fixing version numbers in man pages. * removing newlines. * removing newlines. * Fixing release notes. * Fix changelog file for 3003.2 release * Fix test_state test using loader.context * Re-add test_context test * Allow Local System account, add timestamp * swaping the git-source for vsphere-automation-sdk-python * Remove destroy, handled in context manager Co-authored-by: Daniel Wozniak <dwozniak@saltstack.com> Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@wiked.org> Co-authored-by: Hoa-Long Tam <hoalong@apple.com> Co-authored-by: krionbsd <krion@freebsd.org> Co-authored-by: Elias Probst <e.probst@ssc-services.de> Co-authored-by: Daniel A. Wozniak <dwozniak@vmware.com> Co-authored-by: Frode Gundersen <frogunder@gmail.com> Co-authored-by: twangboy <slee@saltstack.com> Co-authored-by: twangboy <leesh@vmware.com> Co-authored-by: ScriptAutomate <derek@icanteven.io> Co-authored-by: Wayne Werner <waynejwerner@gmail.com> Co-authored-by: David Murphy < dmurphy@saltstack.com> Co-authored-by: Joe Eacott <jeacott@vmware.com> Co-authored-by: cmcmarrow <charles.mcmarrow.4@gmail.com> Co-authored-by: Twangboy <shane.d.lee@gmail.com>
2021-09-22 20:42:38 -04:00
check_owner:
# We need to verify the owner of the config directory (C:\salt\conf) to
# ensure the config has not been modified by an unknown user. The
# permissions and ownership of the directories is determined by the
# installer used to install Salt. The NullSoft installer requests Admin
# privileges so all directories are created with the Administrators
# Group (S-1-5-32-544) as the owner. The MSI installer, however, runs in
# the context of the Windows Installer service (msiserver), therefore
# all directories are created with the Local System account (S-1-5-18)
# as the owner.
#
# When Salt is launched it sets the root_dir (C:\salt) permissions as
# follows:
# - Owner: Administrators
# - Allow Perms:
# - Owner: Full Control
# - System: Full Control
# - Administrators: Full Control
#
# The conf_dir (C:\salt\conf) inherits Allow/Deny permissions from the
# parent, but NOT Ownership. The owner will be the Administrators Group
# if it was installed via NullSoft or the Local System account if it was
# installed via the MSI. Therefore valid owners for the conf_dir are
# both the Administrators group and the Local System account.
#
# An unprivileged account cannot change the owner of a directory by
# default. So, if the owner of the conf_dir is either the Administrators
# group or the Local System account, then we will trust it. Otherwise,
# we will display an option to abort the installation or to backup the
# untrusted config directory and continue with the default config. If
# running the install with the silent option (/S) it will backup the
# untrusted config directory and continue with the default config.
2021-06-08 10:32:12 -06:00
AccessControl::GetFileOwner /SID "$RootDir\conf"
Merge 3003.3 into master (#60924) * Merge 3002.6 bugfix changes (#59822) * Pass `CI_RUN` as an environment variable to the test run. This allows us to know if we're running the test suite under a CI environment or not and adapt/adjust if needed * Migrate `unit.setup` to PyTest * Backport ae36b15 just for test_install.py * Only skip tests on CI runs * Always store git sha in _version.py during installation * Fix PEP440 compliance. The wheel metadata version 1.2 states that the package version MUST be PEP440 compliant. This means that instead of `3002.2-511-g033c53eccb`, the salt version string should look like `3002.2+511.g033c53eccb`, a post release of `3002.2` ahead by 511 commits with the git sha `033c53eccb` * Fix and migrate `tests/unit/test_version.py` to PyTest * Skip test if `easy_install` is not available * We also need to be PEP440 compliant when there's no git history * Allow extra_filerefs as sanitized kwargs for SSH client * Fix regression on cmd.run when passing tuples as cmd Co-authored-by: Alexander Graul <agraul@suse.com> * Add unit tests to ensure cmd.run accepts tuples * Add unit test to check for extra_filerefs on SSH opts * Add changelog file * Fix comment for test case * Fix unit test to avoid failing on Windows * Skip failing test on windows * Fix test to work on Windows * Add all ssh kwargs to sanitize_kwargs method * Run pre-commit * Fix pylint * Fix cmdmod loglevel and module_names tests * Fix pre-commit * Skip ssh tests if binary does not exist * Use setup_loader for cmdmod test * Prevent argument injection in restartcheck * Add changelog for restartcheck fix * docs_3002.6 * Add back tests removed in merge Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> * Remove glance state module in favor of glance_image * update wording in changelog * bump deprecation warning to Silicon. * Updating warnutil version to Phosphorous. * Update salt/modules/keystone.py Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Check $HOMEBREW_PREFIX when linking against libcrypto When loading `libcrypto`, Salt checks for a Homebrew installation of `openssl` at Homebrew's default prefix of `/usr/local`. However, on Apple Silicon Macs, Homebrew's default installation prefix is `/opt/homebrew`. On all platforms, the prefix is configurable. If Salt doesn't find one of those `libcrypto`s, it will fall back on the un-versioned `/usr/lib/libcrypto.dylib`, which will cause the following crash: Application Specific Information: /usr/lib/libcrypto.dylib abort() called Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. This commit checks $HOMEBREW_PREFIX instead of hard-coding `/usr/local`. * Add test case * Add changelog for 59808 * Add changelog entry * Make _find_libcrypto fail on Big Sur if it can't find a library Right now, if `_find_libcrypto` can't find any externally-managed versions of libcrypto, it will fall back on the pre-Catalina un-versioned system libcrypto. This does not exist on Big Sur and it would be better to raise an exception here rather than crashing later when trying to open it. * Update _find_libcrypto tests This commit simplifies the unit tests for _find_libcrypto by mocking out the host's filesystem and testing the common libcrypto installations (brew, ports, etc.) on Big Sur. It simplifies the tests for falling back on system versions of libcrypto on previous versions of macOS. * Fix description of test_find_libcrypto_with_system_before_catalina * Patch sys.platform for test_rsax931 tests * modules/match: add missing "minion_id" in Pillar example The documented Pillar example for `match.filter_by` lacks the `minion_id` parameter. Without it, the assignment won't work as expected. - fix documentation - add tests: - to prove the misbehavior of the documented example - to prove the proper behaviour when supplying `minion_id` - to ensure some misbehaviour observed with compound matchers doesn't occur * Fix for issue #59773 - When instantiating the loader grab values of grains and pillars if they are NamedLoaderContext instances. - The loader uses a copy of opts. - Impliment deepcopy on NamedLoaderContext instances. * Add changelog for #59773 * _get_initial_pillar function returns pillar * Fix linter issues * Clean up test * Bump deprecation release for neutron * Uncomment Sulfur release name * Removing the _ext_nodes deprecation warning and alias. * Adding changelog. * Renaming changelog file. * Update 59804.removed * Initial pass at fips_mode config option * Fix pre-commit * Fix tests and add changelog * update docs 3003 * update docs 3003 - newline * Fix warts in changelog * update releasenotes 3003 * add ubuntu-2004-amd64 m2crypto pycryptodome and tcp tests * add distro_arch * changing the cloud platforms file missed in 1a9b7be0e2f300d87924731dc5816fd1000cd22b * Update __utils__ calls to import utils in azure * Add changelog for 59744 * Fix azure unit tests and move to pytest * Use contextvars from site-packages for thin If a contextvars package exists one of the site-packages locations use it for the generated thin tarball. This overrides python's builtin contextvars and allows salt-ssh to work with python <=3.6 even when the master's python is >3.6 (Fixes #59942) * Add regression test for #59942 * Add changelog for #59942 * Update filemap to include test_py_versions * Fix broken thin tests * Always install the `contextvars` backport, even on Py3.7+ Without this change, salt-ssh cannot target systems with Python <= 3.6 * Use salt-factories to handle the container. Don't override default roster * Fix thin tests on windows * No need to use warn log level here * Fix getsitepackages for old virtualenv versions * Add explicit pyobjc reqs * Add back the passthrough stuff * Remove a line so pre-commit will run * Bugfix release docs * Bugfix release docs * Removing pip-compile log files * Bump requirements to address a few security issues * Address traceback on macOS ``` Traceback (most recent call last): File "setup.py", line 1448, in <module> setup(distclass=SaltDistribution) File "/Users/jenkins/setup-tests/.venv/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup return distutils.core.setup(**attrs) File "/opt/salt/lib/python3.7/distutils/core.py", line 108, in setup _setup_distribution = dist = klass(attrs) File "setup.py", line 1068, in __init__ self.update_metadata() File "setup.py", line 1074, in update_metadata attrvalue = getattr(self, attrname, None) File "setup.py", line 1182, in _property_install_requires install_requires += _parse_requirements_file(reqfile) File "setup.py", line 270, in _parse_requirements_file platform.python_version(), _parse_op(op), _parse_ver(ver) File "setup.py", line 247, in _check_ver return getattr(operator, "__{}__".format(op))(pyver, wanted) File "/opt/salt/lib/python3.7/distutils/version.py", line 46, in __eq__ c = self._cmp(other) File "/opt/salt/lib/python3.7/distutils/version.py", line 337, in _cmp if self.version < other.version: TypeError: '<' not supported between instances of 'str' and 'int' ``` * Replace `saltstack.com` with `saltproject.io` on URLs being tested * Add back support to load old entrypoints by iterating instead of type checking Fixes #59961 * Fix issue #59975 * Fix pillar serialization for jinja #60083 * Fix test * Add changelog for #60083 * Update changelog and release for 3003.1 * Remove the changelog source refs * Add connect to IPCMessageSubscriber's async_methods Fixes #60049 by making sure an IPCMessageSubscriber that is wrapped by SyncWrapper has a connect method that runs the coroutine rather than returns a fugure. * Add changelog for #60049 * Update 60049.fixed * Fix coroutine spelling error Co-authored-by: Wayne Werner <waynejwerner@gmail.com> * IPC on windows cannot use socket paths Fixes #60298 * Update Jinja2 and lxml due to security related bugfix releases Jinja2 ------ CVE-2020-28493 moderate severity Vulnerable versions: < 2.11.3 Patched version: 2.11.3 This affects the package jinja2 from 0.0.0 and before 2.11.3. The ReDOS vulnerability of the regex is mainly due to the sub-pattern [a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+ This issue can be mitigated by Markdown to format user content instead of the urlize filter, or by implementing request timeouts and limiting process memory. lxml ---- CVE-2021-28957 moderate severity Vulnerable versions: < 4.6.3 Patched version: 4.6.3 An XSS vulnerability was discovered in the python lxml clean module versions before 4.6.3. When disabling the safe_attrs_only and forms arguments, the Cleaner class does not remove the formaction attribute allowing for JS to bypass the sanitizer. A remote attacker could exploit this flaw to run arbitrary JS code on users who interact with incorrectly sanitized HTML. This issue is patched in lxml 4.6.3. * fix github actions jobs on branch until bullseye comes out * Upgrade to `six==1.16.0` to avoid problems on CI runs ``` 13:59:02 nox > Session invoke-pre-commit was successful. 13:59:02 nox > Running session invoke-pre-commit 13:59:02 nox > pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt 13:59:02 Collecting blessings==1.7 13:59:02 Using cached blessings-1.7-py3-none-any.whl (18 kB) 13:59:02 Collecting invoke==1.4.1 13:59:02 Using cached invoke-1.4.1-py3-none-any.whl (210 kB) 13:59:02 Collecting pyyaml==5.3.1 13:59:02 Using cached PyYAML-5.3.1.tar.gz (269 kB) 13:59:02 Collecting six==1.15.0 13:59:02 Using cached six-1.15.0-py2.py3-none-any.whl (10 kB) 13:59:02 Building wheels for collected packages: pyyaml 13:59:02 Building wheel for pyyaml (setup.py) ... - \ | / - \ | done 13:59:02 Created wheel for pyyaml: filename=PyYAML-5.3.1-cp37-cp37m-linux_x86_64.whl size=546391 sha256=e42e1d66cc32087f4d33ceb81268c86b59f1a97029b19459f91b8d6ad1430167 13:59:02 Stored in directory: /var/jenkins/.cache/pip/wheels/5e/03/1e/e1e954795d6f35dfc7b637fe2277bff021303bd9570ecea653 13:59:02 Successfully built pyyaml 13:59:02 Installing collected packages: six, pyyaml, invoke, blessings 13:59:02 Attempting uninstall: six 13:59:02 Found existing installation: six 1.16.0 13:59:02 Uninstalling six-1.16.0: 13:59:02 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/var/jenkins/.cache/pre-commit/repomw8oee1s/py_env-python3/lib/python3.7/site-packages/__pycache__/six.cpython-37.pyc' 13:59:02 13:59:02 nox > Command pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt failed with exit code 1 13:59:02 nox > Session invoke-pre-commit failed. ``` * add changelog for https://github.com/saltstack/salt/issues/59982 * Regression test for #56273 * Fix race condition in batch. #56273 * Add changelog for #56273 * Update salt/client/__init__.py Co-authored-by: Pedro Algarvio <pedro@algarvio.me> * Update doc for salt/client * Update changelog/56273.fixed Thoreau said, "Simplify, Simplify" * Update docs * Update docs * Update CHANGELOG.md * Update 3003.1.rst * Ignore configuration for 'enable_fqdns_grains' for AIX, Solaris and Juniper * Added changelog * Let Mac OS Mojave run for 8 hours to avoid timeout * Remove FreeBSD-12.2 * Use Popen for VT * Still allow shell True * Drop shlex split * Add crypto re-init * Fix pre-commit * Do not call close in isalive * Skip tests not valid on windows * Cleanup things that are not really needed * We do not support irix * Fix pre-commit * Remove commented out lines * Add changelog for #60504 * Fix pre-commit issues * pyupgrade does not remove six imports * Fix OSErrors in some test cases * Remove un-needed args processing * Make state_running test more reliable * Removing tmpfs from Fedora 33. * Address leaks in fileserver caused by git backends At this time we do not have the ability to fix the upstream memory leaks in the gitfs backend providers. Work around their limitations by periodically restarting the file server update proccess. This will at least partially address #50313 * Remove un-used import * Fix warts caused by black version * Add changelog * We don't need two changelogs * Also pin the ``pip`` upgrade to be ``<21.2`` * Update the external ipaddress to the latest 3.9.5 version which has some security fixes. Updating the compat.p to use the vendored version if the python version is below 3.9.5 and only run the test_ipaddress.py tests if below 3.9.5. * Adding changelog * Requested changes. * Add shh_timeout to ssh_kwargs * move to with blocks * one with block * reight crypto * add back test file * add changelog * change log file number * add m2crypt support * only check m2crpto * Delete 60571.fixed * add back log * add newline * add newline for log file * Work around https://github.com/pypa/pip/pull/9450 See https://github.com/pypa/pip/issues/10212 * Drop six and Py2 * [3003.2] Add server alive (#60573) * add server alive * rename log * change default alive time * add requested changes * format string * reformat string again * run pre * customize * space * remove EOF dead space * fix pre-commit * run pre Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Changelog for 3003.2 * Man pages update for 3003.2 * Allow CVE entries in `changelog/` * Add security type for towncrier changelog * Add security type for changelog entries pre-commit check * Pin to ``pip>=20.2.4,<21.2`` Refs https://github.com/pypa/pip/pull/9450 * Drop six and Py2 * Fix bug introduced in https://github.com/saltstack/salt/pull/59648 Fixes #60046 * Add changelog * Fix doc builds * fix release notes about dropping ubuntu 16.04 * update file client * add changelog file * update changelog * Check permissions of minion config directory * Fix some wording in the messagebox and in comments * Add changelog * Fix extension for changelog * Add missing commas. It also worked, but now is better * docs_3003.3 * fixing version numbers in man pages. * removing newlines. * removing newlines. * Fixing release notes. * Fix changelog file for 3003.2 release * Fix test_state test using loader.context * Re-add test_context test * Allow Local System account, add timestamp * swaping the git-source for vsphere-automation-sdk-python * Remove destroy, handled in context manager Co-authored-by: Daniel Wozniak <dwozniak@saltstack.com> Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@wiked.org> Co-authored-by: Hoa-Long Tam <hoalong@apple.com> Co-authored-by: krionbsd <krion@freebsd.org> Co-authored-by: Elias Probst <e.probst@ssc-services.de> Co-authored-by: Daniel A. Wozniak <dwozniak@vmware.com> Co-authored-by: Frode Gundersen <frogunder@gmail.com> Co-authored-by: twangboy <slee@saltstack.com> Co-authored-by: twangboy <leesh@vmware.com> Co-authored-by: ScriptAutomate <derek@icanteven.io> Co-authored-by: Wayne Werner <waynejwerner@gmail.com> Co-authored-by: David Murphy < dmurphy@saltstack.com> Co-authored-by: Joe Eacott <jeacott@vmware.com> Co-authored-by: cmcmarrow <charles.mcmarrow.4@gmail.com> Co-authored-by: Twangboy <shane.d.lee@gmail.com>
2021-09-22 20:42:38 -04:00
Pop $0
# Check for valid SIDs
StrCmp $0 "S-1-5-32-544" correct_owner # Administrators Group (NullSoft)
StrCmp $0 "S-1-5-18" correct_owner # Local System (MSI)
MessageBox MB_YESNO \
"Insecure config found at $RootDir\conf. If you continue, the \
config directory will be renamed to $RootDir\conf.insecure \
and the default config will be used. Continue?" \
/SD IDYES IDYES insecure_config
Merge 3003.3 into master (#60924) * Merge 3002.6 bugfix changes (#59822) * Pass `CI_RUN` as an environment variable to the test run. This allows us to know if we're running the test suite under a CI environment or not and adapt/adjust if needed * Migrate `unit.setup` to PyTest * Backport ae36b15 just for test_install.py * Only skip tests on CI runs * Always store git sha in _version.py during installation * Fix PEP440 compliance. The wheel metadata version 1.2 states that the package version MUST be PEP440 compliant. This means that instead of `3002.2-511-g033c53eccb`, the salt version string should look like `3002.2+511.g033c53eccb`, a post release of `3002.2` ahead by 511 commits with the git sha `033c53eccb` * Fix and migrate `tests/unit/test_version.py` to PyTest * Skip test if `easy_install` is not available * We also need to be PEP440 compliant when there's no git history * Allow extra_filerefs as sanitized kwargs for SSH client * Fix regression on cmd.run when passing tuples as cmd Co-authored-by: Alexander Graul <agraul@suse.com> * Add unit tests to ensure cmd.run accepts tuples * Add unit test to check for extra_filerefs on SSH opts * Add changelog file * Fix comment for test case * Fix unit test to avoid failing on Windows * Skip failing test on windows * Fix test to work on Windows * Add all ssh kwargs to sanitize_kwargs method * Run pre-commit * Fix pylint * Fix cmdmod loglevel and module_names tests * Fix pre-commit * Skip ssh tests if binary does not exist * Use setup_loader for cmdmod test * Prevent argument injection in restartcheck * Add changelog for restartcheck fix * docs_3002.6 * Add back tests removed in merge Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> * Remove glance state module in favor of glance_image * update wording in changelog * bump deprecation warning to Silicon. * Updating warnutil version to Phosphorous. * Update salt/modules/keystone.py Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Check $HOMEBREW_PREFIX when linking against libcrypto When loading `libcrypto`, Salt checks for a Homebrew installation of `openssl` at Homebrew's default prefix of `/usr/local`. However, on Apple Silicon Macs, Homebrew's default installation prefix is `/opt/homebrew`. On all platforms, the prefix is configurable. If Salt doesn't find one of those `libcrypto`s, it will fall back on the un-versioned `/usr/lib/libcrypto.dylib`, which will cause the following crash: Application Specific Information: /usr/lib/libcrypto.dylib abort() called Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. This commit checks $HOMEBREW_PREFIX instead of hard-coding `/usr/local`. * Add test case * Add changelog for 59808 * Add changelog entry * Make _find_libcrypto fail on Big Sur if it can't find a library Right now, if `_find_libcrypto` can't find any externally-managed versions of libcrypto, it will fall back on the pre-Catalina un-versioned system libcrypto. This does not exist on Big Sur and it would be better to raise an exception here rather than crashing later when trying to open it. * Update _find_libcrypto tests This commit simplifies the unit tests for _find_libcrypto by mocking out the host's filesystem and testing the common libcrypto installations (brew, ports, etc.) on Big Sur. It simplifies the tests for falling back on system versions of libcrypto on previous versions of macOS. * Fix description of test_find_libcrypto_with_system_before_catalina * Patch sys.platform for test_rsax931 tests * modules/match: add missing "minion_id" in Pillar example The documented Pillar example for `match.filter_by` lacks the `minion_id` parameter. Without it, the assignment won't work as expected. - fix documentation - add tests: - to prove the misbehavior of the documented example - to prove the proper behaviour when supplying `minion_id` - to ensure some misbehaviour observed with compound matchers doesn't occur * Fix for issue #59773 - When instantiating the loader grab values of grains and pillars if they are NamedLoaderContext instances. - The loader uses a copy of opts. - Impliment deepcopy on NamedLoaderContext instances. * Add changelog for #59773 * _get_initial_pillar function returns pillar * Fix linter issues * Clean up test * Bump deprecation release for neutron * Uncomment Sulfur release name * Removing the _ext_nodes deprecation warning and alias. * Adding changelog. * Renaming changelog file. * Update 59804.removed * Initial pass at fips_mode config option * Fix pre-commit * Fix tests and add changelog * update docs 3003 * update docs 3003 - newline * Fix warts in changelog * update releasenotes 3003 * add ubuntu-2004-amd64 m2crypto pycryptodome and tcp tests * add distro_arch * changing the cloud platforms file missed in 1a9b7be0e2f300d87924731dc5816fd1000cd22b * Update __utils__ calls to import utils in azure * Add changelog for 59744 * Fix azure unit tests and move to pytest * Use contextvars from site-packages for thin If a contextvars package exists one of the site-packages locations use it for the generated thin tarball. This overrides python's builtin contextvars and allows salt-ssh to work with python <=3.6 even when the master's python is >3.6 (Fixes #59942) * Add regression test for #59942 * Add changelog for #59942 * Update filemap to include test_py_versions * Fix broken thin tests * Always install the `contextvars` backport, even on Py3.7+ Without this change, salt-ssh cannot target systems with Python <= 3.6 * Use salt-factories to handle the container. Don't override default roster * Fix thin tests on windows * No need to use warn log level here * Fix getsitepackages for old virtualenv versions * Add explicit pyobjc reqs * Add back the passthrough stuff * Remove a line so pre-commit will run * Bugfix release docs * Bugfix release docs * Removing pip-compile log files * Bump requirements to address a few security issues * Address traceback on macOS ``` Traceback (most recent call last): File "setup.py", line 1448, in <module> setup(distclass=SaltDistribution) File "/Users/jenkins/setup-tests/.venv/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup return distutils.core.setup(**attrs) File "/opt/salt/lib/python3.7/distutils/core.py", line 108, in setup _setup_distribution = dist = klass(attrs) File "setup.py", line 1068, in __init__ self.update_metadata() File "setup.py", line 1074, in update_metadata attrvalue = getattr(self, attrname, None) File "setup.py", line 1182, in _property_install_requires install_requires += _parse_requirements_file(reqfile) File "setup.py", line 270, in _parse_requirements_file platform.python_version(), _parse_op(op), _parse_ver(ver) File "setup.py", line 247, in _check_ver return getattr(operator, "__{}__".format(op))(pyver, wanted) File "/opt/salt/lib/python3.7/distutils/version.py", line 46, in __eq__ c = self._cmp(other) File "/opt/salt/lib/python3.7/distutils/version.py", line 337, in _cmp if self.version < other.version: TypeError: '<' not supported between instances of 'str' and 'int' ``` * Replace `saltstack.com` with `saltproject.io` on URLs being tested * Add back support to load old entrypoints by iterating instead of type checking Fixes #59961 * Fix issue #59975 * Fix pillar serialization for jinja #60083 * Fix test * Add changelog for #60083 * Update changelog and release for 3003.1 * Remove the changelog source refs * Add connect to IPCMessageSubscriber's async_methods Fixes #60049 by making sure an IPCMessageSubscriber that is wrapped by SyncWrapper has a connect method that runs the coroutine rather than returns a fugure. * Add changelog for #60049 * Update 60049.fixed * Fix coroutine spelling error Co-authored-by: Wayne Werner <waynejwerner@gmail.com> * IPC on windows cannot use socket paths Fixes #60298 * Update Jinja2 and lxml due to security related bugfix releases Jinja2 ------ CVE-2020-28493 moderate severity Vulnerable versions: < 2.11.3 Patched version: 2.11.3 This affects the package jinja2 from 0.0.0 and before 2.11.3. The ReDOS vulnerability of the regex is mainly due to the sub-pattern [a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+ This issue can be mitigated by Markdown to format user content instead of the urlize filter, or by implementing request timeouts and limiting process memory. lxml ---- CVE-2021-28957 moderate severity Vulnerable versions: < 4.6.3 Patched version: 4.6.3 An XSS vulnerability was discovered in the python lxml clean module versions before 4.6.3. When disabling the safe_attrs_only and forms arguments, the Cleaner class does not remove the formaction attribute allowing for JS to bypass the sanitizer. A remote attacker could exploit this flaw to run arbitrary JS code on users who interact with incorrectly sanitized HTML. This issue is patched in lxml 4.6.3. * fix github actions jobs on branch until bullseye comes out * Upgrade to `six==1.16.0` to avoid problems on CI runs ``` 13:59:02 nox > Session invoke-pre-commit was successful. 13:59:02 nox > Running session invoke-pre-commit 13:59:02 nox > pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt 13:59:02 Collecting blessings==1.7 13:59:02 Using cached blessings-1.7-py3-none-any.whl (18 kB) 13:59:02 Collecting invoke==1.4.1 13:59:02 Using cached invoke-1.4.1-py3-none-any.whl (210 kB) 13:59:02 Collecting pyyaml==5.3.1 13:59:02 Using cached PyYAML-5.3.1.tar.gz (269 kB) 13:59:02 Collecting six==1.15.0 13:59:02 Using cached six-1.15.0-py2.py3-none-any.whl (10 kB) 13:59:02 Building wheels for collected packages: pyyaml 13:59:02 Building wheel for pyyaml (setup.py) ... - \ | / - \ | done 13:59:02 Created wheel for pyyaml: filename=PyYAML-5.3.1-cp37-cp37m-linux_x86_64.whl size=546391 sha256=e42e1d66cc32087f4d33ceb81268c86b59f1a97029b19459f91b8d6ad1430167 13:59:02 Stored in directory: /var/jenkins/.cache/pip/wheels/5e/03/1e/e1e954795d6f35dfc7b637fe2277bff021303bd9570ecea653 13:59:02 Successfully built pyyaml 13:59:02 Installing collected packages: six, pyyaml, invoke, blessings 13:59:02 Attempting uninstall: six 13:59:02 Found existing installation: six 1.16.0 13:59:02 Uninstalling six-1.16.0: 13:59:02 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/var/jenkins/.cache/pre-commit/repomw8oee1s/py_env-python3/lib/python3.7/site-packages/__pycache__/six.cpython-37.pyc' 13:59:02 13:59:02 nox > Command pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt failed with exit code 1 13:59:02 nox > Session invoke-pre-commit failed. ``` * add changelog for https://github.com/saltstack/salt/issues/59982 * Regression test for #56273 * Fix race condition in batch. #56273 * Add changelog for #56273 * Update salt/client/__init__.py Co-authored-by: Pedro Algarvio <pedro@algarvio.me> * Update doc for salt/client * Update changelog/56273.fixed Thoreau said, "Simplify, Simplify" * Update docs * Update docs * Update CHANGELOG.md * Update 3003.1.rst * Ignore configuration for 'enable_fqdns_grains' for AIX, Solaris and Juniper * Added changelog * Let Mac OS Mojave run for 8 hours to avoid timeout * Remove FreeBSD-12.2 * Use Popen for VT * Still allow shell True * Drop shlex split * Add crypto re-init * Fix pre-commit * Do not call close in isalive * Skip tests not valid on windows * Cleanup things that are not really needed * We do not support irix * Fix pre-commit * Remove commented out lines * Add changelog for #60504 * Fix pre-commit issues * pyupgrade does not remove six imports * Fix OSErrors in some test cases * Remove un-needed args processing * Make state_running test more reliable * Removing tmpfs from Fedora 33. * Address leaks in fileserver caused by git backends At this time we do not have the ability to fix the upstream memory leaks in the gitfs backend providers. Work around their limitations by periodically restarting the file server update proccess. This will at least partially address #50313 * Remove un-used import * Fix warts caused by black version * Add changelog * We don't need two changelogs * Also pin the ``pip`` upgrade to be ``<21.2`` * Update the external ipaddress to the latest 3.9.5 version which has some security fixes. Updating the compat.p to use the vendored version if the python version is below 3.9.5 and only run the test_ipaddress.py tests if below 3.9.5. * Adding changelog * Requested changes. * Add shh_timeout to ssh_kwargs * move to with blocks * one with block * reight crypto * add back test file * add changelog * change log file number * add m2crypt support * only check m2crpto * Delete 60571.fixed * add back log * add newline * add newline for log file * Work around https://github.com/pypa/pip/pull/9450 See https://github.com/pypa/pip/issues/10212 * Drop six and Py2 * [3003.2] Add server alive (#60573) * add server alive * rename log * change default alive time * add requested changes * format string * reformat string again * run pre * customize * space * remove EOF dead space * fix pre-commit * run pre Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Changelog for 3003.2 * Man pages update for 3003.2 * Allow CVE entries in `changelog/` * Add security type for towncrier changelog * Add security type for changelog entries pre-commit check * Pin to ``pip>=20.2.4,<21.2`` Refs https://github.com/pypa/pip/pull/9450 * Drop six and Py2 * Fix bug introduced in https://github.com/saltstack/salt/pull/59648 Fixes #60046 * Add changelog * Fix doc builds * fix release notes about dropping ubuntu 16.04 * update file client * add changelog file * update changelog * Check permissions of minion config directory * Fix some wording in the messagebox and in comments * Add changelog * Fix extension for changelog * Add missing commas. It also worked, but now is better * docs_3003.3 * fixing version numbers in man pages. * removing newlines. * removing newlines. * Fixing release notes. * Fix changelog file for 3003.2 release * Fix test_state test using loader.context * Re-add test_context test * Allow Local System account, add timestamp * swaping the git-source for vsphere-automation-sdk-python * Remove destroy, handled in context manager Co-authored-by: Daniel Wozniak <dwozniak@saltstack.com> Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@wiked.org> Co-authored-by: Hoa-Long Tam <hoalong@apple.com> Co-authored-by: krionbsd <krion@freebsd.org> Co-authored-by: Elias Probst <e.probst@ssc-services.de> Co-authored-by: Daniel A. Wozniak <dwozniak@vmware.com> Co-authored-by: Frode Gundersen <frogunder@gmail.com> Co-authored-by: twangboy <slee@saltstack.com> Co-authored-by: twangboy <leesh@vmware.com> Co-authored-by: ScriptAutomate <derek@icanteven.io> Co-authored-by: Wayne Werner <waynejwerner@gmail.com> Co-authored-by: David Murphy < dmurphy@saltstack.com> Co-authored-by: Joe Eacott <jeacott@vmware.com> Co-authored-by: cmcmarrow <charles.mcmarrow.4@gmail.com> Co-authored-by: Twangboy <shane.d.lee@gmail.com>
2021-09-22 20:42:38 -04:00
Abort
insecure_config:
# Backing up insecure config
2021-06-08 10:32:12 -06:00
Rename "$RootDir\conf" "$RootDir\conf.insecure-${TIME_STAMP}"
Goto confNotFound
Merge 3003.3 into master (#60924) * Merge 3002.6 bugfix changes (#59822) * Pass `CI_RUN` as an environment variable to the test run. This allows us to know if we're running the test suite under a CI environment or not and adapt/adjust if needed * Migrate `unit.setup` to PyTest * Backport ae36b15 just for test_install.py * Only skip tests on CI runs * Always store git sha in _version.py during installation * Fix PEP440 compliance. The wheel metadata version 1.2 states that the package version MUST be PEP440 compliant. This means that instead of `3002.2-511-g033c53eccb`, the salt version string should look like `3002.2+511.g033c53eccb`, a post release of `3002.2` ahead by 511 commits with the git sha `033c53eccb` * Fix and migrate `tests/unit/test_version.py` to PyTest * Skip test if `easy_install` is not available * We also need to be PEP440 compliant when there's no git history * Allow extra_filerefs as sanitized kwargs for SSH client * Fix regression on cmd.run when passing tuples as cmd Co-authored-by: Alexander Graul <agraul@suse.com> * Add unit tests to ensure cmd.run accepts tuples * Add unit test to check for extra_filerefs on SSH opts * Add changelog file * Fix comment for test case * Fix unit test to avoid failing on Windows * Skip failing test on windows * Fix test to work on Windows * Add all ssh kwargs to sanitize_kwargs method * Run pre-commit * Fix pylint * Fix cmdmod loglevel and module_names tests * Fix pre-commit * Skip ssh tests if binary does not exist * Use setup_loader for cmdmod test * Prevent argument injection in restartcheck * Add changelog for restartcheck fix * docs_3002.6 * Add back tests removed in merge Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> * Remove glance state module in favor of glance_image * update wording in changelog * bump deprecation warning to Silicon. * Updating warnutil version to Phosphorous. * Update salt/modules/keystone.py Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Check $HOMEBREW_PREFIX when linking against libcrypto When loading `libcrypto`, Salt checks for a Homebrew installation of `openssl` at Homebrew's default prefix of `/usr/local`. However, on Apple Silicon Macs, Homebrew's default installation prefix is `/opt/homebrew`. On all platforms, the prefix is configurable. If Salt doesn't find one of those `libcrypto`s, it will fall back on the un-versioned `/usr/lib/libcrypto.dylib`, which will cause the following crash: Application Specific Information: /usr/lib/libcrypto.dylib abort() called Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. This commit checks $HOMEBREW_PREFIX instead of hard-coding `/usr/local`. * Add test case * Add changelog for 59808 * Add changelog entry * Make _find_libcrypto fail on Big Sur if it can't find a library Right now, if `_find_libcrypto` can't find any externally-managed versions of libcrypto, it will fall back on the pre-Catalina un-versioned system libcrypto. This does not exist on Big Sur and it would be better to raise an exception here rather than crashing later when trying to open it. * Update _find_libcrypto tests This commit simplifies the unit tests for _find_libcrypto by mocking out the host's filesystem and testing the common libcrypto installations (brew, ports, etc.) on Big Sur. It simplifies the tests for falling back on system versions of libcrypto on previous versions of macOS. * Fix description of test_find_libcrypto_with_system_before_catalina * Patch sys.platform for test_rsax931 tests * modules/match: add missing "minion_id" in Pillar example The documented Pillar example for `match.filter_by` lacks the `minion_id` parameter. Without it, the assignment won't work as expected. - fix documentation - add tests: - to prove the misbehavior of the documented example - to prove the proper behaviour when supplying `minion_id` - to ensure some misbehaviour observed with compound matchers doesn't occur * Fix for issue #59773 - When instantiating the loader grab values of grains and pillars if they are NamedLoaderContext instances. - The loader uses a copy of opts. - Impliment deepcopy on NamedLoaderContext instances. * Add changelog for #59773 * _get_initial_pillar function returns pillar * Fix linter issues * Clean up test * Bump deprecation release for neutron * Uncomment Sulfur release name * Removing the _ext_nodes deprecation warning and alias. * Adding changelog. * Renaming changelog file. * Update 59804.removed * Initial pass at fips_mode config option * Fix pre-commit * Fix tests and add changelog * update docs 3003 * update docs 3003 - newline * Fix warts in changelog * update releasenotes 3003 * add ubuntu-2004-amd64 m2crypto pycryptodome and tcp tests * add distro_arch * changing the cloud platforms file missed in 1a9b7be0e2f300d87924731dc5816fd1000cd22b * Update __utils__ calls to import utils in azure * Add changelog for 59744 * Fix azure unit tests and move to pytest * Use contextvars from site-packages for thin If a contextvars package exists one of the site-packages locations use it for the generated thin tarball. This overrides python's builtin contextvars and allows salt-ssh to work with python <=3.6 even when the master's python is >3.6 (Fixes #59942) * Add regression test for #59942 * Add changelog for #59942 * Update filemap to include test_py_versions * Fix broken thin tests * Always install the `contextvars` backport, even on Py3.7+ Without this change, salt-ssh cannot target systems with Python <= 3.6 * Use salt-factories to handle the container. Don't override default roster * Fix thin tests on windows * No need to use warn log level here * Fix getsitepackages for old virtualenv versions * Add explicit pyobjc reqs * Add back the passthrough stuff * Remove a line so pre-commit will run * Bugfix release docs * Bugfix release docs * Removing pip-compile log files * Bump requirements to address a few security issues * Address traceback on macOS ``` Traceback (most recent call last): File "setup.py", line 1448, in <module> setup(distclass=SaltDistribution) File "/Users/jenkins/setup-tests/.venv/lib/python3.7/site-packages/setuptools/__init__.py", line 153, in setup return distutils.core.setup(**attrs) File "/opt/salt/lib/python3.7/distutils/core.py", line 108, in setup _setup_distribution = dist = klass(attrs) File "setup.py", line 1068, in __init__ self.update_metadata() File "setup.py", line 1074, in update_metadata attrvalue = getattr(self, attrname, None) File "setup.py", line 1182, in _property_install_requires install_requires += _parse_requirements_file(reqfile) File "setup.py", line 270, in _parse_requirements_file platform.python_version(), _parse_op(op), _parse_ver(ver) File "setup.py", line 247, in _check_ver return getattr(operator, "__{}__".format(op))(pyver, wanted) File "/opt/salt/lib/python3.7/distutils/version.py", line 46, in __eq__ c = self._cmp(other) File "/opt/salt/lib/python3.7/distutils/version.py", line 337, in _cmp if self.version < other.version: TypeError: '<' not supported between instances of 'str' and 'int' ``` * Replace `saltstack.com` with `saltproject.io` on URLs being tested * Add back support to load old entrypoints by iterating instead of type checking Fixes #59961 * Fix issue #59975 * Fix pillar serialization for jinja #60083 * Fix test * Add changelog for #60083 * Update changelog and release for 3003.1 * Remove the changelog source refs * Add connect to IPCMessageSubscriber's async_methods Fixes #60049 by making sure an IPCMessageSubscriber that is wrapped by SyncWrapper has a connect method that runs the coroutine rather than returns a fugure. * Add changelog for #60049 * Update 60049.fixed * Fix coroutine spelling error Co-authored-by: Wayne Werner <waynejwerner@gmail.com> * IPC on windows cannot use socket paths Fixes #60298 * Update Jinja2 and lxml due to security related bugfix releases Jinja2 ------ CVE-2020-28493 moderate severity Vulnerable versions: < 2.11.3 Patched version: 2.11.3 This affects the package jinja2 from 0.0.0 and before 2.11.3. The ReDOS vulnerability of the regex is mainly due to the sub-pattern [a-zA-Z0-9.-]+.[a-zA-Z0-9.-]+ This issue can be mitigated by Markdown to format user content instead of the urlize filter, or by implementing request timeouts and limiting process memory. lxml ---- CVE-2021-28957 moderate severity Vulnerable versions: < 4.6.3 Patched version: 4.6.3 An XSS vulnerability was discovered in the python lxml clean module versions before 4.6.3. When disabling the safe_attrs_only and forms arguments, the Cleaner class does not remove the formaction attribute allowing for JS to bypass the sanitizer. A remote attacker could exploit this flaw to run arbitrary JS code on users who interact with incorrectly sanitized HTML. This issue is patched in lxml 4.6.3. * fix github actions jobs on branch until bullseye comes out * Upgrade to `six==1.16.0` to avoid problems on CI runs ``` 13:59:02 nox > Session invoke-pre-commit was successful. 13:59:02 nox > Running session invoke-pre-commit 13:59:02 nox > pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt 13:59:02 Collecting blessings==1.7 13:59:02 Using cached blessings-1.7-py3-none-any.whl (18 kB) 13:59:02 Collecting invoke==1.4.1 13:59:02 Using cached invoke-1.4.1-py3-none-any.whl (210 kB) 13:59:02 Collecting pyyaml==5.3.1 13:59:02 Using cached PyYAML-5.3.1.tar.gz (269 kB) 13:59:02 Collecting six==1.15.0 13:59:02 Using cached six-1.15.0-py2.py3-none-any.whl (10 kB) 13:59:02 Building wheels for collected packages: pyyaml 13:59:02 Building wheel for pyyaml (setup.py) ... - \ | / - \ | done 13:59:02 Created wheel for pyyaml: filename=PyYAML-5.3.1-cp37-cp37m-linux_x86_64.whl size=546391 sha256=e42e1d66cc32087f4d33ceb81268c86b59f1a97029b19459f91b8d6ad1430167 13:59:02 Stored in directory: /var/jenkins/.cache/pip/wheels/5e/03/1e/e1e954795d6f35dfc7b637fe2277bff021303bd9570ecea653 13:59:02 Successfully built pyyaml 13:59:02 Installing collected packages: six, pyyaml, invoke, blessings 13:59:02 Attempting uninstall: six 13:59:02 Found existing installation: six 1.16.0 13:59:02 Uninstalling six-1.16.0: 13:59:02 ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/var/jenkins/.cache/pre-commit/repomw8oee1s/py_env-python3/lib/python3.7/site-packages/__pycache__/six.cpython-37.pyc' 13:59:02 13:59:02 nox > Command pip install --progress-bar=off -r requirements/static/ci/py3.7/invoke.txt failed with exit code 1 13:59:02 nox > Session invoke-pre-commit failed. ``` * add changelog for https://github.com/saltstack/salt/issues/59982 * Regression test for #56273 * Fix race condition in batch. #56273 * Add changelog for #56273 * Update salt/client/__init__.py Co-authored-by: Pedro Algarvio <pedro@algarvio.me> * Update doc for salt/client * Update changelog/56273.fixed Thoreau said, "Simplify, Simplify" * Update docs * Update docs * Update CHANGELOG.md * Update 3003.1.rst * Ignore configuration for 'enable_fqdns_grains' for AIX, Solaris and Juniper * Added changelog * Let Mac OS Mojave run for 8 hours to avoid timeout * Remove FreeBSD-12.2 * Use Popen for VT * Still allow shell True * Drop shlex split * Add crypto re-init * Fix pre-commit * Do not call close in isalive * Skip tests not valid on windows * Cleanup things that are not really needed * We do not support irix * Fix pre-commit * Remove commented out lines * Add changelog for #60504 * Fix pre-commit issues * pyupgrade does not remove six imports * Fix OSErrors in some test cases * Remove un-needed args processing * Make state_running test more reliable * Removing tmpfs from Fedora 33. * Address leaks in fileserver caused by git backends At this time we do not have the ability to fix the upstream memory leaks in the gitfs backend providers. Work around their limitations by periodically restarting the file server update proccess. This will at least partially address #50313 * Remove un-used import * Fix warts caused by black version * Add changelog * We don't need two changelogs * Also pin the ``pip`` upgrade to be ``<21.2`` * Update the external ipaddress to the latest 3.9.5 version which has some security fixes. Updating the compat.p to use the vendored version if the python version is below 3.9.5 and only run the test_ipaddress.py tests if below 3.9.5. * Adding changelog * Requested changes. * Add shh_timeout to ssh_kwargs * move to with blocks * one with block * reight crypto * add back test file * add changelog * change log file number * add m2crypt support * only check m2crpto * Delete 60571.fixed * add back log * add newline * add newline for log file * Work around https://github.com/pypa/pip/pull/9450 See https://github.com/pypa/pip/issues/10212 * Drop six and Py2 * [3003.2] Add server alive (#60573) * add server alive * rename log * change default alive time * add requested changes * format string * reformat string again * run pre * customize * space * remove EOF dead space * fix pre-commit * run pre Co-authored-by: Megan Wilhite <megan.wilhite@gmail.com> * Changelog for 3003.2 * Man pages update for 3003.2 * Allow CVE entries in `changelog/` * Add security type for towncrier changelog * Add security type for changelog entries pre-commit check * Pin to ``pip>=20.2.4,<21.2`` Refs https://github.com/pypa/pip/pull/9450 * Drop six and Py2 * Fix bug introduced in https://github.com/saltstack/salt/pull/59648 Fixes #60046 * Add changelog * Fix doc builds * fix release notes about dropping ubuntu 16.04 * update file client * add changelog file * update changelog * Check permissions of minion config directory * Fix some wording in the messagebox and in comments * Add changelog * Fix extension for changelog * Add missing commas. It also worked, but now is better * docs_3003.3 * fixing version numbers in man pages. * removing newlines. * removing newlines. * Fixing release notes. * Fix changelog file for 3003.2 release * Fix test_state test using loader.context * Re-add test_context test * Allow Local System account, add timestamp * swaping the git-source for vsphere-automation-sdk-python * Remove destroy, handled in context manager Co-authored-by: Daniel Wozniak <dwozniak@saltstack.com> Co-authored-by: Pedro Algarvio <pedro@algarvio.me> Co-authored-by: Bryce Larson <brycel@vmware.com> Co-authored-by: Pablo Suárez Hernández <psuarezhernandez@suse.com> Co-authored-by: Alexander Graul <agraul@suse.com> Co-authored-by: Frode Gundersen <fgundersen@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@saltstack.com> Co-authored-by: Gareth J. Greenaway <gareth@wiked.org> Co-authored-by: Hoa-Long Tam <hoalong@apple.com> Co-authored-by: krionbsd <krion@freebsd.org> Co-authored-by: Elias Probst <e.probst@ssc-services.de> Co-authored-by: Daniel A. Wozniak <dwozniak@vmware.com> Co-authored-by: Frode Gundersen <frogunder@gmail.com> Co-authored-by: twangboy <slee@saltstack.com> Co-authored-by: twangboy <leesh@vmware.com> Co-authored-by: ScriptAutomate <derek@icanteven.io> Co-authored-by: Wayne Werner <waynejwerner@gmail.com> Co-authored-by: David Murphy < dmurphy@saltstack.com> Co-authored-by: Joe Eacott <jeacott@vmware.com> Co-authored-by: cmcmarrow <charles.mcmarrow.4@gmail.com> Co-authored-by: Twangboy <shane.d.lee@gmail.com>
2021-09-22 20:42:38 -04:00
correct_owner:
StrCpy $ExistingConfigFound 1
2021-06-08 10:32:12 -06:00
FileOpen $0 "$RootDir\conf\minion" r
2016-08-08 23:23:04 +00:00
confLoop:
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
ClearErrors # clear Errors
FileRead $0 $1 # read the next line
IfErrors EndOfFile # error is probably EOF
${StrLoc} $2 $1 "master:" ">" # find `master:` starting at the beginning
${If} $2 == 0 # if it found it in the first position, then it is defined
${StrStrAdv} $2 $1 "master: " ">" ">" "0" "0" "0" # read everything after `master: `
${Trim} $2 $2 # trim white space
${If} $2 == "" # if it's empty, it's probably a list of masters
masterLoop:
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
ClearErrors # clear Errors
FileRead $0 $1 # read the next line
IfErrors EndOfFile # error is probably EOF
${StrStrAdv} $2 $1 "- " ">" ">" "0" "0" "0" # read everything after `- `
${Trim} $2 $2 # trim white space
${IfNot} $2 == "" # if the line is not empty, we found something
2021-06-25 16:08:16 -06:00
${If} $MasterHost_Cfg == "" # if the config setting is empty
StrCpy $MasterHost_Cfg $2 # make the first item the new entry
${Else}
2021-06-25 16:08:16 -06:00
StrCpy $MasterHost_Cfg "$MasterHost_Cfg,$2" # Append the new master, comma separated
${EndIf}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Goto masterLoop # check the next one
${EndIf}
${Else}
2021-06-25 16:08:16 -06:00
StrCpy $MasterHost_Cfg $2 # a single master entry
2016-08-08 23:23:04 +00:00
${EndIf}
${EndIf}
2016-08-08 23:23:04 +00:00
${StrLoc} $2 $1 "id:" ">"
${If} $2 == 0
${StrStrAdv} $2 $1 "id: " ">" ">" "0" "0" "0"
${Trim} $2 $2
2021-06-25 16:08:16 -06:00
StrCpy $MinionName_Cfg $2
2016-08-08 23:23:04 +00:00
${EndIf}
Goto confLoop
EndOfFile:
FileClose $0
2021-06-08 10:32:12 -06:00
confNotFound:
2016-08-08 23:23:04 +00:00
# Set Default Config Values if not found
2021-06-25 16:08:16 -06:00
${If} $MasterHost_Cfg == ""
StrCpy $MasterHost_Cfg "salt"
${EndIf}
2021-06-25 16:08:16 -06:00
${If} $MinionName_Cfg == ""
StrCpy $MinionName_Cfg "hostname"
${EndIf}
2016-08-08 23:23:04 +00:00
FunctionEnd
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Var cfg_line
Var chk_line
Var lst_check
2016-08-08 23:23:04 +00:00
Function updateMinionConfig
ClearErrors
2021-06-08 10:32:12 -06:00
FileOpen $0 "$RootDir\conf\minion" "r" # open target file for reading
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
GetTempFileName $R0 # get new temp file name
FileOpen $1 $R0 "w" # open temp file for writing
StrCpy $ConfigWriteMaster 1 # write the master config value
StrCpy $ConfigWriteMinion 1 # write the minion config value
loop: # loop through each line
FileRead $0 $cfg_line # read line from target file
IfErrors done # end if errors are encountered (end of line)
loop_after_read:
StrCpy $lst_check 0 # list check not performed
2021-06-25 16:08:16 -06:00
${If} $MasterHost == "" # if master is empty
${OrIf} $MasterHost == "salt" # or if master is 'salt'
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
StrCpy $ConfigWriteMaster 0 # no need to write master config
${EndIf} # close if statement
2021-06-25 16:08:16 -06:00
${If} $MinionName == "" # if minion is empty
${OrIf} $MinionName == "hostname" # and if minion is not 'hostname'
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
StrCpy $ConfigWriteMinion 0 # no need to write minion config
${EndIf} # close if statement
${If} $ConfigWriteMaster == 1 # if we need to write master config
${StrLoc} $3 $cfg_line "master:" ">" # where is 'master:' in this line
${If} $3 == 0 # is it in the first...
${OrIf} $3 == 1 # or second position (account for comments)
${Explode} $9 "," $MasterHost # Split the hostname on commas, $9 is the number of items found
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${If} $9 == 1 # 1 means only a single master was passed
2021-06-25 16:08:16 -06:00
StrCpy $cfg_line "master: $MasterHost$\r$\n" # write the master
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Else} # make a multi-master entry
StrCpy $cfg_line "master:" # make the first line "master:"
loop_explode: # start a loop to go through the list in the config
pop $8 # pop the next item off the stack
${Trim} $8 $8 # trim any whitespace
StrCpy $cfg_line "$cfg_line$\r$\n - $8" # add it to the master variable ($2)
IntOp $9 $9 - 1 # decrement the list count
${If} $9 >= 1 # if it's not 0
Goto loop_explode # do it again
${EndIf} # close if statement
StrCpy $cfg_line "$cfg_line$\r$\n" # Make sure there's a new line at the end
# Remove remaining items in list
${While} $lst_check == 0 # while list item found
FileRead $0 $chk_line # read line from target file
IfErrors done # end if errors are encountered (end of line)
${StrLoc} $3 $chk_line " - " ">" # where is 'master:' in this line
${If} $3 == "" # is it in the first...
StrCpy $lst_check 1 # list check performed and finished
${EndIf}
${EndWhile}
${EndIf} # close if statement
StrCpy $ConfigWriteMaster 0 # master value written to config
${EndIf} # close if statement
${EndIf} # close if statement
${If} $ConfigWriteMinion == 1 # if we need to write minion config
${StrLoc} $3 $cfg_line "id:" ">" # where is 'id:' in this line
${If} $3 == 0 # is it in the first...
${OrIf} $3 == 1 # or the second position (account for comments)
2021-06-25 16:08:16 -06:00
StrCpy $cfg_line "id: $MinionName$\r$\n" # write the minion config setting
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
StrCpy $ConfigWriteMinion 0 # minion value written to config
${EndIf} # close if statement
${EndIf} # close if statement
FileWrite $1 $cfg_line # write changed or unchanged line to temp file
${If} $lst_check == 1 # master not written to the config
StrCpy $cfg_line $chk_line
Goto loop_after_read # A loop was performed, skip the next read
${EndIf} # close if statement
Goto loop # check the next line in the config file
2016-08-08 23:23:04 +00:00
done:
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
ClearErrors
# Does master config still need to be written
${If} $ConfigWriteMaster == 1 # master not written to the config
${Explode} $9 "," $MasterHost # split the hostname on commas, $9 is the number of items found
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${If} $9 == 1 # 1 means only a single master was passed
2021-06-25 16:08:16 -06:00
StrCpy $cfg_line "master: $MasterHost" # write the master
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${Else} # make a multi-master entry
StrCpy $cfg_line "master:" # make the first line "master:"
loop_explode_2: # start a loop to go through the list in the config
pop $8 # pop the next item off the stack
${Trim} $8 $8 # trim any whitespace
StrCpy $cfg_line "$cfg_line$\r$\n - $8" # add it to the master variable ($2)
IntOp $9 $9 - 1 # decrement the list count
${If} $9 >= 1 # if it's not 0
Goto loop_explode_2 # do it again
${EndIf} # close if statement
${EndIf} # close if statement
FileWrite $1 $cfg_line # write changed or unchanged line to temp file
${EndIf} # close if statement
${If} $ConfigWriteMinion == 1 # minion ID not written to the config
2021-06-25 16:08:16 -06:00
StrCpy $cfg_line "$\r$\nid: $MinionName" # write the minion config setting
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
FileWrite $1 $cfg_line # write changed or unchanged line to temp file
${EndIf} # close if statement
FileClose $0 # close target file
FileClose $1 # close temp file
2021-06-08 10:32:12 -06:00
Delete "$RootDir\conf\minion" # delete target file
CopyFiles /SILENT $R0 "$RootDir\conf\minion" # copy temp file to target file
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
Delete $R0 # delete temp file
2016-08-08 23:23:04 +00:00
FunctionEnd
2021-06-08 10:32:12 -06:00
Function un.parseUninstallerCommandLineSwitches
# Load the parameters
${GetParameters} $R0
# Display Help
ClearErrors
${GetOptions} $R0 "/?" $R1
IfErrors display_un_help_not_found
# Using a message box here
# I couldn't get the console output to work with the uninstaller
MessageBox MB_OK \
"Help for Salt Minion Uninstallation\
$\n\
$\n==============================================\
$\n\
$\n/delete-install-dir$\tDelete the installation directory that contains the\
$\n$\t$\tconfig and pki directories. Default is to not delete\
$\n$\t$\tthe installation directory\
$\n\
$\n$\t$\tThis applies to old method installations where\
$\n$\t$\tthe root directory and the installation directory\
$\n$\t$\tare the same (C:\salt)\
$\n\
$\n/delete-root-dir$\tDelete the root directory that contains the config\
2023-08-23 14:14:57 -06:00
$\n$\t$\tand pki directories. Also removes the installation directory\
$\n$\t$\tincluding the extras directory. Default is to not delete\
$\n\
$\n$\t$\tThis applies to new method installations where the\
$\n$\t$\troot directory is in ProgramData and the installation\
$\n$\t$\tdirectory is user defined, usually Program Files\
$\n\
$\n/S$\t$\tUninstall Salt silently\
$\n\
$\n/?$\t$\tDisplay this help screen\
$\n\
$\n--------------------------------------------------------------------------------------------\
$\n\
$\nExamples:\
$\n\
$\n$\tuninst.exe /S\
$\n\
$\n$\tuninst.exe /S /delete-root-dir\
$\n\
$\n=============================================="
2021-06-08 10:32:12 -06:00
Abort
2021-06-08 10:32:12 -06:00
display_un_help_not_found:
# Load the parameters
${GetParameters} $R0
# Uninstaller: Remove Installation Directory
ClearErrors
${GetOptions} $R0 "/delete-install-dir" $R1
IfErrors delete_install_dir_not_found
StrCpy $DeleteInstallDir 1
2021-06-08 10:32:12 -06:00
delete_install_dir_not_found:
# Uninstaller: Remove Root Directory
ClearErrors
${GetOptions} $R0 "/delete-root-dir" $R1
IfErrors delete_root_dir_not_found
StrCpy $DeleteRootDir 1
2021-06-08 10:32:12 -06:00
delete_root_dir_not_found:
FunctionEnd
Function parseInstallerCommandLineSwitches
2016-08-08 23:23:04 +00:00
2017-09-12 12:49:20 -06:00
# Load the parameters
2016-08-08 23:23:04 +00:00
${GetParameters} $R0
# Display Help
ClearErrors
${GetOptions} $R0 "/?" $R1
IfErrors display_help_not_found
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
System::Call 'kernel32::AttachConsole(i -1)i.r1'
${If} $0 = 0
${OrIf} $1 = 0
System::Call 'kernel32::AllocConsole()'
System::Call 'kernel32::GetStdHandle(i -11)i.r0'
${EndIf}
FileWrite $0 "$\n"
FileWrite $0 "$\n"
FileWrite $0 "Help for Salt Minion installation$\n"
FileWrite $0 "===============================================================================$\n"
FileWrite $0 "$\n"
FileWrite $0 "/minion-name=$\t$\tA string value to set the minion name. Default value is$\n"
FileWrite $0 "$\t$\t$\t'hostname'. Setting the minion name causes the installer$\n"
FileWrite $0 "$\t$\t$\tto use the default config or a custom config if defined$\n"
FileWrite $0 "$\n"
FileWrite $0 "/master=$\t$\tA string value to set the IP address or hostname of the$\n"
FileWrite $0 "$\t$\t$\tmaster. Default value is 'salt'. You may pass a single$\n"
FileWrite $0 "$\t$\t$\tmaster or a comma-separated list of masters. Setting$\n"
FileWrite $0 "$\t$\t$\tthe master will cause the installer to use the default$\n"
FileWrite $0 "$\t$\t$\tconfig or a custom config if defined$\n"
FileWrite $0 "$\n"
FileWrite $0 "/start-minion=$\t$\t1 will start the minion service, 0 will not.$\n"
FileWrite $0 "$\t$\t$\tDefault is 1$\n"
FileWrite $0 "$\n"
FileWrite $0 "/start-minion-delayed$\tSet the minion start type to 'Automatic (Delayed Start)'$\n"
FileWrite $0 "$\n"
FileWrite $0 "/default-config$\t$\tOverwrite the existing config if present with the$\n"
FileWrite $0 "$\t$\t$\tdefault config for salt. Default is to use the existing$\n"
FileWrite $0 "$\t$\t$\tconfig if present. If /master and/or /minion-name is$\n"
FileWrite $0 "$\t$\t$\tpassed, those values will be used to update the new$\n"
FileWrite $0 "$\t$\t$\tdefault config$\n"
FileWrite $0 "$\n"
FileWrite $0 "$\t$\t$\tAny existing config will be backed up by appending$\n"
FileWrite $0 "$\t$\t$\ta timestamp and a .bak extension. That includes$\n"
FileWrite $0 "$\t$\t$\tthe minion file and the minion.d directory$\n"
FileWrite $0 "$\n"
FileWrite $0 "/custom-config=$\t$\tA string value specifying the name of a custom config$\n"
FileWrite $0 "$\t$\t$\tfile in the same path as the installer or the full path$\n"
FileWrite $0 "$\t$\t$\tto a custom config file. If /master and/or /minion-name$\n"
FileWrite $0 "$\t$\t$\tis passed, those values will be used to update the new$\n"
FileWrite $0 "$\t$\t$\tcustom config$\n"
FileWrite $0 "$\n"
FileWrite $0 "$\t$\t$\tAny existing config will be backed up by appending$\n"
FileWrite $0 "$\t$\t$\ta timestamp and a .bak extension. That includes$\n"
FileWrite $0 "$\t$\t$\tthe minion file and the minion.d directory$\n"
FileWrite $0 "$\n"
FileWrite $0 "/install-dir=$\t$\tSpecify the installation location for the Salt binaries.$\n"
FileWrite $0 "$\t$\t$\tThis will be ignored for existing installations.$\n"
FileWrite $0 "$\n"
FileWrite $0 "/move-config$\t$\tIf config is found at C:\salt it will be moved to %ProgramData%$\n"
FileWrite $0 "$\n"
FileWrite $0 "/S$\t$\t$\tInstall Salt silently$\n"
FileWrite $0 "$\n"
FileWrite $0 "/?$\t$\t$\tDisplay this help screen$\n"
FileWrite $0 "$\n"
FileWrite $0 "-------------------------------------------------------------------------------$\n"
FileWrite $0 "$\n"
FileWrite $0 "Examples:$\n"
FileWrite $0 "$\n"
FileWrite $0 " $EXEFILE /S$\n"
FileWrite $0 "$\n"
FileWrite $0 " $EXEFILE /S /minion-name=myminion /master=master.mydomain.com /start-minion-delayed$\n"
FileWrite $0 "$\n"
FileWrite $0 " $EXEFILE /S /minion-name=myminion /master=master.mydomain.com /install-dir=$\"C:\Software\salt$\"$\n"
FileWrite $0 "$\n"
FileWrite $0 "===============================================================================$\n"
FileWrite $0 "$\n"
System::Free $0
System::Free $1
System::Call 'kernel32::FreeConsole()'
# Give the user back the prompt
!define VK_RETURN 0x0D ; Enter Key
!define KEYEVENTF_EXTENDEDKEY 0x0001
!define KEYEVENTF_KEYUP 0x0002
System::Call "user32::keybd_event(i${VK_RETURN}, i0x45, i${KEYEVENTF_EXTENDEDKEY}|0, i0)"
System::Call "user32::keybd_event(i${VK_RETURN}, i0x45, i${KEYEVENTF_EXTENDEDKEY}|${KEYEVENTF_KEYUP}, i0)"
Abort
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
display_help_not_found:
# Set default value for Use Existing Config
2021-06-25 16:08:16 -06:00
StrCpy $ConfigType "Existing Config"
2017-09-12 12:49:20 -06:00
# Check for start-minion switches
# /start-service is to be deprecated, so we must check for both
2016-08-08 23:23:04 +00:00
${GetOptions} $R0 "/start-service=" $R1
${GetOptions} $R0 "/start-minion=" $R2
# Service: Start Salt Minion
${IfNot} $R2 == ""
2017-09-12 12:49:20 -06:00
# If start-minion was passed something, then set it
2016-08-08 23:23:04 +00:00
StrCpy $StartMinion $R2
${ElseIfNot} $R1 == ""
2017-09-12 12:49:20 -06:00
# If start-service was passed something, then set StartMinion to that
2016-08-08 23:23:04 +00:00
StrCpy $StartMinion $R1
MessageBox MB_OK|MB_ICONINFORMATION \
"`/start-service` is being deprecated. Please use `/start-minion` \
instead." /SD IDOK
2016-08-08 23:23:04 +00:00
${Else}
2017-09-12 12:49:20 -06:00
# Otherwise default to 1
2016-08-08 23:23:04 +00:00
StrCpy $StartMinion 1
${EndIf}
2017-03-31 15:12:41 -06:00
# Service: Minion Startup Type Delayed
2017-09-12 12:49:20 -06:00
ClearErrors
${GetOptions} $R0 "/start-minion-delayed" $R1
IfErrors start_minion_delayed_not_found
StrCpy $StartMinionDelayed 1
start_minion_delayed_not_found:
2016-08-08 23:23:04 +00:00
# Minion Config: Master IP/Name
# If setting master, we don't want to use existing config
2016-08-08 23:23:04 +00:00
${GetOptions} $R0 "/master=" $R1
${IfNot} $R1 == ""
2021-06-25 16:08:16 -06:00
StrCpy $MasterHost $R1
StrCpy $ConfigType "Default Config"
${ElseIf} $MasterHost == ""
StrCpy $MasterHost "salt"
2016-08-08 23:23:04 +00:00
${EndIf}
# Minion Config: Minion ID
# If setting minion id, we don't want to use existing config
2016-08-08 23:23:04 +00:00
${GetOptions} $R0 "/minion-name=" $R1
${IfNot} $R1 == ""
2021-06-25 16:08:16 -06:00
StrCpy $MinionName $R1
StrCpy $ConfigType "Default Config"
${ElseIf} $MinionName == ""
StrCpy $MinionName "hostname"
2016-08-08 23:23:04 +00:00
${EndIf}
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Use Default Config
2021-06-08 10:32:12 -06:00
ClearErrors
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
${GetOptions} $R0 "/default-config" $R1
IfErrors default_config_not_found
StrCpy $ConfigType "Default Config"
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
default_config_not_found:
# Use Custom Config
# Set default value for Use Custom Config
2021-06-25 16:08:16 -06:00
StrCpy $CustomConfig ""
Add ability to pass custom config - Adds `/custom-config=` switch where you can pass the name of the custom config file that resides in the same directory as the installer or the full path to a custom config in another location - Changes from using `/use-existing-config` to `/default-config` since existing config is default anyway - If you pass a minion or master setting, the default is to use the default config - Passing minion or master settins will modify the default config or the custom config - Changed from using a checkbox to denote existing config to a drop down box to denote the type of config to use. Options are `Default Config`, `Existing Config`, and `Custom Config` - `Existing Config` is only added to the drop down if an existing config is found on the system. - Adds a file picker to the config dialog that allows you to browse to the custom config. The file picker is only displayed when the config type is `Custom Config` - Improves the writing of multimaster settings to the default or custom config. If multimaster is configured in the custom config and the user passes multiple master settings those settings are written properly - If there is an existing config and the config type is NOT `Existing Config`, the existing config is backed up (given the .bak extension) instead of deleted. This includes the `minion.d` directory. - If "/custom-config` is passed from the command line but the specified file does not exist, the installer just ends instead of uninstalling salt. (This is for Silent installations) - If the Config Specified in the GUI does not exist, the installer will not continue until a valid file is specified. - Changes the `/passive` switch in the vcredist installation to `/quiet` for installation on headless systems.
2017-12-19 10:28:52 -07:00
# Existing config will get a `.bak` extension
${GetOptions} $R0 "/custom-config=" $R1
${IfNot} $R1 == ""
2021-06-08 10:32:12 -06:00
# A Custom Config was passed, set it
2021-06-25 16:08:16 -06:00
StrCpy $CustomConfig $R1
StrCpy $ConfigType "Custom Config"
${EndIf}
2021-06-08 10:32:12 -06:00
# Set Install Location
ClearErrors
${GetOptions} $R0 "/install-dir=" $R1
2021-06-08 10:32:12 -06:00
${IfNot} $R1 == ""
# A Custom Location was passed, set it
StrCpy $CustomLocation $R1
${EndIf}
2021-06-25 16:08:16 -06:00
# Set Move Config Option
ClearErrors
${GetOptions} $R0 "/move-config" $R1
IfErrors move_config_not_found
StrCpy $MoveExistingConfig 1
2021-06-25 16:08:16 -06:00
move_config_not_found:
2016-08-08 23:23:04 +00:00
FunctionEnd