SaltStack Master-less Beginnings
14 April 2015
I recently worked on an installed SaltStack environment which was installed by someone who no longer works for the company. SaltStack is used to configure our Hyper-V virtual machines.
Covered here is my experience based an a couple of days of limited knowledge of reading the SaltStack docs and looking at our local States and WinRepo repository. This is definitely not a guide but just some notes I captured while taking a break from banging my head against the brick wall.
Create your Windows virtual machine
Working with Windows is awkward so you can't just use your favourite provisioning tool like vagrant to get started. You have to build a Windows Virtual Machine by hand (grin and bear it I'm afraid). I have an MSDN subscription so I can download ISO's and get licence keys. If you are not fortunate to have an MSDN subscription you can download evaluations here: https://www.microsoft.com/en-us/evalcenter/
Although possible to run Salt minion master-less on your local machine I recommend a virtual environment (Hyper-V for me; VirtualBox if you are looking) so that you can snapshot before running any Salt States; and restore if necessary. You don't want to destroy your local environment and install software that you do not want.
Install Salt Minion
See Installing Salt Minion to download and installed.
Ensure to set your Salt-Minion service is stopped and disabled after installation.
stop-service salt-minion
set-service salt-minion -StartupType disabled
Clone the SaltStates and WinRepo repository
I cloned my two repositories to:
C:\salty\saltstack-states
C:\salty\saltstack-winrepo
Modify SaltMaster Config
Below are the changes I made to c:\salt\conf\minion
file_client: local
win_gitrepos:
- C:/salty/saltstack-winrepo
win_repo: C:/salty/saltstack-winrepo
win_repo_cachefile: 'C:/salty/foo/winrepo.p'
grains:
node_type: devwindows
When you satisfied everything is configured, you need to generate winrepo.p
My winrepo backs onto a local artifactory repository which is storing our required artefacts.
> salt-call winrepo.genrepo
repo:
----------
7zip:
----------
9.20.00.0:
----------
full_name:
7-Zip 9.20 (x64 edition)
install_flags:
/q
installer:
http://artifacts/simple/vendor-local/7Zip/9.20/7z920-x64.msi
msiexec:
True
reboot:
False
uninstall_flags:
/qn
uninstaller:
http://artifacts/simple/vendor-local/7Zip/9.20/7z920-x64.msi
WindowsSDK:
----------
7.1.7600.0.30514:
----------
full_name:
Microsoft Windows SDK for Windows 7 (7.1)
install_flags:
-q -params:ADDLOCAL=ALL
installer:
C:\windows_sdk_7_1_files\setup.exe
msiexec:
False
reboot:
False
buildtools:
----------
12.0.21005.1:
----------
full_name:
Microsoft Build Tools 2013
install_flags:
/quiet /norestart
installer:
http://artifacts/simple/vendor-local/Microsoft/BuildTools/2013/BuildTools-2013.exe
msiexec:
False
reboot:
False
uninstall_flags:
/uninstall /quiet /norestart
uninstaller:
http://artifacts/simple/vendor-local/Microsoft/BuildTools/2013/BuildTools-2013.exe
Above is just a sample of the output. When successful you'll see a Json like structure of your WinRepo in the output.
A simple grain
I modified the top.sls file and added my own grain.
'node_type:devwindows':
- match: grain
- 7zip
I followed the matching grains example: http://docs.saltstack.com/en/latest/topics/targeting/grains.html#matching-grains-in-the-top-file
I executed salt-call state.highstate
and 7-Zip got installed.
This means I can test my States, Pillars and my Grains without destroying the environment by committing malformed YAML files!