mirror of
https://github.com/saltstack/salt-bootstrap.git
synced 2025-04-16 01:30:21 +00:00
Merge remote-tracking branch 'upstream/develop' into stable
This commit is contained in:
commit
f047c6dc0d
15 changed files with 372 additions and 3647 deletions
208
.drone.jsonnet
208
.drone.jsonnet
|
@ -1,208 +0,0 @@
|
|||
local git_suites = [
|
||||
{ name: 'Py2 2018.3(Git)', slug: 'py2-git-2018-3', depends: [] },
|
||||
{ name: 'Py2 2019.2(Git)', slug: 'py2-git-2019-2', depends: ['Py2 2018.3(Git)'] },
|
||||
{ name: 'Py2 3000(Git)', slug: 'py2-git-3000', depends: ['Py2 2019.2(Git)'] },
|
||||
// {name: 'Py2 develop(Stable)', slug: 'py2-git-develop'}, // Don't test against Salt's develop branch. Stability is not assured.
|
||||
];
|
||||
|
||||
local git_py3_suites = [
|
||||
{ name: 'Py3 2018.3(Git)', slug: 'py3-git-2018-3', depends: [] },
|
||||
{ name: 'Py3 2019.2(Git)', slug: 'py3-git-2019-2', depends: ['Py3 2018.3(Git)'] },
|
||||
{ name: 'Py3 3000(Git)', slug: 'py3-git-3000', depends: ['Py3 2019.2(Git)'] },
|
||||
];
|
||||
|
||||
local stable_suites = [
|
||||
{ name: 'Py2 2018.3(Stable)', slug: 'py2-stable-2018-3', depends: ['Py2 2018.3(Git)'] },
|
||||
{ name: 'Py2 2019.2(Stable)', slug: 'py2-stable-2019-2', depends: ['Py2 2019.2(Git)'] },
|
||||
{ name: 'Py2 3000(Stable)', slug: 'py2-stable-3000', depends: ['Py2 3000(Git)'] },
|
||||
];
|
||||
|
||||
local stable_py3_suites = [
|
||||
{ name: 'Py3 2018.3(Stable)', slug: 'py3-stable-2018-3', depends: ['Py3 2018.3(Git)'] },
|
||||
{ name: 'Py3 2019.2(Stable)', slug: 'py3-stable-2019-2', depends: ['Py3 2019.2(Git)'] },
|
||||
{ name: 'Py3 3000(Stable)', slug: 'py3-stable-3000', depends: ['Py3 3000(Git)'] },
|
||||
];
|
||||
|
||||
local distros = [
|
||||
{ name: 'Arch', slug: 'arch', multiplier: 0, depends: [] },
|
||||
// { name: 'Amazon 1', slug: 'amazon-1', multiplier: 1, depends: [] },
|
||||
{ name: 'Amazon 2', slug: 'amazon-2', multiplier: 2, depends: [] },
|
||||
{ name: 'CentOS 6', slug: 'centos-6', multiplier: 3, depends: [] },
|
||||
{ name: 'CentOS 7', slug: 'centos-7', multiplier: 4, depends: [] },
|
||||
{ name: 'CentOS 8', slug: 'centos-8', multiplier: 5, depends: [] },
|
||||
{ name: 'Debian 8', slug: 'debian-8', multiplier: 6, depends: [] },
|
||||
{ name: 'Debian 9', slug: 'debian-9', multiplier: 7, depends: [] },
|
||||
{ name: 'Debian 10', slug: 'debian-10', multiplier: 5, depends: [] },
|
||||
{ name: 'Fedora 30', slug: 'fedora-30', multiplier: 4, depends: [] },
|
||||
{ name: 'Fedora 31', slug: 'fedora-31', multiplier: 3, depends: [] },
|
||||
{ name: 'Opensuse 15.1', slug: 'opensuse-15', multiplier: 2, depends: [] },
|
||||
{ name: 'Ubuntu 16.04', slug: 'ubuntu-1604', multiplier: 1, depends: [] },
|
||||
{ name: 'Ubuntu 18.04', slug: 'ubuntu-1804', multiplier: 0, depends: [] },
|
||||
];
|
||||
|
||||
local stable_distros = [
|
||||
'amazon-1',
|
||||
'amazon-2',
|
||||
'centos-6',
|
||||
'centos-7',
|
||||
'centos-8',
|
||||
'debian-8',
|
||||
'debian-9',
|
||||
'debian-10',
|
||||
'fedora-30',
|
||||
'ubuntu-1604',
|
||||
'ubuntu-1804',
|
||||
];
|
||||
|
||||
local py3_distros = [
|
||||
'amazon-2',
|
||||
// 'arch',
|
||||
'centos-7',
|
||||
'centos-8',
|
||||
'debian-9',
|
||||
'debian-10',
|
||||
'ubuntu-1604',
|
||||
'ubuntu-1804',
|
||||
'fedora-30',
|
||||
'fedora-31',
|
||||
];
|
||||
|
||||
local py2_blacklist = [
|
||||
'centos-8',
|
||||
'debian-10',
|
||||
'fedora-30',
|
||||
'fedora-31',
|
||||
];
|
||||
|
||||
local blacklist_2018 = [
|
||||
'centos-8',
|
||||
'debian-10',
|
||||
'amazon-2',
|
||||
];
|
||||
|
||||
local Shellcheck() = {
|
||||
kind: 'pipeline',
|
||||
name: 'Lint',
|
||||
|
||||
steps: [
|
||||
{
|
||||
name: 'shellcheck',
|
||||
image: 'koalaman/shellcheck-alpine:v0.6.0',
|
||||
commands: [
|
||||
'shellcheck -s sh -f checkstyle bootstrap-salt.sh',
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
|
||||
local Build(distro) = {
|
||||
kind: 'pipeline',
|
||||
name: distro.name,
|
||||
node: {
|
||||
project: 'open',
|
||||
},
|
||||
|
||||
local temp_git_suites = if std.count(py2_blacklist, distro.slug) > 0 then
|
||||
[]
|
||||
else
|
||||
git_suites,
|
||||
|
||||
local temp_stable_suites = if std.count(py2_blacklist, distro.slug) > 0 then
|
||||
[]
|
||||
else if std.count(stable_distros, distro.slug) > 0 then
|
||||
stable_suites
|
||||
else
|
||||
[],
|
||||
|
||||
local temp_git_py3_suites = if std.count(py3_distros, distro.slug) < 1 then
|
||||
[]
|
||||
else if std.count(blacklist_2018, distro.slug) > 0 then
|
||||
git_py3_suites[1:]
|
||||
else if std.count(py3_distros, distro.slug) > 0 then
|
||||
git_py3_suites
|
||||
else
|
||||
[],
|
||||
|
||||
local temp_stable_py3_suites = if std.count(stable_distros, distro.slug) < 1 then
|
||||
[]
|
||||
else if std.count(blacklist_2018, distro.slug) > 0 then
|
||||
stable_py3_suites[1:]
|
||||
else if std.count(py3_distros, distro.slug) > 0 then
|
||||
stable_py3_suites
|
||||
else
|
||||
[],
|
||||
|
||||
local suites = temp_git_suites + temp_stable_suites + temp_git_py3_suites + temp_stable_py3_suites,
|
||||
|
||||
steps: [
|
||||
{
|
||||
name: 'throttle-build',
|
||||
image: 'alpine',
|
||||
commands: [
|
||||
std.format(
|
||||
"sh -c 't=%(offset)s; echo Sleeping %(offset)s seconds; sleep %(offset)s'",
|
||||
{ offset: 6 * std.length(suites) * distro.multiplier }
|
||||
),
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'create',
|
||||
image: 'saltstack/drone-salt-bootstrap-testing',
|
||||
environment: {
|
||||
DOCKER_HOST: 'tcp://docker:2375',
|
||||
},
|
||||
depends_on: [
|
||||
'throttle-build',
|
||||
],
|
||||
commands: [
|
||||
'bundle install --with docker --without opennebula ec2 windows vagrant',
|
||||
"echo 'Waiting for docker to start'",
|
||||
'sleep 20', // give docker enough time to start
|
||||
'docker ps -a',
|
||||
std.format('bundle exec kitchen create %s', [distro.slug]),
|
||||
],
|
||||
},
|
||||
] + [
|
||||
{
|
||||
name: suite.name,
|
||||
image: 'saltstack/drone-salt-bootstrap-testing',
|
||||
environment: {
|
||||
DOCKER_HOST: 'tcp://docker:2375',
|
||||
},
|
||||
depends_on: [
|
||||
'throttle-build',
|
||||
'create',
|
||||
],
|
||||
commands: [
|
||||
'pip install -U pip',
|
||||
'pip install -r tests/requirements.txt',
|
||||
'bundle install --with docker --without opennebula ec2 windows vagrant',
|
||||
std.format('bundle exec kitchen test %s-%s', [suite.slug, distro.slug]),
|
||||
],
|
||||
}
|
||||
for suite in suites
|
||||
],
|
||||
services: [
|
||||
{
|
||||
name: 'docker',
|
||||
image: 'saltstack/drone-salt-bootstrap-testing',
|
||||
privileged: true,
|
||||
environment: {},
|
||||
command: [
|
||||
'--storage-driver=overlay2',
|
||||
],
|
||||
},
|
||||
],
|
||||
depends_on: [
|
||||
'Lint',
|
||||
] + distro.depends,
|
||||
};
|
||||
|
||||
|
||||
[
|
||||
Shellcheck(),
|
||||
] + [
|
||||
Build(distro)
|
||||
for distro in distros
|
||||
]
|
1748
.drone.yml
1748
.drone.yml
File diff suppressed because it is too large
Load diff
1712
.github/workflows/main.yml
vendored
1712
.github/workflows/main.yml
vendored
File diff suppressed because it is too large
Load diff
65
.github/workflows/templates/generate.py
vendored
65
.github/workflows/templates/generate.py
vendored
|
@ -44,15 +44,14 @@ PY2_BLACKLIST = [
|
|||
'debian-10',
|
||||
'fedora-30',
|
||||
'fedora-31',
|
||||
'fedora-32'
|
||||
'fedora-32',
|
||||
'opensuse-15'
|
||||
]
|
||||
|
||||
PY3_BLACKLIST = [
|
||||
'arch', # Defaults to Py3.8
|
||||
'amazon-1',
|
||||
'centos-6',
|
||||
'debian-8',
|
||||
'fedora-32' # Defaults to Py3.8
|
||||
]
|
||||
|
||||
BLACKLIST_2018 = [
|
||||
|
@ -69,6 +68,12 @@ SALT_BRANCHES = [
|
|||
'latest'
|
||||
]
|
||||
|
||||
SALT_POST_3000_BLACKLIST = [
|
||||
'centos-6',
|
||||
'debian-8',
|
||||
'fedora-30',
|
||||
]
|
||||
|
||||
BRANCH_DISPLAY_NAMES = {
|
||||
'2018-3': 'v2018.3',
|
||||
'2019-2': 'v2019.2',
|
||||
|
@ -82,8 +87,6 @@ STABLE_BRANCH_BLACKLIST = [
|
|||
|
||||
LATEST_PKG_BLACKLIST = [
|
||||
'arch', # No packages are built
|
||||
'centos-8', # Once Neon is out, this can be removed from here
|
||||
'debian-10' # Once Neon is out, this can be removed from here
|
||||
]
|
||||
|
||||
DISTRO_DISPLAY_NAMES = {
|
||||
|
@ -110,6 +113,15 @@ def generate_test_jobs():
|
|||
|
||||
for distro in LINUX_DISTROS + OSX + WINDOWS:
|
||||
for branch in SALT_BRANCHES:
|
||||
|
||||
if branch == 'master' and distro in SALT_POST_3000_BLACKLIST:
|
||||
continue
|
||||
try:
|
||||
if int(branch) >= 3000 and distro in SALT_POST_3000_BLACKLIST:
|
||||
continue
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if branch == 'latest':
|
||||
if distro in LATEST_PKG_BLACKLIST:
|
||||
continue
|
||||
|
@ -138,15 +150,46 @@ def generate_test_jobs():
|
|||
continue
|
||||
|
||||
for python_version in ('py2', 'py3'):
|
||||
|
||||
if branch == 'master' and python_version == 'py2':
|
||||
# Salt's master branch no longer supports Python 2
|
||||
continue
|
||||
|
||||
try:
|
||||
if int(branch) >= 3000 and python_version == 'py2':
|
||||
# Salt's 300X versions no longer supports Python 2
|
||||
continue
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
for bootstrap_type in ('stable', 'git'):
|
||||
if bootstrap_type == 'stable' and branch == 'master':
|
||||
continue
|
||||
if bootstrap_type == 'stable' and distro not in STABLE_DISTROS:
|
||||
continue
|
||||
if bootstrap_type == 'stable':
|
||||
if branch == 'master':
|
||||
# For the master branch there's no stable build
|
||||
continue
|
||||
if distro not in STABLE_DISTROS:
|
||||
continue
|
||||
|
||||
if bootstrap_type == 'stable' and branch in STABLE_BRANCH_BLACKLIST:
|
||||
continue
|
||||
if branch in STABLE_BRANCH_BLACKLIST:
|
||||
continue
|
||||
|
||||
if distro.startswith("fedora") and branch != "latest":
|
||||
# Fedora does not keep old builds around
|
||||
continue
|
||||
|
||||
if bootstrap_type == "git":
|
||||
if python_version == "py3":
|
||||
if distro in ("arch", "fedora-32"):
|
||||
allowed_branches = ["master"]
|
||||
try:
|
||||
int_branch = int(branch)
|
||||
if int_branch > 3000:
|
||||
allowed_branches.append(branch)
|
||||
except ValueError:
|
||||
pass
|
||||
if branch not in allowed_branches:
|
||||
# Arch and Fedora default to py3.8
|
||||
continue
|
||||
if branch == '2018-3' and distro in BLACKLIST_2018:
|
||||
continue
|
||||
|
||||
|
|
|
@ -168,7 +168,6 @@ suites:
|
|||
salt_version: 3000
|
||||
salt_bootstrap_options: -x python3 -MPfq git %s
|
||||
excludes:
|
||||
- arch
|
||||
- amazon-1
|
||||
- centos-6
|
||||
- debian-8
|
||||
|
@ -215,12 +214,9 @@ suites:
|
|||
salt_version: master
|
||||
salt_bootstrap_options: -x python3 -MPfq -D git %s
|
||||
excludes:
|
||||
- arch
|
||||
- amazon-1
|
||||
- centos-6
|
||||
- debian-8
|
||||
- fedora-32
|
||||
- opensuse-15
|
||||
|
||||
- name: latest
|
||||
provisioner:
|
||||
|
@ -232,4 +228,4 @@ suites:
|
|||
verifier:
|
||||
name: shell
|
||||
remote_exec: false
|
||||
command: pytest --cache-clear -v tests/integration/
|
||||
command: pytest --cache-clear -v -s -ra --log-cli-level=info tests/integration/
|
||||
|
|
|
@ -50,6 +50,7 @@ denmat denmat
|
|||
Denys Havrysh vutny denys.gavrysh@gmail.com
|
||||
deployboy deployboy
|
||||
Diego Woitasen diegows diego@flugel.it
|
||||
Dmitry Kuzmenko DmitryKuzmenko dmitry.kuzmenko@dsr-corporation.com
|
||||
EHJ-52n EHJ-52n EHJ-52n@users.noreply.github.com
|
||||
ek9 ek9
|
||||
Elias Probst eliasp
|
||||
|
@ -68,6 +69,7 @@ gdm85 gdm85
|
|||
Geoff Garside geoffgarside geoff@geoffgarside.co.uk
|
||||
George aflat gstock.public@gmail.com
|
||||
ggillies ggillies
|
||||
Gilles Debunne gdebunne
|
||||
Giuseppe Iannello giannello giuseppe.iannello@brokenloop.net
|
||||
Gregory Meno GregMeno gregory.meno@inktank.com
|
||||
Guillaume Derval GuillaumeDerval guillaume@guillaumederval.be
|
||||
|
@ -79,15 +81,18 @@ Jan Heidbrink jheidbrink
|
|||
Jared Bristow jars99
|
||||
Jared E Stroud jaredestroud jaredestroud@gmail.com
|
||||
Jasper Lievisse Adriaanse jasperla jasper@humppa.nl
|
||||
Jaydeep jay1648
|
||||
JD decomposite
|
||||
Jeff Hui jeffh jeff@jeffhui.net
|
||||
Jeff Strunk jstrunk
|
||||
John Hubbard ender8282 ender8282@gmail.com
|
||||
Jorge Schrauwen sjorge sjorge@blackdot.be
|
||||
Juan A. Moyano wincus wincus.public@gmail.com
|
||||
Justin Anderson justinta justin.ta@outlook.com
|
||||
Justin Findlay jfindlay jfindlay@gmail.com
|
||||
kgbsd
|
||||
Karl Grzeszczak karlgrz
|
||||
Ken Crowell oeuftete kcrowell@saltstack.com
|
||||
Kenneth Wilke KennethWilke
|
||||
Kevin Quinn kevinquinnyo kevin.quinn@totalserversolutions.com
|
||||
kiemlicz kiemlicz
|
||||
|
|
|
@ -28,7 +28,7 @@ Please read the following guidelines before you
|
|||
|
||||
```
|
||||
curl -o bootstrap-salt.sh -L https://raw.githubusercontent.com/saltstack/salt-bootstrap/develop/bootstrap-salt.sh
|
||||
sudo sh bootstrap-salt.sh git develop
|
||||
sudo sh bootstrap-salt.sh git master
|
||||
```
|
||||
|
||||
3. **Isolate the demonstrable problem** -- make sure that the
|
||||
|
|
16
ChangeLog
16
ChangeLog
|
@ -1,5 +1,21 @@
|
|||
Version TBD (In Progress on the Develop Branch):
|
||||
|
||||
Version 2020.05.28:
|
||||
* Fix Opensuse Tumbleweed (noelmcloughlin) #1441
|
||||
* Remove Debian 8 from Python 3 supported list (jay1648) #1448
|
||||
* Fixed deps parsing for FreeBSD git installs (cedwards) #1462
|
||||
* Added support for the upcoming Sodium release (s0undt3ch) #1466
|
||||
* Fixed KDE Neon detection (ender8282) #1466
|
||||
* Updated README python 2 and 3 installations (gdebunne) #1466
|
||||
* Updated README and CONTRIBUTING to prefer Salt's master branch (DmitryKuzmenko) #1466
|
||||
* Fixed IUS repo addresses (oeuftete) #1469
|
||||
* Updated tests to assert target Python and Salt versions (s0undt3ch) #1470
|
||||
* Fixed Amazon 2 -x support (s0undt3ch) #1470
|
||||
* Fix Fedora stable installs for older releases (s0undt3ch) #1470
|
||||
* Fix CentOS 8 installations (s0undt3ch) #1470
|
||||
* Default Debian 10 to Py3 (s0undt3ch) #1470
|
||||
* Fix Arch Linux installs (s0undt3ch) #1470
|
||||
|
||||
Version 2020.02.24:
|
||||
* Fix SLES 15 install (max298) #1431
|
||||
* Fix 3000(Neon) stable install (sblaisot) #1433
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
# docker build --rm -t saltstack/drone-salt-bootstrap-testing -f Dockerfile.drone-builds .
|
||||
FROM docker:edge-dind
|
||||
|
||||
COPY Gemfile /Gemfile
|
||||
COPY tests/requirements.txt /requirements.txt
|
||||
|
||||
RUN apk --update add \
|
||||
wget python python-dev py-pip git ruby-bundler ruby-rdoc ruby-dev gcc make libc-dev openssl-dev libffi-dev && \
|
||||
gem install bundler && \
|
||||
bundle install --gemfile=/Gemfile --with docker --without opennebula ec2 windows vagrant && \
|
||||
pip install -U pip && \
|
||||
pip install -r /requirements.txt && \
|
||||
rm -rf /requirements.txt /Gemfile /root/.cache
|
||||
|
||||
VOLUME /var/lib/docker
|
||||
EXPOSE 2375
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/dockerd-entrypoint.sh"]
|
||||
CMD []
|
30
README.rst
30
README.rst
|
@ -30,6 +30,7 @@ sum** of the downloaded ``bootstrap-salt.sh`` file.
|
|||
|
||||
The SHA256 sum of the ``bootstrap-salt.sh`` file, per release, is:
|
||||
|
||||
- 2020.02.24: ``efc46700aca78b8e51d7af9b06293f52ad495f3a8179c6bfb21a8c97ee41f1b7``
|
||||
- 2020.02.04: ``ce877651b4938e3480f76b1629f582437f6ca8b73d7199fdb9e905e86fe85b34``
|
||||
- 2020.01.29: ``e9afdfa877998c1c7f0e141a6728b33d0d24348e197aab2b9bde4fe6bc6db1b2``
|
||||
- 2020.01.21: ``53299aa0dfbf7ab381f3856bb7babfc04a1d6525be11db0b9466277b1e4d0c1a``
|
||||
|
@ -79,7 +80,7 @@ Using ``curl`` to install latest development version from GitHub:
|
|||
.. code:: console
|
||||
|
||||
curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com
|
||||
sudo sh bootstrap-salt.sh git develop
|
||||
sudo sh bootstrap-salt.sh git master
|
||||
|
||||
If you want to install a specific release version (based on the Git tags):
|
||||
|
||||
|
@ -100,7 +101,7 @@ If all you want is to install a ``salt-master`` using latest Git:
|
|||
.. code:: console
|
||||
|
||||
curl -o bootstrap-salt.sh -L https://bootstrap.saltstack.com
|
||||
sudo sh bootstrap-salt.sh -M -N git develop
|
||||
sudo sh bootstrap-salt.sh -M -N git master
|
||||
|
||||
If your host has Internet access only via HTTP proxy:
|
||||
|
||||
|
@ -142,15 +143,21 @@ If you already have Python installed, ``python 2.7``, then it's as easy as:
|
|||
.. code:: console
|
||||
|
||||
python -m urllib "https://bootstrap.saltstack.com" > bootstrap-salt.sh
|
||||
sudo sh bootstrap-salt.sh git develop
|
||||
sudo sh bootstrap-salt.sh git master
|
||||
|
||||
All Python versions should support the following in-line code:
|
||||
With python version 2, the following in-line code should always work:
|
||||
|
||||
.. code:: console
|
||||
|
||||
python -c 'import urllib; print urllib.urlopen("https://bootstrap.saltstack.com").read()' > bootstrap-salt.sh
|
||||
sudo sh bootstrap-salt.sh git develop
|
||||
sudo sh bootstrap-salt.sh git master
|
||||
|
||||
With python version 3:
|
||||
|
||||
.. code:: console
|
||||
|
||||
python3 -c 'import urllib.request; print(urllib.request.urlopen("https://bootstrap.saltstack.com").read().decode("ascii"))' > bootstrap-salt.sh
|
||||
sudo sh bootstrap-salt.sh git develop
|
||||
|
||||
Install using fetch
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -207,11 +214,11 @@ Using ``wget`` to install your distribution's stable packages:
|
|||
|
||||
wget -O - https://bootstrap.saltstack.com | sudo sh
|
||||
|
||||
Installing the latest develop branch of Salt:
|
||||
Installing the latest master branch of Salt:
|
||||
|
||||
.. code:: console
|
||||
|
||||
curl -L https://bootstrap.saltstack.com | sudo sh -s -- git develop
|
||||
curl -L https://bootstrap.saltstack.com | sudo sh -s -- git master
|
||||
|
||||
|
||||
Supported Operating Systems
|
||||
|
@ -235,7 +242,7 @@ You also may need to disable repository configuration and allow ``pip`` installa
|
|||
|
||||
.. code:: console
|
||||
|
||||
sudo sh bootstrap-salt.sh -r -P git develop
|
||||
sudo sh bootstrap-salt.sh -r -P git master
|
||||
|
||||
**NOTE**
|
||||
|
||||
|
@ -300,7 +307,7 @@ in combination with the ``git`` installation method.
|
|||
Ubuntu and derivatives
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
- KDE neon (based on Ubuntu 16.04)
|
||||
- KDE neon (based on Ubuntu 18.04)
|
||||
- Linux Mint 17/18
|
||||
- Ubuntu 14.04/16.04/18.04 and subsequent non-LTS releases (see below)
|
||||
|
||||
|
@ -361,7 +368,6 @@ this offering, while limited, is as follows:
|
|||
|
||||
- CentOS 7
|
||||
- Centos 8
|
||||
- Debian 8
|
||||
- Debian 9
|
||||
- Debian 10
|
||||
- Fedora (only git installations)
|
||||
|
@ -383,8 +389,8 @@ The earliest release of Salt that supports Python3 is `2018.3.4`.
|
|||
|
||||
Tornado 5/6 Workaround
|
||||
----------------------
|
||||
Salt does not support tornado>=5.0 currently. This support will not be added until the neon
|
||||
release. In order to work around this requirement on OSs that no longer have the tornado 4 package
|
||||
Salt does not support tornado>=5.0 currently. This support will be included in an upcoming release.
|
||||
In order to work around this requirement on OSs that no longer have the tornado 4 package
|
||||
available in their repositories we are pip installing tornado<5.0 in the bootstrap script. This
|
||||
requires the user to pass -P to the bootstrap script if installing via git to ensure tornado is pip
|
||||
installed. If a user does not pass this argument they will be warned that it is required for the
|
||||
|
|
32
appveyor.yml
32
appveyor.yml
|
@ -1,32 +0,0 @@
|
|||
platform: Any CPU
|
||||
|
||||
environment:
|
||||
matrix:
|
||||
- bootstrap_args:
|
||||
test_args: -master salt -runservice
|
||||
|
||||
- bootstrap_args: -runservice false
|
||||
test_args: -master salt -noservice
|
||||
|
||||
- bootstrap_args: -minion a-minion
|
||||
test_args: -minion a-minion -master salt -runservice
|
||||
|
||||
- bootstrap_args: -minion a-minion -master a-master
|
||||
test_args: -minion a-minion -master a-master -runservice
|
||||
|
||||
build_script:
|
||||
- ps: |
|
||||
$Path = (Get-Location).Path | Join-Path -ChildPath bootstrap-salt.ps1
|
||||
Invoke-Expression "$Path -verbose $env:bootstrap_args"
|
||||
|
||||
before_test:
|
||||
- SET PATH=%PATH%;C:\salt
|
||||
- salt-call --version
|
||||
|
||||
test_script:
|
||||
- ps: |
|
||||
$Path = (Get-Location).Path | Join-Path -ChildPath tests\runtests.ps1
|
||||
Invoke-Expression "$Path -verbose $env:test_args"
|
||||
|
||||
matrix:
|
||||
fast_finish: true
|
125
bootstrap-salt.sh
Executable file → Normal file
125
bootstrap-salt.sh
Executable file → Normal file
|
@ -23,7 +23,7 @@
|
|||
#======================================================================================================================
|
||||
set -o nounset # Treat unset variables as an error
|
||||
|
||||
__ScriptVersion="2020.02.24"
|
||||
__ScriptVersion="2020.05.28"
|
||||
__ScriptName="bootstrap-salt.sh"
|
||||
|
||||
__ScriptFullName="$0"
|
||||
|
@ -603,7 +603,7 @@ elif [ "$ITYPE" = "stable" ]; then
|
|||
if [ "$#" -eq 0 ];then
|
||||
STABLE_REV="latest"
|
||||
else
|
||||
if [ "$(echo "$1" | grep -E '^(latest|1\.6|1\.7|2014\.1|2014\.7|2015\.5|2015\.8|2016\.3|2016\.11|2017\.7|2018\.3|2019\.2|3000)$')" != "" ]; then
|
||||
if [ "$(echo "$1" | grep -E '^(latest|1\.6|1\.7|2014\.1|2014\.7|2015\.5|2015\.8|2016\.3|2016\.11|2017\.7|2018\.3|2019\.2|3000|3001)$')" != "" ]; then
|
||||
STABLE_REV="$1"
|
||||
shift
|
||||
elif [ "$(echo "$1" | grep -E '^(2[0-9]*\.[0-9]*\.[0-9]*|[3-9][0-9]{3}*(\.[0-9]*)?)$')" != "" ]; then
|
||||
|
@ -614,7 +614,7 @@ elif [ "$ITYPE" = "stable" ]; then
|
|||
fi
|
||||
shift
|
||||
else
|
||||
echo "Unknown stable version: $1 (valid: 1.6, 1.7, 2014.1, 2014.7, 2015.5, 2015.8, 2016.3, 2016.11, 2017.7, 2018.3, 2019.2, 3000, latest, \$MAJOR.\$MINOR.\$PATCH until 2019.2, \$MAJOR or \$MAJOR.\$PATCH starting from 3000)"
|
||||
echo "Unknown stable version: $1 (valid: 1.6, 1.7, 2014.1, 2014.7, 2015.5, 2015.8, 2016.3, 2016.11, 2017.7, 2018.3, 2019.2, 3000, 3001, latest, \$MAJOR.\$MINOR.\$PATCH until 2019.2, \$MAJOR or \$MAJOR.\$PATCH starting from 3000)"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
@ -693,6 +693,7 @@ if [ -n "$_PY_EXE" ]; then
|
|||
echoinfo "Detected -x option. Using $_PY_EXE to install Salt."
|
||||
else
|
||||
_PY_PKG_VER=""
|
||||
_PY_MAJOR_VERSION=""
|
||||
fi
|
||||
|
||||
# If the configuration directory or archive does not exist, error out
|
||||
|
@ -785,7 +786,6 @@ if [ -d "${_VIRTUALENV_DIR}" ]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
#--- FUNCTION -------------------------------------------------------------------------------------------------------
|
||||
# NAME: __fetch_url
|
||||
# DESCRIPTION: Retrieves a URL and writes it to a given path
|
||||
|
@ -996,7 +996,8 @@ __gather_linux_system_info() {
|
|||
# Skip setting DISTRO_NAME this time, splitting CamelCase has failed.
|
||||
# See https://github.com/saltstack/salt-bootstrap/issues/918
|
||||
[ "$n" = "$DISTRO_NAME" ] && DISTRO_NAME="" || DISTRO_NAME="$n"
|
||||
elif [ "${DISTRO_NAME}" = "openSUSE project" ]; then
|
||||
elif [ "$( echo "${DISTRO_NAME}" | grep openSUSE )" != "" ]; then
|
||||
# lsb_release -si returns "openSUSE Tumbleweed" on openSUSE tumbleweed
|
||||
# lsb_release -si returns "openSUSE project" on openSUSE 12.3
|
||||
# lsb_release -si returns "openSUSE" on openSUSE 15.n
|
||||
DISTRO_NAME="opensuse"
|
||||
|
@ -1117,7 +1118,7 @@ __gather_linux_system_info() {
|
|||
n="SUSE"
|
||||
v="${rv}"
|
||||
;;
|
||||
opensuse-leap )
|
||||
opensuse-* )
|
||||
n="opensuse"
|
||||
v="${rv}"
|
||||
;;
|
||||
|
@ -1153,7 +1154,7 @@ __install_python() {
|
|||
echoinfo "$DISTRO_NAME_L"
|
||||
case "$DISTRO_NAME_L" in
|
||||
"red_hat"|"centos")
|
||||
__PYTHON_REPO_URL="https://centos${DISTRO_MAJOR_VERSION}.iuscommunity.org/ius-release.rpm"
|
||||
__PYTHON_REPO_URL="https://repo.ius.io/ius-release-el${DISTRO_MAJOR_VERSION}.rpm"
|
||||
;;
|
||||
*)
|
||||
echoerror "Installing a repo to provide a python package is only supported on Redhat/CentOS.
|
||||
|
@ -1311,6 +1312,8 @@ __ubuntu_derivatives_translation() {
|
|||
linaro_12_ubuntu_base="12.04"
|
||||
elementary_os_02_ubuntu_base="12.04"
|
||||
neon_16_ubuntu_base="16.04"
|
||||
neon_18_ubuntu_base="18.04"
|
||||
neon_20_ubuntu_base="20.04"
|
||||
|
||||
# Translate Ubuntu derivatives to their base Ubuntu version
|
||||
match=$(echo "$DISTRO_NAME_L" | grep -E ${UBUNTU_DERIVATIVES})
|
||||
|
@ -1722,7 +1725,7 @@ echoinfo " Distribution: ${DISTRO_NAME} ${DISTRO_VERSION}"
|
|||
echo
|
||||
|
||||
# Simplify distro name naming on functions
|
||||
DISTRO_NAME_L=$(echo "$DISTRO_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-zA-Z0-9_ ]//g' | sed -Ee 's/([[:space:]])+/_/g')
|
||||
DISTRO_NAME_L=$(echo "$DISTRO_NAME" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-zA-Z0-9_ ]//g' | sed -Ee 's/([[:space:]])+/_/g' | sed -Ee 's/tumbleweed//' )
|
||||
|
||||
# Simplify version naming on functions
|
||||
if [ "$DISTRO_VERSION" = "" ] || [ ${_SIMPLIFY_VERSION} -eq $BS_FALSE ]; then
|
||||
|
@ -2000,6 +2003,12 @@ __rpm_import_gpg() {
|
|||
tempfile="$(__temp_gpg_pub)"
|
||||
|
||||
__fetch_url "$tempfile" "$url" || return 1
|
||||
|
||||
# At least on CentOS 8, a missing newline at the end causes:
|
||||
# error: /tmp/salt-gpg-n1gKUb1u.pub: key 1 not an armored public key.
|
||||
# shellcheck disable=SC1003,SC2086
|
||||
sed -i -e '$a\' $tempfile
|
||||
|
||||
rpm --import "$tempfile" || return 1
|
||||
rm -f "$tempfile"
|
||||
|
||||
|
@ -2780,6 +2789,18 @@ EOM
|
|||
} # ---------- end of function __install_salt_from_repo_post_neon ----------
|
||||
|
||||
|
||||
if [ "${_POST_NEON_INSTALL}" -eq $BS_FALSE ]; then
|
||||
if [ "x${_PY_MAJOR_VERSION}" = "x" ]; then
|
||||
# Default to python 2 for pre Neon installs
|
||||
_PY_MAJOR_VERSION=2
|
||||
fi
|
||||
else
|
||||
if [ "x${_PY_MAJOR_VERSION}" = "x" ]; then
|
||||
# Default to python 3 for post Neon install
|
||||
_PY_MAJOR_VERSION=3
|
||||
fi
|
||||
fi
|
||||
|
||||
#######################################################################################################################
|
||||
#
|
||||
# Distribution install functions
|
||||
|
@ -3358,6 +3379,15 @@ install_debian_deps() {
|
|||
__apt_get_upgrade_noinput || return 1
|
||||
fi
|
||||
|
||||
if [ "$DISTRO_MAJOR_VERSION" -ge 10 ]; then
|
||||
# Default Debian 10 to Py3
|
||||
if [ "x${_PY_EXE}" = "x" ]; then
|
||||
_PY_EXE=python3
|
||||
_PY_MAJOR_VERSION=3
|
||||
PY_PKG_VER=3
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$_PY_EXE" ] && [ "$_PY_MAJOR_VERSION" -eq 3 ]; then
|
||||
PY_PKG_VER=3
|
||||
else
|
||||
|
@ -3798,19 +3828,30 @@ install_fedora_deps() {
|
|||
}
|
||||
|
||||
install_fedora_stable() {
|
||||
if [ "$STABLE_REV" = "latest" ]; then
|
||||
__SALT_VERSION=""
|
||||
else
|
||||
__SALT_VERSION="$(dnf list --showduplicates salt | grep "$STABLE_REV" | head -n 1 | awk '{print $2}')"
|
||||
if [ "x${__SALT_VERSION}" = "x" ]; then
|
||||
echoerror "Could not find a stable install for Salt ${STABLE_REV}"
|
||||
exit 1
|
||||
fi
|
||||
echoinfo "Installing Stable Package Version ${__SALT_VERSION}"
|
||||
__SALT_VERSION="-${__SALT_VERSION}"
|
||||
fi
|
||||
__PACKAGES=""
|
||||
|
||||
if [ "$_INSTALL_CLOUD" -eq $BS_TRUE ];then
|
||||
__PACKAGES="${__PACKAGES} salt-cloud"
|
||||
__PACKAGES="${__PACKAGES} salt-cloud${__SALT_VERSION}"
|
||||
fi
|
||||
if [ "$_INSTALL_MASTER" -eq $BS_TRUE ]; then
|
||||
__PACKAGES="${__PACKAGES} salt-master"
|
||||
__PACKAGES="${__PACKAGES} salt-master${__SALT_VERSION}"
|
||||
fi
|
||||
if [ "$_INSTALL_MINION" -eq $BS_TRUE ]; then
|
||||
__PACKAGES="${__PACKAGES} salt-minion"
|
||||
__PACKAGES="${__PACKAGES} salt-minion${__SALT_VERSION}"
|
||||
fi
|
||||
if [ "$_INSTALL_SYNDIC" -eq $BS_TRUE ]; then
|
||||
__PACKAGES="${__PACKAGES} salt-syndic"
|
||||
__PACKAGES="${__PACKAGES} salt-syndic${__SALT_VERSION}"
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC2086
|
||||
|
@ -4083,6 +4124,14 @@ install_centos_stable_deps() {
|
|||
yum -y update || return 1
|
||||
fi
|
||||
|
||||
if [ "$DISTRO_MAJOR_VERSION" -ge 8 ]; then
|
||||
# CentOS/RHEL 8 Default to Py3
|
||||
if [ "x${_PY_EXE}" = "x" ]; then
|
||||
_PY_EXE=python3
|
||||
_PY_MAJOR_VERSION=3
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$_DISABLE_REPOS" -eq "$BS_TRUE" ] && [ -n "$_PY_EXE" ] && [ "$_PY_MAJOR_VERSION" -eq 3 ]; then
|
||||
echoerror "Detected -r or -R option while installing Salt packages for Python 3."
|
||||
echoerror "Python 3 packages for Salt require the EPEL repository to be installed."
|
||||
|
@ -5191,23 +5240,19 @@ install_amazon_linux_ami_2_git_deps() {
|
|||
fi
|
||||
|
||||
install_amazon_linux_ami_2_deps || return 1
|
||||
if __check_command_exists python3; then
|
||||
if ! __check_command_exists pip3; then
|
||||
__yum_install_noinput python3-pip
|
||||
fi
|
||||
PIP_EXE='/bin/pip3'
|
||||
_PY_EXE='python3'
|
||||
PY_PKG_VER=3
|
||||
|
||||
if [ "$_PY_MAJOR_VERSION" -eq 2 ]; then
|
||||
PY_PKG_VER=2
|
||||
PIP_EXE='/bin/pip'
|
||||
else
|
||||
PIP_EXE='pip'
|
||||
if __check_command_exists python2.7; then
|
||||
if ! __check_command_exists pip2.7; then
|
||||
__yum_install_noinput python2-pip
|
||||
fi
|
||||
PIP_EXE='/bin/pip'
|
||||
_PY_EXE='python2.7'
|
||||
PY_PKG_VER=2
|
||||
fi
|
||||
PY_PKG_VER=3
|
||||
PIP_EXE='/bin/pip3'
|
||||
fi
|
||||
__PACKAGES="python${PY_PKG_VER}-pip"
|
||||
|
||||
if ! __check_command_exists "${PIP_EXE}"; then
|
||||
# shellcheck disable=SC2086
|
||||
__yum_install_noinput ${__PACKAGES} || return 1
|
||||
fi
|
||||
|
||||
if ! __check_command_exists git; then
|
||||
|
@ -5241,7 +5286,6 @@ install_amazon_linux_ami_2_git_deps() {
|
|||
__REQUIRED_TORNADO="$(grep tornado "${_SALT_GIT_CHECKOUT_DIR}/requirements/base.txt")"
|
||||
if [ "${__REQUIRED_TORNADO}" != "" ]; then
|
||||
if [ -n "$_PY_EXE" ] && [ "$_PY_MAJOR_VERSION" -eq "3" ]; then
|
||||
__PACKAGES="${__PACKAGES} python3-pip"
|
||||
__PIP_PACKAGES="${__PIP_PACKAGES} tornado<$_TORNADO_MAX_PY3_VERSION"
|
||||
else
|
||||
__PACKAGES="${__PACKAGES} ${pkg_append}${PY_PKG_VER}-tornado"
|
||||
|
@ -5249,6 +5293,11 @@ install_amazon_linux_ami_2_git_deps() {
|
|||
fi
|
||||
fi
|
||||
|
||||
if [ "${__PIP_PACKAGES}" != "" ]; then
|
||||
__check_pip_allowed "You need to allow pip based installations (-P) in order to install ${__PIP_PACKAGES}"
|
||||
__PACKAGES="${__PACKAGES} python${PY_PKG_VER}-pip"
|
||||
fi
|
||||
|
||||
if [ "${__PACKAGES}" != "" ]; then
|
||||
# shellcheck disable=SC2086
|
||||
__yum_install_noinput ${__PACKAGES} || return 1
|
||||
|
@ -5309,7 +5358,6 @@ install_amazon_linux_ami_2_deps() {
|
|||
__REPO_FILENAME="saltstack-repo.repo"
|
||||
__PY_VERSION_REPO="yum"
|
||||
PY_PKG_VER=""
|
||||
_PY_MAJOR_VERSION=$(echo "$_PY_PKG_VER" | cut -c 7)
|
||||
repo_label="saltstack-repo"
|
||||
repo_name="SaltStack repo for Amazon Linux 2"
|
||||
if [ -n "$_PY_EXE" ] && [ "$_PY_MAJOR_VERSION" -eq 3 ]; then
|
||||
|
@ -5467,11 +5515,19 @@ install_arch_linux_stable_deps() {
|
|||
pacman-db-upgrade || return 1
|
||||
fi
|
||||
|
||||
if [ -n "$_PY_EXE" ] && [ "$_PY_MAJOR_VERSION" -eq 2 ]; then
|
||||
PY_PKG_VER=2
|
||||
else
|
||||
PY_PKG_VER=""
|
||||
fi
|
||||
|
||||
# YAML module is used for generating custom master/minion configs
|
||||
pacman -Su --noconfirm --needed python2-yaml
|
||||
# shellcheck disable=SC2086
|
||||
pacman -Su --noconfirm --needed python${PY_PKG_VER}-yaml
|
||||
|
||||
if [ "$_INSTALL_CLOUD" -eq $BS_TRUE ]; then
|
||||
pacman -Su --noconfirm --needed python2-apache-libcloud || return 1
|
||||
# shellcheck disable=SC2086
|
||||
pacman -Su --noconfirm --needed python${PY_PKG_VER}-apache-libcloud || return 1
|
||||
fi
|
||||
|
||||
if [ "${_EXTRA_PACKAGES}" != "" ]; then
|
||||
|
@ -5697,8 +5753,7 @@ install_freebsd_git_deps() {
|
|||
|
||||
if [ "${_POST_NEON_INSTALL}" -eq $BS_FALSE ]; then
|
||||
|
||||
SALT_DEPENDENCIES=$(/usr/local/sbin/pkg search -R -d py37-salt | grep 'origin:' \
|
||||
| tail -n +2 | awk -F\" '{print $2}')
|
||||
SALT_DEPENDENCIES=$(/usr/local/sbin/pkg rquery %dn py37-salt)
|
||||
# shellcheck disable=SC2086
|
||||
/usr/local/sbin/pkg install -y ${SALT_DEPENDENCIES} python || return 1
|
||||
|
||||
|
@ -6374,7 +6429,7 @@ install_opensuse_stable_post() {
|
|||
[ $fname = "minion" ] && [ "$_INSTALL_MINION" -eq $BS_FALSE ] && continue
|
||||
[ $fname = "syndic" ] && [ "$_INSTALL_SYNDIC" -eq $BS_FALSE ] && continue
|
||||
|
||||
if [ -f /bin/systemctl ]; then
|
||||
if [ -f /bin/systemctl ] || [ -f /usr/bin/systemctl ]; then
|
||||
systemctl is-enabled salt-$fname.service || (systemctl preset salt-$fname.service && systemctl enable salt-$fname.service)
|
||||
sleep 1
|
||||
systemctl daemon-reload
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
import os
|
||||
import pprint
|
||||
import pytest
|
||||
import testinfra
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
|
@ -14,3 +18,19 @@ def host():
|
|||
'paramiko://{KITCHEN_USERNAME}@{KITCHEN_HOSTNAME}:{KITCHEN_PORT}'.format(**os.environ),
|
||||
ssh_identity_file=os.environ.get('KITCHEN_SSH_KEY'))
|
||||
return testinfra.get_host('docker://{KITCHEN_USERNAME}@{KITCHEN_CONTAINER_ID}'.format(**os.environ))
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def target_python_version():
|
||||
target_python = os.environ["KITCHEN_SUITE"].split("-", 1)[0]
|
||||
if target_python == "latest":
|
||||
pytest.skip("Unable to get target python from {}".format(os.environ["KITCHEN_SUITE"]))
|
||||
return int(target_python.replace("py", ""))
|
||||
|
||||
|
||||
@pytest.fixture(scope='session')
|
||||
def target_salt_version():
|
||||
target_salt = os.environ["KITCHEN_SUITE"].split("-", 2)[-1].replace("-", ".")
|
||||
if target_salt in ("latest", "master"):
|
||||
pytest.skip("Don't have a specific salt version to test against")
|
||||
return target_salt
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import pytest
|
||||
|
||||
|
||||
def test_ping(host):
|
||||
with host.sudo():
|
||||
assert host.salt('test.ping', '--timeout=120')
|
24
tests/integration/test_installation.py
Normal file
24
tests/integration/test_installation.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import json
|
||||
import pytest
|
||||
import logging
|
||||
import pprint
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def test_ping(host):
|
||||
with host.sudo():
|
||||
assert host.salt('test.ping', '--timeout=120')
|
||||
|
||||
|
||||
def test_target_python_version(host, target_python_version):
|
||||
with host.sudo():
|
||||
ret = host.salt('grains.item', 'pythonversion', '--timeout=120')
|
||||
assert ret["pythonversion"][0] == target_python_version
|
||||
|
||||
|
||||
def test_target_salt_version(host, target_salt_version):
|
||||
with host.sudo():
|
||||
ret = host.salt('grains.item', 'saltversion', '--timeout=120')
|
||||
assert ret["saltversion"].startswith(target_salt_version)
|
Loading…
Add table
Reference in a new issue