Vagrant box definition
This is a copy of https://github.com/CGenie/vagrant-fuel-dev with some fixes and adjustments. Change-Id: I3e74df74c4d05c0418efbaa1cdd7b767b45e35f1
This commit is contained in:
parent
6d1d002745
commit
306828d69a
|
@ -38,7 +38,7 @@ master_doc = 'index'
|
|||
|
||||
# General information about the project.
|
||||
project = u'fuel-dev-tools'
|
||||
copyright = u'2013, OpenStack Foundation'
|
||||
copyright = u'2015, Mirantis Inc.'
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
add_function_parentheses = True
|
||||
|
|
|
@ -1,19 +1,18 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright 2010-2011 OpenStack Foundation
|
||||
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from oslotest import base
|
||||
|
||||
|
|
22
setup.py
22
setup.py
|
@ -1,20 +1,18 @@
|
|||
#!/usr/bin/env python
|
||||
# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
# implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT
|
||||
import setuptools
|
||||
|
||||
# In python < 2.7.4, a lazy loading of package `pbr` will break
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
============================
|
||||
Fuel development Vagrant box
|
||||
============================
|
||||
|
||||
This is a definition of a Vagrant box tailored for development of Mirantis Fuel.
|
||||
Configuration is done using [SaltStack](http://saltstack.com/).
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Clone and `cd` into this repo then run
|
||||
```
|
||||
vagrant up
|
||||
```
|
||||
to start the Vagrant box.
|
||||
|
||||
Then run
|
||||
```
|
||||
vagrant ssh
|
||||
sudo su
|
||||
salt-call state.highstate --local
|
||||
```
|
||||
to SSH into the machine and initially set up the environment. Then on the virtual machine as user `vagrant` you can do
|
||||
```
|
||||
workon fuel
|
||||
```
|
||||
to activate the Python virtualenv. To start the server type
|
||||
```
|
||||
/sources/fuel-web/nailgun/manage.py run --fake-tasks
|
||||
```
|
||||
and point your browser to [http://localhost:8200](http://localhost:8200) -- username/password for the test env is `admin`/`admin`.
|
||||
|
||||
Sometimes it might be necessary to repopulate the DB with fixtures, to do this just type (`dropdb` might be needed before):
|
||||
```
|
||||
./manage.py syncdb
|
||||
./manage.py loaddefault # It loads all basic fixtures listed in settings.yaml
|
||||
./manage.py loaddata nailgun/fixtures/sample_environment.json # Loads fake nodes
|
||||
```
|
||||
|
||||
As a shortut, a script `nailgun_clean_db.sh` is provided to reinitialize the database using the above commands.
|
||||
|
||||
To run tests:
|
||||
```
|
||||
cd /sources/fuel-web
|
||||
./run_tests.sh
|
||||
```
|
||||
|
||||
The `sources` directory is mounted under `/sources` on the Vagrant machine using Rsync for better performance
|
||||
(otherwise tests run incredibly slow). If you want Vagrant to automatically rsync your local directory to the virtualmachine run
|
||||
```
|
||||
vagrant rsync-auto
|
||||
```
|
||||
|
||||
Note that this is a one-way sync, i.e. from your local machine to the virtual machine, not the other way around.
|
||||
|
||||
There is also the `/vagrant/sources` folder where `sources` are mounted too, but using the standard VirtualBox
|
||||
Synchronized Folders which is extremely slow.
|
||||
|
||||
For more information see http://docs.mirantis.com/fuel-dev/develop/nailgun/development/env.html and
|
||||
http://docs.mirantis.com/fuel-dev/develop/env.html
|
||||
|
||||
tmux
|
||||
----
|
||||
[tmux](http://tmux.sourceforge.net/) is installed by default. Each tmux window's output is logged
|
||||
to a separate file for easier inspection of history. The file's name can be fetched in current
|
||||
active window from the `TMUX_LOG_FILE` variable (see `/home/vagrant/.bash_profile`).
|
||||
|
||||
TODO
|
||||
----
|
||||
* eliminate the need for running `rsync-auto` and instead install the `rsync` service inside the Vagrant box
|
||||
that synchronizes `/vagrant/sources` into `/sources`
|
||||
* add link (and Jenkins job?) to pre-generated Vagrant box
|
|
@ -0,0 +1,79 @@
|
|||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
|
||||
VAGRANTFILE_API_VERSION = "2"
|
||||
|
||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||
# Every Vagrant virtual environment requires a box to build off of.
|
||||
config.vm.box = "ubuntu1404"
|
||||
|
||||
# The url from where the 'config.vm.box' box will be fetched if it
|
||||
# doesn't already exist on the user's system.
|
||||
config.vm.box_url = "https://atlas.hashicorp.com/ubuntu/boxes/trusty64"
|
||||
|
||||
# Create a forwarded port mapping which allows access to a specific port
|
||||
# within the machine from a port on the host machine. In the example below,
|
||||
# accessing "localhost:8080" will access port 80 on the guest machine.
|
||||
# config.vm.network :forwarded_port, guest: 80, host: 8080
|
||||
config.vm.network :forwarded_port, guest: 80, host: 8280
|
||||
config.vm.network :forwarded_port, guest: 8000, host: 8200
|
||||
|
||||
# Create a private network, which allows host-only access to the machine
|
||||
# using a specific IP.
|
||||
config.vm.network :private_network, ip: "192.168.60.10"
|
||||
|
||||
# run:
|
||||
# vagrant rsync-auto
|
||||
# to fire the service for automatic rsync synchronization
|
||||
config.vm.synced_folder './sources', '/sources', type: "rsync", rsync__auto: true,
|
||||
rsync__args: ["--verbose", "--archive", "-z", "--delete"],
|
||||
rsync__exclude: [
|
||||
'*.pyc',
|
||||
'*.iso',
|
||||
'*/.tox',
|
||||
'nailgun/static/js/libs/bower',
|
||||
'nailgun/node_modules',
|
||||
'test_run'
|
||||
],
|
||||
create: true
|
||||
|
||||
# Provider-specific configuration so you can fine-tune various
|
||||
# backing providers for Vagrant. These expose provider-specific options.
|
||||
# Example for VirtualBox:
|
||||
#
|
||||
config.vm.provider :virtualbox do |vb|
|
||||
vb.name = "vagrant-mirantis-fuel"
|
||||
# # Don't boot with headless mode
|
||||
# vb.gui = true
|
||||
#
|
||||
# Use VBoxManage to customize the VM. For example to change memory:
|
||||
vb.customize ["modifyvm", :id, "--ioapic", "on", "--memory", "1024"]
|
||||
end
|
||||
|
||||
## For masterless, mount your salt file root
|
||||
config.vm.synced_folder "pillar/", "/srv/pillar/"
|
||||
config.vm.synced_folder "salt/", "/srv/salt/"
|
||||
|
||||
## Use all the defaults:
|
||||
config.vm.provision :salt do |salt|
|
||||
|
||||
salt.minion_config = "salt_minion"
|
||||
salt.colorize = true
|
||||
salt.log_level = "all"
|
||||
#salt.run_highstate = true # Uncomment if you want to automatically provision the box
|
||||
|
||||
end
|
||||
|
||||
end
|
|
@ -0,0 +1,3 @@
|
|||
GROUP: vagrant
|
||||
USER: vagrant
|
||||
HOME: /home/vagrant
|
|
@ -0,0 +1,3 @@
|
|||
base:
|
||||
'*':
|
||||
- env
|
|
@ -0,0 +1,899 @@
|
|||
#!/usr/bin/env bash
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
shopt -s extglob
|
||||
set -o errtrace
|
||||
set -o errexit
|
||||
|
||||
rvm_install_initialize()
|
||||
{
|
||||
DEFAULT_SOURCES=(github.com/wayneeseguin/rvm bitbucket.org/mpapis/rvm)
|
||||
|
||||
BASH_MIN_VERSION="3.2.25"
|
||||
if
|
||||
[[ -n "${BASH_VERSION:-}" &&
|
||||
"$(\printf "%b" "${BASH_VERSION:-}\n${BASH_MIN_VERSION}\n" | LC_ALL=C \sort -t"." -k1,1n -k2,2n -k3,3n | \head -n1)" != "${BASH_MIN_VERSION}"
|
||||
]]
|
||||
then
|
||||
echo "BASH ${BASH_MIN_VERSION} required (you have $BASH_VERSION)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
export HOME PS4
|
||||
export rvm_trace_flag rvm_debug_flag rvm_user_install_flag rvm_ignore_rvmrc rvm_prefix rvm_path
|
||||
|
||||
PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} > "
|
||||
}
|
||||
|
||||
log() { printf "%b\n" "$*"; }
|
||||
debug(){ [[ ${rvm_debug_flag:-0} -eq 0 ]] || printf "%b\n" "Running($#): $*"; }
|
||||
fail() { log "\nERROR: $*\n" ; exit 1 ; }
|
||||
|
||||
rvm_install_commands_setup()
|
||||
{
|
||||
\which which >/dev/null 2>&1 || fail "Could not find 'which' command, make sure it's available first before continuing installation."
|
||||
if
|
||||
[[ -z "${rvm_tar_command:-}" ]] && builtin command -v gtar >/dev/null
|
||||
then
|
||||
rvm_tar_command=gtar
|
||||
elif
|
||||
${rvm_tar_command:-tar} --help 2>&1 | GREP_OPTIONS="" \grep -- --strip-components >/dev/null
|
||||
then
|
||||
rvm_tar_command="${rvm_tar_command:-tar}"
|
||||
else
|
||||
case "$(uname)" in
|
||||
(OpenBSD)
|
||||
log "Trying to install GNU version of tar, might require sudo password"
|
||||
if (( UID ))
|
||||
then sudo pkg_add -z gtar-1
|
||||
else pkg_add -z gtar-1
|
||||
fi
|
||||
rvm_tar_command=gtar
|
||||
;;
|
||||
(Darwin|FreeBSD|DragonFly) # it's not possible to autodetect on OSX, the help/man does not mention all flags
|
||||
rvm_tar_command=tar
|
||||
;;
|
||||
(SunOS)
|
||||
case "$(uname -r)" in
|
||||
(5.10)
|
||||
log "Trying to install GNU version of tar, might require sudo password"
|
||||
if (( UID ))
|
||||
then
|
||||
if \which sudo >/dev/null 2>&1
|
||||
then sudo_10=sudo
|
||||
elif \which /opt/csw/bin/sudo >/dev/null 2>&1
|
||||
then sudo_10=/opt/csw/bin/sudo
|
||||
else fail "sudo is required but not found. You may install sudo from OpenCSW repository (http://opencsw.org/about)"
|
||||
fi
|
||||
pkginfo -q CSWpkgutil || $sudo_10 pkgadd -a $rvm_path/config/solaris/noask -d http://get.opencsw.org/now CSWpkgutil
|
||||
sudo /opt/csw/bin/pkgutil -iy CSWgtar -t http://mirror.opencsw.org/opencsw/unstable
|
||||
else
|
||||
pkginfo -q CSWpkgutil || pkgadd -a $rvm_path/config/solaris/noask -d http://get.opencsw.org/now CSWpkgutil
|
||||
/opt/csw/bin/pkgutil -iy CSWgtar -t http://mirror.opencsw.org/opencsw/unstable
|
||||
fi
|
||||
rvm_tar_command=/opt/csw/bin/gtar
|
||||
;;
|
||||
(*)
|
||||
rvm_tar_command=tar
|
||||
;;
|
||||
esac
|
||||
esac
|
||||
builtin command -v ${rvm_tar_command:-gtar} >/dev/null ||
|
||||
fail "Could not find GNU compatible version of 'tar' command, make sure it's available first before continuing installation."
|
||||
fi
|
||||
if
|
||||
[[ " ${rvm_tar_options:-} " != *" --no-same-owner "* ]] &&
|
||||
$rvm_tar_command --help 2>&1 | GREP_OPTIONS="" \grep -- --no-same-owner >/dev/null
|
||||
then
|
||||
rvm_tar_options="${rvm_tar_options:-}${rvm_tar_options:+ }--no-same-owner"
|
||||
fi
|
||||
}
|
||||
|
||||
usage()
|
||||
{
|
||||
printf "%b" "
|
||||
|
||||
Usage
|
||||
|
||||
rvm-installer [options] [action]
|
||||
|
||||
Options
|
||||
|
||||
[[--]version] <version>
|
||||
|
||||
The version or tag to install. Valid values are:
|
||||
|
||||
latest - The latest tagged version.
|
||||
latest-minor - The latest minor version of the current major version.
|
||||
latest-<x> - The latest minor version of version x.
|
||||
latest-<x>.<y> - The latest patch version of version x.y.
|
||||
<x>.<y>.<z> - Major version x, minor version y and patch z.
|
||||
|
||||
[--]branch <branch>
|
||||
|
||||
The name of the branch from which RVM is installed. This option can be used
|
||||
with the following formats for <branch>:
|
||||
|
||||
<account>/
|
||||
|
||||
If account is wayneeseguin or mpapis, installs from one of the following:
|
||||
|
||||
https://github.com/wayneeseguin/rvm/archive/master.tar.gz
|
||||
https://bitbucket.org/mpapis/rvm/get/master.tar.gz
|
||||
|
||||
Otherwise, installs from:
|
||||
|
||||
https://github.com/<account>/rvm/archive/master.tar.gz
|
||||
|
||||
<account>/<branch>
|
||||
|
||||
If account is wayneeseguin or mpapis, installs from one of the following:
|
||||
|
||||
https://github.com/wayneeseguin/rvm/archive/<branch>.tar.gz
|
||||
https://bitbucket.org/mpapis/rvm/get/<branch>.tar.gz
|
||||
|
||||
Otherwise, installs from:
|
||||
|
||||
https://github.com/<account>/rvm/archive/<branch>.tar.gz
|
||||
|
||||
[/]<branch>
|
||||
|
||||
Installs the branch from one of the following:
|
||||
|
||||
https://github.com/wayneeseguin/rvm/archive/<branch>.tar.gz
|
||||
https://bitbucket.org/mpapis/rvm/get/<branch>.tar.gz
|
||||
|
||||
[--]source <source>
|
||||
|
||||
Defines the repository from which RVM is retrieved and installed in the format:
|
||||
|
||||
<domain>/<account>/<repo>
|
||||
|
||||
Where:
|
||||
|
||||
<domain> - Is bitbucket.org, github.com or a github enterprise site serving
|
||||
an RVM repository.
|
||||
<account> - Is the user account in which the RVM repository resides.
|
||||
<repo> - Is the name of the RVM repository.
|
||||
|
||||
Note that when using the [--]source option, one should only use the [/]branch format
|
||||
with the [--]branch option. Failure to do so will result in undefined behavior.
|
||||
|
||||
--trace
|
||||
|
||||
Provides debug logging for the installation script.
|
||||
Actions
|
||||
|
||||
master - Installs RVM from the master branch at wayneeseguin/rvm on github or mpapis/rvm
|
||||
on bitbucket.org.
|
||||
stable - Installs RVM from the stable branch a wayneeseguin/rvm on github or mpapis/rvm
|
||||
on bitbucket.org.
|
||||
help - Displays this output.
|
||||
|
||||
"
|
||||
}
|
||||
|
||||
## duplication marker 32fosjfjsznkjneuera48jae
|
||||
__rvm_curl_output_control()
|
||||
{
|
||||
if
|
||||
(( ${rvm_quiet_curl_flag:-0} == 1 ))
|
||||
then
|
||||
__flags+=( "--silent" "--show-error" )
|
||||
elif
|
||||
[[ " $*" == *" -s"* || " $*" == *" --silent"* ]]
|
||||
then
|
||||
# make sure --show-error is used with --silent
|
||||
[[ " $*" == *" -S"* || " $*" == *" -sS"* || " $*" == *" --show-error"* ]] ||
|
||||
{
|
||||
__flags+=( "--show-error" )
|
||||
}
|
||||
fi
|
||||
}
|
||||
|
||||
## duplication marker 32fosjfjsznkjneuera48jae
|
||||
# -S is automatically added to -s
|
||||
__rvm_curl()
|
||||
(
|
||||
__rvm_which curl >/dev/null ||
|
||||
{
|
||||
rvm_error "RVM requires 'curl'. Install 'curl' first and try again."
|
||||
return 200
|
||||
}
|
||||
|
||||
typeset -a __flags
|
||||
__flags=( --fail --location --max-redirs 10 )
|
||||
|
||||
[[ "$*" == *"--max-time"* ]] ||
|
||||
[[ "$*" == *"--connect-timeout"* ]] ||
|
||||
__flags+=( --connect-timeout 30 --retry-delay 2 --retry 3 )
|
||||
|
||||
if [[ -n "${rvm_proxy:-}" ]]
|
||||
then __flags+=( --proxy "${rvm_proxy:-}" )
|
||||
fi
|
||||
|
||||
__rvm_curl_output_control
|
||||
|
||||
unset curl
|
||||
__rvm_debug_command \curl "${__flags[@]}" "$@" || return $?
|
||||
)
|
||||
|
||||
rvm_error() { printf "ERROR: %b\n" "$*"; }
|
||||
__rvm_which(){ which "$@" || return $?; true; }
|
||||
__rvm_debug_command()
|
||||
{
|
||||
debug "Running($#): $*"
|
||||
"$@" || return $?
|
||||
true
|
||||
}
|
||||
rvm_is_a_shell_function()
|
||||
{
|
||||
[[ -t 0 && -t 1 ]] || return $?
|
||||
return ${rvm_is_not_a_shell_function:-0}
|
||||
}
|
||||
|
||||
# Searches the tags for the highest available version matching a given pattern.
|
||||
# fetch_version (github.com/wayneeseguin/rvm bitbucket.org/mpapis/rvm) 1.10. -> 1.10.3
|
||||
# fetch_version (github.com/wayneeseguin/rvm bitbucket.org/mpapis/rvm) 1.10. -> 1.10.3
|
||||
# fetch_version (github.com/wayneeseguin/rvm bitbucket.org/mpapis/rvm) 1. -> 1.11.0
|
||||
# fetch_version (github.com/wayneeseguin/rvm bitbucket.org/mpapis/rvm) "" -> 2.0.1
|
||||
fetch_version()
|
||||
{
|
||||
typeset _account _domain _pattern _repo _sources _values _version
|
||||
_sources=(${!1})
|
||||
_pattern=$2
|
||||
for _source in "${_sources[@]}"
|
||||
do
|
||||
IFS='/' read -r _domain _account _repo <<< "${_source}"
|
||||
_version="$(
|
||||
fetch_versions ${_domain} ${_account} ${_repo} |
|
||||
GREP_OPTIONS="" \grep "^${_pattern:-}" | tail -n 1
|
||||
)"
|
||||
if
|
||||
[[ -n ${_version} ]]
|
||||
then
|
||||
echo "${_version}"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Returns a sorted list of all version tags from a repository
|
||||
fetch_versions()
|
||||
{
|
||||
typeset _account _domain _repo _url
|
||||
_domain=$1
|
||||
_account=$2
|
||||
_repo=$3
|
||||
case ${_domain} in
|
||||
(bitbucket.org)
|
||||
_url=https://${_domain}/api/1.0/repositories/${_account}/${_repo}/branches-tags
|
||||
;;
|
||||
(github.com)
|
||||
_url=https://api.${_domain}/repos/${_account}/${_repo}/tags
|
||||
;;
|
||||
|
||||
(*)
|
||||
_url=https://${_domain}/api/v3/repos/${_account}/${_repo}/tags
|
||||
;;
|
||||
esac
|
||||
__rvm_curl -s ${_url} |
|
||||
\awk -v RS=',' -v FS='"' '$2=="name"{print $4}' |
|
||||
sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n
|
||||
}
|
||||
|
||||
install_release()
|
||||
{
|
||||
typeset _source _sources _url _version _verify_pgp
|
||||
_sources=(${!1})
|
||||
_version=$2
|
||||
debug "Downloading RVM version ${_version}"
|
||||
for _source in "${_sources[@]}"
|
||||
do
|
||||
case ${_source} in
|
||||
(bitbucket.org*)
|
||||
_url="https://${_source}/get/${_version}.tar.gz"
|
||||
_verify_pgp="https://${_source}/downloads/${_version}.tar.gz.asc"
|
||||
;;
|
||||
(*)
|
||||
_url="https://${_source}/archive/${_version}.tar.gz"
|
||||
_verify_pgp="https://${_source}/releases/download/${_version}/${_version}.tar.gz.asc"
|
||||
;;
|
||||
esac
|
||||
get_and_unpack "${_url}" "rvm-${_version}.tgz" "$_verify_pgp" && return
|
||||
done
|
||||
return $?
|
||||
}
|
||||
|
||||
install_head()
|
||||
{
|
||||
typeset _branch _source _sources _url
|
||||
_sources=(${!1})
|
||||
_branch=$2
|
||||
debug "Selected RVM branch ${_branch}"
|
||||
for _source in "${_sources[@]}"
|
||||
do
|
||||
case ${_source} in
|
||||
(bitbucket.org*)
|
||||
_url=https://${_source}/get/${_branch}.tar.gz
|
||||
;;
|
||||
(*)
|
||||
_url=https://${_source}/archive/${_branch}.tar.gz
|
||||
;;
|
||||
esac
|
||||
get_and_unpack "${_url}" "rvm-${_branch//\//_}.tgz" && return
|
||||
done
|
||||
return $?
|
||||
}
|
||||
|
||||
# duplication marker dfkjdjngdfjngjcszncv
|
||||
# Drop in cd which _doesn't_ respect cdpath
|
||||
__rvm_cd()
|
||||
{
|
||||
typeset old_cdpath ret
|
||||
ret=0
|
||||
old_cdpath="${CDPATH}"
|
||||
CDPATH="."
|
||||
chpwd_functions="" builtin cd "$@" || ret=$?
|
||||
CDPATH="${old_cdpath}"
|
||||
return $ret
|
||||
}
|
||||
|
||||
get_package()
|
||||
{
|
||||
typeset _url _file
|
||||
_url="$1"
|
||||
_file="$2"
|
||||
log "Downloading ${_url}"
|
||||
__rvm_curl -sS ${_url} -o ${rvm_archives_path}/${_file} ||
|
||||
{
|
||||
_return=$?
|
||||
case $_return in
|
||||
# duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
|
||||
(60)
|
||||
log "
|
||||
Could not download '${_url}', you can read more about it here:
|
||||
https://rvm.io/support/fixing-broken-ssl-certificates/
|
||||
To continue in insecure mode run 'echo insecure >> ~/.curlrc'.
|
||||
"
|
||||
;;
|
||||
# duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
|
||||
(77)
|
||||
log "
|
||||
It looks like you have old certificates, you can read more about it here:
|
||||
https://rvm.io/support/fixing-broken-ssl-certificates/
|
||||
"
|
||||
;;
|
||||
# duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
|
||||
(141)
|
||||
log "
|
||||
Curl returned 141 - it is result of a segfault which means it's Curls fault.
|
||||
Try again and if it crashes more than a couple of times you either need to
|
||||
reinstall Curl or consult with your distribution manual and contact support.
|
||||
"
|
||||
;;
|
||||
(*)
|
||||
log "
|
||||
Could not download '${_url}'.
|
||||
curl returned status '$_return'.
|
||||
"
|
||||
;;
|
||||
esac
|
||||
return $_return
|
||||
}
|
||||
}
|
||||
|
||||
# duplication marker flnglfdjkngjndkfjhsbdjgfghdsgfklgg
|
||||
rvm_install_gpg_setup()
|
||||
{
|
||||
export rvm_gpg_command
|
||||
{
|
||||
rvm_gpg_command="$( \which gpg2 2>/dev/null )" &&
|
||||
[[ rvm_gpg_command != "/cygdrive/"* ]]
|
||||
} ||
|
||||
rvm_gpg_command="$( \which gpg 2>/dev/null )" ||
|
||||
rvm_gpg_command=""
|
||||
debug "Detected GPG program: '$rvm_gpg_command'"
|
||||
[[ -n "$rvm_gpg_command" ]] || return $?
|
||||
}
|
||||
|
||||
# duplication marker rdjgndfnghdfnhgfdhbghdbfhgbfdhbn
|
||||
verify_package_pgp()
|
||||
{
|
||||
if
|
||||
"${rvm_gpg_command}" --verify "$2" "$1"
|
||||
then
|
||||
log "GPG verified '$1'"
|
||||
else
|
||||
typeset _ret=$?
|
||||
log "\
|
||||
Warning, RVM 1.26.0 introduces signed releases and \
|
||||
automated check of signatures when GPG software found.
|
||||
Assuming you trust Michal Papis import the mpapis public \
|
||||
key (downloading the signatures).
|
||||
|
||||
GPG signature verification failed for '$1' - '$3'!
|
||||
try downloading the signatures:
|
||||
|
||||
${SUDO_USER:+sudo }${rvm_gpg_command##*/} --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
|
||||
|
||||
or if it fails:
|
||||
|
||||
command curl -sSL https://rvm.io/mpapis.asc | ${SUDO_USER:+sudo }${rvm_gpg_command##*/} --import -
|
||||
|
||||
the key can be compared with:
|
||||
|
||||
https://rvm.io/mpapis.asc
|
||||
https://keybase.io/mpapis
|
||||
"
|
||||
exit $_ret
|
||||
fi
|
||||
}
|
||||
|
||||
verify_pgp()
|
||||
{
|
||||
[[ -n "${1:-}" ]] ||
|
||||
{
|
||||
debug "No PGP url given, skipping."
|
||||
return 0
|
||||
}
|
||||
|
||||
get_package "$1" "$2.asc" ||
|
||||
{
|
||||
debug "PGP url given but does not exist: '$1'"
|
||||
return 0
|
||||
}
|
||||
|
||||
rvm_install_gpg_setup ||
|
||||
{
|
||||
log "Found PGP signature at: '$1',
|
||||
but no GPG software exists to validate it, skipping."
|
||||
return 0
|
||||
}
|
||||
|
||||
verify_package_pgp "${rvm_archives_path}/$2" "${rvm_archives_path}/$2.asc" "$1"
|
||||
}
|
||||
|
||||
get_and_unpack()
|
||||
{
|
||||
typeset _url _file _patern _return _verify_pgp
|
||||
_url="$1"
|
||||
_file="$2"
|
||||
_verify_pgp="$3"
|
||||
|
||||
get_package "$_url" "$_file" || return $?
|
||||
verify_pgp "$_verify_pgp" "$_file" || return $?
|
||||
|
||||
[[ -d "${rvm_src_path}/rvm" ]] || \mkdir -p "${rvm_src_path}/rvm"
|
||||
__rvm_cd "${rvm_src_path}/rvm" ||
|
||||
{
|
||||
_return=$?
|
||||
log "Could not change directory '${rvm_src_path}/rvm'."
|
||||
return $_return
|
||||
}
|
||||
|
||||
rm -rf ${rvm_src_path}/rvm/*
|
||||
__rvm_debug_command $rvm_tar_command xzf ${rvm_archives_path}/${_file} ${rvm_tar_options:-} --strip-components 1 ||
|
||||
{
|
||||
_return=$?
|
||||
log "Could not extract RVM sources."
|
||||
return $_return
|
||||
}
|
||||
}
|
||||
|
||||
rvm_install_default_settings()
|
||||
{
|
||||
# Tracing, if asked for.
|
||||
if
|
||||
[[ "$*" == *--trace* ]] || (( ${rvm_trace_flag:-0} > 0 ))
|
||||
then
|
||||
set -o xtrace
|
||||
rvm_trace_flag=1
|
||||
fi
|
||||
|
||||
# Variable initialization, remove trailing slashes if they exist on HOME
|
||||
true \
|
||||
${rvm_trace_flag:=0} ${rvm_debug_flag:=0}\
|
||||
${rvm_ignore_rvmrc:=0} HOME="${HOME%%+(\/)}"
|
||||
|
||||
if
|
||||
(( rvm_ignore_rvmrc == 0 ))
|
||||
then
|
||||
for rvmrc in /etc/rvmrc "$HOME/.rvmrc"
|
||||
do
|
||||
if
|
||||
[[ -s "$rvmrc" ]]
|
||||
then
|
||||
if
|
||||
GREP_OPTIONS="" \grep '^\s*rvm .*$' "$rvmrc" >/dev/null 2>&1
|
||||
then
|
||||
printf "%b" "
|
||||
Error: $rvmrc is for rvm settings only.
|
||||
rvm CLI may NOT be called from within $rvmrc.
|
||||
Skipping the loading of $rvmrc
|
||||
"
|
||||
exit 1
|
||||
else
|
||||
source "$rvmrc"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if
|
||||
[[ -z "${rvm_path:-}" ]]
|
||||
then
|
||||
if
|
||||
(( UID == 0 ))
|
||||
then
|
||||
rvm_user_install_flag=0
|
||||
rvm_prefix="/usr/local"
|
||||
rvm_path="${rvm_prefix}/rvm"
|
||||
else
|
||||
rvm_user_install_flag=1
|
||||
rvm_prefix="$HOME"
|
||||
rvm_path="${rvm_prefix}/.rvm"
|
||||
fi
|
||||
fi
|
||||
if [[ -z "${rvm_prefix}" ]]
|
||||
then rvm_prefix=$( dirname $rvm_path )
|
||||
fi
|
||||
|
||||
# duplication marker kkdfkgnjfndgjkndfjkgnkfjdgn
|
||||
[[ -n "${rvm_user_install_flag:-}" ]] ||
|
||||
case "$rvm_path" in
|
||||
(/usr/local/rvm) rvm_user_install_flag=0 ;;
|
||||
($HOME/*|/${USER// /_}*) rvm_user_install_flag=1 ;;
|
||||
(*) rvm_user_install_flag=0 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
rvm_install_parse_params()
|
||||
{
|
||||
install_rubies=()
|
||||
install_gems=()
|
||||
flags=( ./scripts/install )
|
||||
forwarded_flags=()
|
||||
while
|
||||
(( $# > 0 ))
|
||||
do
|
||||
token="$1"
|
||||
shift
|
||||
case "$token" in
|
||||
|
||||
(--trace)
|
||||
set -o xtrace
|
||||
rvm_trace_flag=1
|
||||
flags=( -x "${flags[@]}" "$token" )
|
||||
forwarded_flags+=( "$token" )
|
||||
;;
|
||||
|
||||
(--debug|--quiet-curl)
|
||||
flags+=( "$token" )
|
||||
forwarded_flags+=( "$token" )
|
||||
token=${token#--}
|
||||
token=${token//-/_}
|
||||
export "rvm_${token}_flag"=1
|
||||
printf "%b" "Turning on ${token/_/ } mode.\n"
|
||||
;;
|
||||
|
||||
(--path)
|
||||
if [[ -n "${1:-}" ]]
|
||||
then
|
||||
rvm_path="$1"
|
||||
shift
|
||||
else
|
||||
fail "--path must be followed by a path."
|
||||
fi
|
||||
;;
|
||||
|
||||
(--branch|branch) # Install RVM from a given branch
|
||||
if [[ -n "${1:-}" ]]
|
||||
then
|
||||
case "$1" in
|
||||
(/*)
|
||||
branch=${1#/}
|
||||
;;
|
||||
(*/)
|
||||
branch=master
|
||||
if [[ "${1%/}" -ne wayneeseguin ]] && [[ "${1%/}" -ne mpapis ]]
|
||||
then sources=(github.com/${1%/}/rvm)
|
||||
fi
|
||||
;;
|
||||
(*/*)
|
||||
branch=${1#*/}
|
||||
if [[ "${1%%/*}" -ne wayneeseguin ]] && [[ "${1%%/*}" -ne mpapis ]]
|
||||
then sources=(github.com/${1%%/*}/rvm)
|
||||
fi
|
||||
;;
|
||||
(*)
|
||||
branch="$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
else
|
||||
fail "--branch must be followed by a branchname."
|
||||
fi
|
||||
;;
|
||||
|
||||
(--source|source)
|
||||
if [[ -n "${1:-}" ]]
|
||||
then
|
||||
if [[ "$1" = */*/* ]]
|
||||
then
|
||||
sources=($1)
|
||||
shift
|
||||
else
|
||||
fail "--source must be in the format <domain>/<account>/<repo>."
|
||||
fi
|
||||
else
|
||||
fail "--source must be followed by a source."
|
||||
fi
|
||||
;;
|
||||
|
||||
(--user-install|--ignore-dotfiles)
|
||||
token=${token#--}
|
||||
token=${token//-/_}
|
||||
export "rvm_${token}_flag"=1
|
||||
printf "%b" "Turning on ${token/_/ } mode.\n"
|
||||
;;
|
||||
|
||||
(--auto-dotfiles)
|
||||
flags+=( "$token" )
|
||||
export "rvm_auto_dotfiles_flag"=1
|
||||
printf "%b" "Turning on auto dotfiles mode.\n"
|
||||
;;
|
||||
|
||||
(--auto)
|
||||
export "rvm_auto_dotfiles_flag"=1
|
||||
printf "%b" "Warning, --auto is deprecated in favor of --auto-dotfiles.\n"
|
||||
;;
|
||||
|
||||
(--verify-downloads)
|
||||
if [[ -n "${1:-}" ]]
|
||||
then
|
||||
export rvm_verify_downloads_flag="$1"
|
||||
forwarded_flags+=( "$token" "$1" )
|
||||
shift
|
||||
else
|
||||
fail "--verify-downloads must be followed by level(0|1|2)."
|
||||
fi
|
||||
;;
|
||||
|
||||
(--autolibs=*)
|
||||
flags+=( "$token" )
|
||||
export rvm_autolibs_flag="${token#--autolibs=}"
|
||||
forwarded_flags+=( "$token" )
|
||||
;;
|
||||
|
||||
(--without-gems=*|--with-gems=*|--with-default-gems=*)
|
||||
flags+=( "$token" )
|
||||
value="${token#*=}"
|
||||
token="${token%%=*}"
|
||||
token="${token#--}"
|
||||
token="${token//-/_}"
|
||||
export "rvm_${token}"="${value}"
|
||||
printf "%b" "Installing RVM ${token/_/ }: ${value}.\n"
|
||||
;;
|
||||
|
||||
(--version|version)
|
||||
version="$1"
|
||||
shift
|
||||
;;
|
||||
|
||||
(head|master)
|
||||
version="head"
|
||||
branch="master"
|
||||
;;
|
||||
|
||||
(stable)
|
||||
version="latest"
|
||||
;;
|
||||
|
||||
(latest|latest-*|+([[:digit:]]).+([[:digit:]]).+([[:digit:]]))
|
||||
version="$token"
|
||||
;;
|
||||
|
||||
(--ruby)
|
||||
install_rubies+=( ruby )
|
||||
;;
|
||||
|
||||
(--ruby=*)
|
||||
token=${token#--ruby=}
|
||||
install_rubies+=( ${token//,/ } )
|
||||
;;
|
||||
|
||||
(--rails)
|
||||
install_gems+=( rails )
|
||||
;;
|
||||
|
||||
(--gems=*)
|
||||
token=${token#--gems=}
|
||||
install_gems+=( ${token//,/ } )
|
||||
;;
|
||||
|
||||
(--add-to-rvm-group)
|
||||
export rvm_add_users_to_rvm_group="$1"
|
||||
shift
|
||||
;;
|
||||
|
||||
(help|usage)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
|
||||
(*)
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
done
|
||||
|
||||
if (( ${#install_gems[@]} > 0 && ${#install_rubies[@]} == 0 ))
|
||||
then install_rubies=( ruby )
|
||||
fi
|
||||
|
||||
true "${version:=head}"
|
||||
true "${branch:=master}"
|
||||
|
||||
if [[ -z "${sources[@]}" ]]
|
||||
then sources=("${DEFAULT_SOURCES[@]}")
|
||||
fi
|
||||
|
||||
rvm_src_path="$rvm_path/src"
|
||||
rvm_archives_path="$rvm_path/archives"
|
||||
rvm_releases_url="https://rvm.io/releases"
|
||||
}
|
||||
|
||||
rvm_install_validate_rvm_path()
|
||||
{
|
||||
case "$rvm_path" in
|
||||
(*[[:space:]]*)
|
||||
printf "%b" "
|
||||
It looks you are one of the happy *space* users(in home dir name),
|
||||
RVM is not yet fully ready for it, use this trick to fix it:
|
||||
|
||||
sudo mkdir -p /${USER// /_}.rvm
|
||||
sudo chown -R \"$USER:\" /${USER// /_}.rvm
|
||||
echo \"export rvm_path=/${USER// /_}.rvm\" >> \"$HOME/.rvmrc\"
|
||||
|
||||
and start installing again.
|
||||
|
||||
"
|
||||
exit 2
|
||||
;;
|
||||
(/usr/share/ruby-rvm)
|
||||
printf "%b" "
|
||||
It looks you are one of the happy Ubuntu users,
|
||||
RVM packaged by Ubuntu is old and broken,
|
||||
follow this link for details how to fix:
|
||||
|
||||
http://stackoverflow.com/a/9056395/497756
|
||||
|
||||
"
|
||||
[[ "${rvm_uses_broken_ubuntu_path:-no}" == "yes" ]] || exit 3
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "$rvm_path" != "/"* ]]
|
||||
then fail "The rvm install path must be fully qualified. Tried $rvm_path"
|
||||
fi
|
||||
}
|
||||
|
||||
rvm_install_select_and_get_version()
|
||||
{
|
||||
typeset _version_release
|
||||
|
||||
for dir in "$rvm_src_path" "$rvm_archives_path"
|
||||
do
|
||||
[[ -d "$dir" ]] || mkdir -p "$dir"
|
||||
done
|
||||
|
||||
_version_release="${version}"
|
||||
case "${version}" in
|
||||
(head)
|
||||
_version_release="${branch}"
|
||||
install_head sources[@] ${branch:-master} || exit $?
|
||||
;;
|
||||
|
||||
(latest)
|
||||
install_release sources[@] $(fetch_version sources[@]) || exit $?
|
||||
;;
|
||||
|
||||
(latest-minor)
|
||||
version="$(\cat "$rvm_path/VERSION")"
|
||||
install_release sources[@] $(fetch_version sources[@] ${version%.*}) || exit $?
|
||||
;;
|
||||
|
||||
(latest-*)
|
||||
install_release sources[@] $(fetch_version sources[@] ${version#latest-}) || exit $?
|
||||
;;
|
||||
|
||||
(+([[:digit:]]).+([[:digit:]]).+([[:digit:]])) # x.y.z
|
||||
install_release sources[@] ${version} || exit $?
|
||||
;;
|
||||
|
||||
(*)
|
||||
fail "Something went wrong, unrecognized version '$version'"
|
||||
;;
|
||||
esac
|
||||
echo "${_version_release}" > "$rvm_path/RELEASE"
|
||||
}
|
||||
|
||||
rvm_install_main()
|
||||
{
|
||||
[[ -f ./scripts/install ]] ||
|
||||
{
|
||||
log "'./scripts/install' can not be found for installation, something went wrong, it usally means your 'tar' is broken, please report it here: https://github.com/wayneeseguin/rvm/issues"
|
||||
return 127
|
||||
}
|
||||
|
||||
# required flag - path to install
|
||||
flags+=( --path "$rvm_path" )
|
||||
\command bash "${flags[@]}"
|
||||
}
|
||||
|
||||
rvm_install_ruby_and_gems()
|
||||
(
|
||||
if
|
||||
(( ${#install_rubies[@]} > 0 ))
|
||||
then
|
||||
source ${rvm_scripts_path:-${rvm_path}/scripts}/rvm
|
||||
source ${rvm_scripts_path:-${rvm_path}/scripts}/version
|
||||
__rvm_version
|
||||
|
||||
for _ruby in ${install_rubies[@]}
|
||||
do command rvm "${forwarded_flags[@]}" install ${_ruby} -j 2
|
||||
done
|
||||
# set the first one as default, skip rest
|
||||
for _ruby in ${install_rubies[@]}
|
||||
do
|
||||
rvm "${forwarded_flags[@]}" alias create default ${_ruby}
|
||||
break
|
||||
done
|
||||
|
||||
for _gem in ${install_gems[@]}
|
||||
do rvm "${forwarded_flags[@]}" all do gem install ${_gem}
|
||||
done
|
||||
|
||||
printf "%b" "
|
||||
* To start using RVM you need to run \`source $rvm_path/scripts/rvm\`
|
||||
in all your open shell windows, in rare cases you need to reopen all shell windows.
|
||||
"
|
||||
|
||||
if
|
||||
[[ "${install_gems[*]}" == *"rails"* ]]
|
||||
then
|
||||
printf "%b" "
|
||||
* To start using rails you need to run \`rails new <project_dir>\`.
|
||||
"
|
||||
fi
|
||||
fi
|
||||
)
|
||||
|
||||
rvm_install()
|
||||
{
|
||||
rvm_install_initialize
|
||||
rvm_install_commands_setup
|
||||
rvm_install_default_settings
|
||||
rvm_install_parse_params "$@"
|
||||
rvm_install_validate_rvm_path
|
||||
rvm_install_select_and_get_version
|
||||
rvm_install_main
|
||||
rvm_install_ruby_and_gems
|
||||
}
|
||||
|
||||
rvm_install "$@"
|
|
@ -0,0 +1,77 @@
|
|||
nailgun-log-directory:
|
||||
file.directory:
|
||||
- name: /var/log/nailgun
|
||||
- makedirs: True
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
|
||||
remote-log-directory:
|
||||
file.directory:
|
||||
- name: /var/log/remote
|
||||
- makedirs: True
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
|
||||
nailgun-user:
|
||||
postgres_user.present:
|
||||
- name: nailgun
|
||||
- createdb: True
|
||||
- createroles: True
|
||||
- superuser: True
|
||||
- password: nailgun
|
||||
- require:
|
||||
- pkg: packages
|
||||
|
||||
nailgun-db:
|
||||
postgres_database.present:
|
||||
- name: nailgun
|
||||
- db_user: nailgun
|
||||
- db_password: nailgun
|
||||
- require:
|
||||
- pkg: packages
|
||||
- postgres_user: nailgun-user
|
||||
|
||||
/usr/bin/nailgun_clean_db.sh:
|
||||
file.managed:
|
||||
- source: salt://nailgun/nailgun_clean_db.sh
|
||||
- mode: 0777
|
||||
|
||||
raemon-source:
|
||||
git.latest:
|
||||
- name: https://github.com/nulayer/raemon.git
|
||||
- rev: b78eaae57c8e836b8018386dd96527b8d9971acc
|
||||
- target: /home/vagrant/raemon
|
||||
- user: vagrant
|
||||
- group: vagrant
|
||||
- unless: ls /home/vagrant/raemon
|
||||
|
||||
rvm-keys:
|
||||
cmd.run:
|
||||
- name: gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
|
||||
|
||||
get-rvm-io:
|
||||
cmd.script:
|
||||
- name: salt://nailgun/get-rvm-io.sh stable
|
||||
- source: salt://nailgun/get-rvm-io.sh
|
||||
- shell: /bin/bash
|
||||
- unless: ls /usr/local/rvm
|
||||
- require:
|
||||
- cmd: rvm-keys
|
||||
|
||||
packages-ruby-2.1:
|
||||
cmd.run:
|
||||
- name: source /etc/profile.d/rvm.sh && rvm install 2.1
|
||||
- unless: ls /usr/local/rvm/rubies/ruby-2.1.5/bin/ruby
|
||||
- require:
|
||||
- cmd: get-rvm-io
|
||||
|
||||
raemon-gem:
|
||||
cmd.run:
|
||||
- name: source /etc/profile.d/rvm.sh && rvm user gemsets && rvm gemset create astute && rvm use 2.1@astute && gem build raemon.gemspec && gem install raemon-0.3.0.gem && gem install bundler
|
||||
- user: vagrant
|
||||
- group: vagrant
|
||||
- cwd: /home/vagrant/raemon
|
||||
- unless: /home/vagrant/raemon/raemon-0.3.0.gem
|
||||
- require:
|
||||
- cmd: packages-ruby-2.1
|
||||
- git: raemon-source
|
|
@ -0,0 +1,28 @@
|
|||
#!/bin/bash
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
sudo su postgres -c "psql -c \"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid() AND datname = 'nailgun';\""
|
||||
sudo su postgres -c "psql -c \"DROP DATABASE nailgun;\""
|
||||
sudo su postgres -c "psql -c \"CREATE DATABASE nailgun WITH OWNER nailgun;\""
|
||||
|
||||
. /etc/bash_completion.d/virtualenvwrapper
|
||||
|
||||
workon fuel
|
||||
|
||||
cd /sources/fuel-web/nailgun
|
||||
|
||||
./manage.py syncdb
|
||||
./manage.py loaddefault # It loads all basic fixtures listed in settings.yaml
|
||||
./manage.py loaddata nailgun/fixtures/sample_environment.json # Loads fake nodes
|
|
@ -0,0 +1,20 @@
|
|||
#!/bin/bash
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
cd $HOME
|
||||
git clone git://github.com/n1k0/casperjs.git
|
||||
cd casperjs
|
||||
git checkout tags/1.0.0-RC4
|
||||
sudo ln -sf `pwd`/bin/casperjs /usr/local/bin/casperjs
|
|
@ -0,0 +1,41 @@
|
|||
npm-gulp:
|
||||
cmd.run:
|
||||
- name: npm install -g gulp
|
||||
- unless: npm ls -g gulp
|
||||
|
||||
phantomjs:
|
||||
cmd.run:
|
||||
- name: npm install -g phantomjs
|
||||
- unless: npm ls -g phantomjs
|
||||
|
||||
casperjs:
|
||||
cmd.script:
|
||||
- name: salt://npm/casperjs.sh
|
||||
- cwd: {{ pillar['HOME'] }}
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
- creates: {{ pillar['HOME'] }}/casperjs
|
||||
|
||||
fuel-web-npm-install:
|
||||
cmd.run:
|
||||
- name: npm install
|
||||
- cwd: /sources/fuel-web/nailgun
|
||||
- require:
|
||||
#- git: fuel-web-source
|
||||
- cmd: npm-gulp
|
||||
|
||||
fuel-web-gulp:
|
||||
cmd.run:
|
||||
- name: gulp
|
||||
- cwd: /sources/fuel-web/nailgun
|
||||
- require:
|
||||
- cmd: fuel-web-npm-install
|
||||
|
||||
fuel-web-owner:
|
||||
file.directory:
|
||||
- name: /sources/fuel-web
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
- recurse:
|
||||
- user
|
||||
- group
|
|
@ -0,0 +1,17 @@
|
|||
[alias]
|
||||
co = checkout
|
||||
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
|
||||
gr = log --oneline --abbrev-commit --all --graph --decorate --color
|
||||
grs = log --oneline --abbrev-commit --all --graph --decorate --color --simplify-by-decoration
|
||||
|
||||
hist = log --graph --full-history --all --pretty=format:'%Cred%h%Creset %ad %s %C(yellow)%d%Creset %C(bold blue)<%an>%Creset' --date=short
|
||||
st = status
|
||||
|
||||
[color]
|
||||
ui = true
|
||||
diff = true
|
||||
status = true
|
||||
branch = true
|
||||
|
||||
[push]
|
||||
default = upstream
|
|
@ -0,0 +1,77 @@
|
|||
packages-initial:
|
||||
pkg.latest:
|
||||
- pkgs:
|
||||
- curl
|
||||
|
||||
pkgrepos:
|
||||
cmd.run:
|
||||
- name: curl -sL https://deb.nodesource.com/setup | bash -
|
||||
- user: root
|
||||
- group: root
|
||||
- unless: ls /etc/apt/sources.list.d/nodesource.list
|
||||
- shell: /bin/bash
|
||||
- require:
|
||||
- pkg: packages-initial
|
||||
|
||||
packages:
|
||||
pkg.latest:
|
||||
- pkgs:
|
||||
- bundler
|
||||
- build-essential
|
||||
- debootstrap
|
||||
- extlinux
|
||||
- genisoimage
|
||||
- git
|
||||
- htop
|
||||
- imagemagick
|
||||
- isomd5sum
|
||||
- kpartx
|
||||
- libmysqlclient-dev
|
||||
- libvirt-bin
|
||||
- make
|
||||
- nginx
|
||||
- nodejs
|
||||
- postgresql
|
||||
- postgresql-server-dev-9.3
|
||||
- python-dev
|
||||
- python-ipaddr
|
||||
- python-paramiko
|
||||
- python-pip
|
||||
- python-nose
|
||||
- python-software-properties
|
||||
- python-virtualenv
|
||||
- python-yaml
|
||||
- rsync
|
||||
- ruby2.0
|
||||
- ruby-dev
|
||||
- rubygems-integration
|
||||
- screen
|
||||
- silversearcher-ag
|
||||
- software-properties-common
|
||||
- tmux
|
||||
- unzip
|
||||
- vim
|
||||
- vim-nox
|
||||
- virtualenvwrapper
|
||||
- yum
|
||||
- yum-utils
|
||||
- require:
|
||||
- cmd: pkgrepos
|
||||
|
||||
py26-fake-interpreter:
|
||||
file.symlink:
|
||||
- name: /usr/bin/python2.6
|
||||
- target: /usr/bin/python2.7
|
||||
|
||||
gitconfig:
|
||||
file.managed:
|
||||
- name: {{ pillar['HOME'] }}/.gitconfig
|
||||
- source: salt://packages/gitconfig
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
|
||||
/etc/tmux.conf:
|
||||
file.managed:
|
||||
- source: salt://packages/tmux.conf
|
||||
- require:
|
||||
- pkg: packages
|
|
@ -0,0 +1,2 @@
|
|||
set -g default-command "$SHELL --login"
|
||||
set -g default-shell $SHELL
|
|
@ -0,0 +1,15 @@
|
|||
postgresql-pg_hba:
|
||||
file.managed:
|
||||
- name: /etc/postgresql/9.3/main/pg_hba.conf
|
||||
- source: salt://postgresql/pg_hba.conf
|
||||
- require:
|
||||
- pkg: packages
|
||||
|
||||
postgresql-service:
|
||||
service:
|
||||
- running
|
||||
- name: postgresql
|
||||
- enable: True
|
||||
- reload: True
|
||||
- watch:
|
||||
- file: /etc/postgresql/9.3/main/pg_hba.conf
|
|
@ -0,0 +1,100 @@
|
|||
# PostgreSQL Client Authentication Configuration File
|
||||
# ===================================================
|
||||
#
|
||||
# Refer to the "Client Authentication" section in the PostgreSQL
|
||||
# documentation for a complete description of this file. A short
|
||||
# synopsis follows.
|
||||
#
|
||||
# This file controls: which hosts are allowed to connect, how clients
|
||||
# are authenticated, which PostgreSQL user names they can use, which
|
||||
# databases they can access. Records take one of these forms:
|
||||
#
|
||||
# local DATABASE USER METHOD [OPTIONS]
|
||||
# host DATABASE USER ADDRESS METHOD [OPTIONS]
|
||||
# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
|
||||
# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
|
||||
#
|
||||
# (The uppercase items must be replaced by actual values.)
|
||||
#
|
||||
# The first field is the connection type: "local" is a Unix-domain
|
||||
# socket, "host" is either a plain or SSL-encrypted TCP/IP socket,
|
||||
# "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a
|
||||
# plain TCP/IP socket.
|
||||
#
|
||||
# DATABASE can be "all", "sameuser", "samerole", "replication", a
|
||||
# database name, or a comma-separated list thereof. The "all"
|
||||
# keyword does not match "replication". Access to replication
|
||||
# must be enabled in a separate record (see example below).
|
||||
#
|
||||
# USER can be "all", a user name, a group name prefixed with "+", or a
|
||||
# comma-separated list thereof. In both the DATABASE and USER fields
|
||||
# you can also write a file name prefixed with "@" to include names
|
||||
# from a separate file.
|
||||
#
|
||||
# ADDRESS specifies the set of hosts the record matches. It can be a
|
||||
# host name, or it is made up of an IP address and a CIDR mask that is
|
||||
# an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that
|
||||
# specifies the number of significant bits in the mask. A host name
|
||||
# that starts with a dot (.) matches a suffix of the actual host name.
|
||||
# Alternatively, you can write an IP address and netmask in separate
|
||||
# columns to specify the set of hosts. Instead of a CIDR-address, you
|
||||
# can write "samehost" to match any of the server's own IP addresses,
|
||||
# or "samenet" to match any address in any subnet that the server is
|
||||
# directly connected to.
|
||||
#
|
||||
# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
|
||||
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert". Note that
|
||||
# "password" sends passwords in clear text; "md5" is preferred since
|
||||
# it sends encrypted passwords.
|
||||
#
|
||||
# OPTIONS are a set of options for the authentication in the format
|
||||
# NAME=VALUE. The available options depend on the different
|
||||
# authentication methods -- refer to the "Client Authentication"
|
||||
# section in the documentation for a list of which options are
|
||||
# available for which authentication methods.
|
||||
#
|
||||
# Database and user names containing spaces, commas, quotes and other
|
||||
# special characters must be quoted. Quoting one of the keywords
|
||||
# "all", "sameuser", "samerole" or "replication" makes the name lose
|
||||
# its special character, and just match a database or username with
|
||||
# that name.
|
||||
#
|
||||
# This file is read on server startup and when the postmaster receives
|
||||
# a SIGHUP signal. If you edit the file on a running system, you have
|
||||
# to SIGHUP the postmaster for the changes to take effect. You can
|
||||
# use "pg_ctl reload" to do that.
|
||||
|
||||
# Put your actual configuration here
|
||||
# ----------------------------------
|
||||
#
|
||||
# If you want to allow non-local connections, you need to add more
|
||||
# "host" records. In that case you will also need to make PostgreSQL
|
||||
# listen on a non-local interface via the listen_addresses
|
||||
# configuration parameter, or via the -i or -h command line switches.
|
||||
|
||||
|
||||
|
||||
|
||||
# DO NOT DISABLE!
|
||||
# If you change this first entry you will need to make sure that the
|
||||
# database superuser can access the database using some other method.
|
||||
# Noninteractive access to all databases is required during automatic
|
||||
# maintenance (custom daily cronjobs, replication, and similar tasks).
|
||||
#
|
||||
# Database administrative login by Unix domain socket
|
||||
local all postgres peer
|
||||
local all nailgun md5
|
||||
|
||||
# TYPE DATABASE USER ADDRESS METHOD
|
||||
|
||||
# "local" is for Unix domain socket connections only
|
||||
local all all peer
|
||||
# IPv4 local connections:
|
||||
host all all 127.0.0.1/32 md5
|
||||
# IPv6 local connections:
|
||||
host all all ::1/128 md5
|
||||
# Allow replication connections from localhost, by a user with the
|
||||
# replication privilege.
|
||||
#local replication postgres peer
|
||||
#host replication postgres 127.0.0.1/32 md5
|
||||
#host replication postgres ::1/128 md5
|
|
@ -0,0 +1,111 @@
|
|||
sources-directory:
|
||||
file.directory:
|
||||
- name: /vagrant/sources
|
||||
- makedirs: true
|
||||
- require:
|
||||
- pkg: packages
|
||||
|
||||
fuel-astute-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-astute
|
||||
- target: /vagrant/sources/fuel-astute
|
||||
- unless: ls /vagrant/sources/fuel-astute
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-devops-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-devops
|
||||
- target: /vagrant/sources/fuel-devops
|
||||
- unless: ls /vagrant/sources/fuel-devops
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-docs-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-docs
|
||||
- target: /vagrant/sources/fuel-docs
|
||||
- unless: ls /vagrant/sources/fuel-docs
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-library-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-library
|
||||
- target: /vagrant/sources/fuel-library
|
||||
- unless: ls /vagrant/sources/fuel-library
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-main-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-main
|
||||
- target: /vagrant/sources/fuel-main
|
||||
- unless: ls /vagrant/sources/fuel-main
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-ostf-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-ostf
|
||||
- target: /vagrant/sources/fuel-ostf
|
||||
- unless: ls /vagrant/sources/fuel-ostf
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-plugins-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-plugins
|
||||
- target: /vagrant/sources/fuel-plugins
|
||||
- unless: ls /vagrant/sources/fuel-plugins
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-qa-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-qa
|
||||
- target: /vagrant/sources/fuel-qa
|
||||
- unless: ls /vagrant/sources/fuel-qa
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-specs-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-specs
|
||||
- target: /vagrant/sources/fuel-specs
|
||||
- unless: ls /vagrant/sources/fuel-specs
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
fuel-web-source:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/fuel-web
|
||||
- target: /vagrant/sources/fuel-web
|
||||
- unless: ls /vagrant/sources/fuel-web
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
python-fuelclient:
|
||||
git.latest:
|
||||
- name: https://github.com/stackforge/python-fuelclient
|
||||
- target: /vagrant/sources/python-fuelclient
|
||||
- unless: ls /vagrant/sources/python-fuelclient
|
||||
- require:
|
||||
- file: sources-directory
|
||||
|
||||
rsync-sources:
|
||||
cmd.run:
|
||||
- name: rsync -az /vagrant/sources/ /sources
|
||||
- creates: /sources/fuel-web # creates more but I think Salt doesn't support this
|
||||
- require:
|
||||
- git: fuel-astute-source
|
||||
- git: fuel-docs-source
|
||||
- git: fuel-devops-source
|
||||
- git: fuel-library-source
|
||||
- git: fuel-main-source
|
||||
- git: fuel-ostf-source
|
||||
- git: fuel-plugins-source
|
||||
- git: fuel-qa-source
|
||||
- git: fuel-specs-source
|
||||
- git: fuel-web-source
|
||||
- git: python-fuelclient
|
|
@ -0,0 +1,9 @@
|
|||
base:
|
||||
'*':
|
||||
- packages
|
||||
- postgresql
|
||||
- sources
|
||||
- nailgun
|
||||
- user
|
||||
- virtualenv
|
||||
- npm
|
|
@ -0,0 +1,21 @@
|
|||
vagrant-virtualenv-path:
|
||||
file.append:
|
||||
- name: {{ pillar['HOME'] }}/.bashrc
|
||||
- text: export WORKON_HOME={{ pillar['HOME'] }}/.virtualenvs
|
||||
- require:
|
||||
- pkg: packages
|
||||
|
||||
vagrant-virtualenv-bash-source:
|
||||
file.append:
|
||||
- name: {{ pillar['HOME'] }}/.bashrc
|
||||
- text: . /etc/bash_completion.d/virtualenvwrapper
|
||||
- require:
|
||||
- pkg: packages
|
||||
- file: vagrant-virtualenv-path
|
||||
|
||||
vagrant-bash-profile:
|
||||
file.managed:
|
||||
- name: {{ pillar['HOME'] }}/.bash_profile
|
||||
- source: salt://user/vagrant-bash-profile
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
|
@ -0,0 +1,27 @@
|
|||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
case $- in *i*) . ~/.bashrc;; esac
|
||||
|
||||
# Log tmux output to $HOME/logs. Current log name can be fetched by getting
|
||||
# the value of TMUX_LOG_FILE variable in a tmux window
|
||||
if [[ $TERM = "screen" ]] && [[ $(ps -p $PPID -o comm=) = "tmux" ]]; then
|
||||
mkdir $HOME/logs 2> /dev/null
|
||||
logname="$(date '+%d%m%Y%H%M%S').tmux.log"
|
||||
export TMUX_LOG_FILE=$HOME/logs/${logname}
|
||||
script -f $TMUX_LOG_FILE
|
||||
|
||||
exit
|
||||
fi
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
fuel-virtualenv-dir:
|
||||
file.directory:
|
||||
- name: {{ pillar['HOME'] }}/.virtualenvs
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
- makedirs: True
|
||||
|
||||
fuel-virtualenv:
|
||||
virtualenv.managed:
|
||||
- name: {{ pillar['HOME'] }}/.virtualenvs/fuel
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
- require:
|
||||
- file: fuel-virtualenv-dir
|
||||
|
||||
fuel-virtualenv-requirements:
|
||||
cmd.script:
|
||||
- name: salt://virtualenv/virtualenv-requirements.sh
|
||||
- shell: /bin/bash
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
- cwd: {{ pillar['HOME'] }}
|
||||
#- creates: {{ pillar['HOME'] }}/.virtualenvs/fuel
|
||||
- require:
|
||||
- virtualenv: fuel-virtualenv
|
||||
|
||||
fuel-virtualenv-postactivate-script:
|
||||
file.managed:
|
||||
- name: {{ pillar['HOME'] }}/.virtualenvs/fuel/bin/postactivate
|
||||
- source: salt://virtualenv/postactivate
|
||||
- group: {{ pillar['GROUP'] }}
|
||||
- user: {{ pillar['USER'] }}
|
||||
- mode: 744
|
||||
- require:
|
||||
- virtualenv: fuel-virtualenv
|
|
@ -0,0 +1,22 @@
|
|||
#!/bin/bash
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
export WORK_DIR=/sources/fuel-web
|
||||
|
||||
export PYTHONPATH=$WORK_DIR/nailgun
|
||||
|
||||
. /etc/profile.d/rvm.sh
|
||||
|
||||
cd $WORK_DIR
|
|
@ -0,0 +1,25 @@
|
|||
#!/bin/bash
|
||||
# Copyright 2015 Mirantis, Inc.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
. /etc/bash_completion.d/virtualenvwrapper
|
||||
|
||||
workon fuel
|
||||
|
||||
pip install /sources/fuel-web/shotgun # this Fuel project is listed in setup.py requirements
|
||||
pip install -r /sources/fuel-web/nailgun/requirements.txt
|
||||
|
||||
pip install tox
|
||||
pip install ipython
|
||||
pip install pudb
|
|
@ -0,0 +1,5 @@
|
|||
file_client: local
|
||||
|
||||
pillar_roots:
|
||||
base:
|
||||
- /srv/pillar
|
Loading…
Reference in New Issue