On 10/20/20 9:06 PM, David Hobach wrote:
>>> Thank you very much!
>>
>> I also got this running, thanks!
>>
>> However when I run
>>
>> qubesctl --all --show-output state.highstate saltenv=user
>>
>> I get for my states:
>> State 'qvm.present' was not found in SLS 'mysls'
>> Reason: 'qvm.present' is not available.
>>
>> I guess the custom qvm.* states are not available in the /srv/user_salt folder, but only in /srv/salt?
>>
>> Is there any way to make them available in /srv/user_salt as well?
>>
>> Side Note: I ran `qubesctl --show-output state.sls qubes.user-dirs` to obtain the folders.
For reference I got it running with symlinks this way:
#!/bin/bash
#
# Run the salt configuration of _this_ folder in dom0.
#
# Assumes that you have `user_[formulas|pillar|salt]` directories in _this_ folder.
#
# NOTE: If even `sudo qubesctl top.enabled` failed for you, you can try re-installing `qubes-mgmt-salt-* salt salt-minion`
# (first via `sudo qubes-dom0-update`, then via `sudo dnf reinstall`.
set -e -o pipefail
[[ "$(whoami)" != "root" ]] && >&2 echo "This script must be run as root." && exit 1
#path of this directory (hopefully...)
SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
#saltModSymlink [target]
function saltModSymlink {
local target="$1"
local tpath="/srv/user_salt/$target"
rm -f "$tpath"
ln -s "/srv/salt/$target" "$tpath"
}
#create user_ symlinks @/srv/ for the saltenv=user (explicitly configured by Qubes OS)
echo "Creating user_ symlinks in /srv/..."
for file in "$SCRIPT_DIR"/* ; do
if [ -d "$file" ] && [[ "$file" == *"user_"* ]] ; then
target="/srv/${file##*/}"
#remove previous instances & update new
rm -f "$target"
ln -s "$file" "$target"
fi
done
#create module symlinks
echo "Creating Qubes module symlinks..."
saltModSymlink "_grains"
saltModSymlink "_modules"
saltModSymlink "_pillar"
saltModSymlink "_states"
saltModSymlink "_utils"
#sync modules (we just added some via the symlinks above)
#echo "Syncing modules..."
#qubesctl saltutil.sync_all saltenv=user
#call
if [ $# -gt 0 ] ; then
echo "Calling qubesctl saltenv=user with your arguments..."
qubesctl --show-output "$@" saltenv=user
else
echo "Using qubesctl to apply the top.sls state..."
qubesctl --show-output state.apply saltenv=user
fi
> P.S.: I also noticed that right after I did
> sudo qubesctl --all --show-output state.highstate saltenv=user
> I get
> ```
> sudo qubesctl top.enabled
> [CRITICAL] Specified ext_pillar interface qvm_prefs is unavailable
> 'top.enabled' is not available.
> DOM0 configuration failed, not continuing
> ```
> (It did work right before.) It doesn't change after a reboot, only reinstalling the salt packages helps.
> I guess that's not normal?
With the above & a fresh reinstall, this didn't happen anymore. It's odd anyway that it happened.