Deprecate murano-repository

Change-Id: I54050e53da6874cd83260de5c1a4304504c89cdd
This commit is contained in:
Ruslan Kamaldinov 2014-04-16 22:10:49 +04:00
parent b643c8d9fe
commit 8149d27d80
214 changed files with 4 additions and 25455 deletions

191
LICENSE
View File

@ -1,191 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction, and
distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by the copyright
owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities
that control, are controlled by, or are under common control with that entity.
For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity exercising
permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including
but not limited to software source code, documentation source, and configuration
files.
"Object" form shall mean any form resulting from mechanical transformation or
translation of a Source form, including but not limited to compiled object code,
generated documentation, and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or Object form, made
available under the License, as indicated by a copyright notice that is included
in or attached to the work (an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object form, that
is based on (or derived from) the Work and for which the editorial revisions,
annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works
shall not include works that remain separable from, or merely link (or bind by
name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version
of the Work and any modifications or additions to that Work or Derivative Works
thereof, that is intentionally submitted to Licensor for inclusion in the Work
by the copyright owner or by an individual or Legal Entity authorized to submit
on behalf of the copyright owner. For the purposes of this definition,
"submitted" means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems, and
issue tracking systems that are managed by, or on behalf of, the Licensor for
the purpose of discussing and improving the Work, but excluding communication
that is conspicuously marked or otherwise designated in writing by the copyright
owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
of whom a Contribution has been received by Licensor and subsequently
incorporated within the Work.
2. Grant of Copyright License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the Work and such
Derivative Works in Source or Object form.
3. Grant of Patent License.
Subject to the terms and conditions of this License, each Contributor hereby
grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
irrevocable (except as stated in this section) patent license to make, have
made, use, offer to sell, sell, import, and otherwise transfer the Work, where
such license applies only to those patent claims licensable by such Contributor
that are necessarily infringed by their Contribution(s) alone or by combination
of their Contribution(s) with the Work to which such Contribution(s) was
submitted. If You institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work or a
Contribution incorporated within the Work constitutes direct or contributory
patent infringement, then any patent licenses granted to You under this License
for that Work shall terminate as of the date such litigation is filed.
4. Redistribution.
You may reproduce and distribute copies of the Work or Derivative Works thereof
in any medium, with or without modifications, and in Source or Object form,
provided that You meet the following conditions:
You must give any other recipients of the Work or Derivative Works a copy of
this License; and
You must cause any modified files to carry prominent notices stating that You
changed the files; and
You must retain, in the Source form of any Derivative Works that You distribute,
all copyright, patent, trademark, and attribution notices from the Source form
of the Work, excluding those notices that do not pertain to any part of the
Derivative Works; and
If the Work includes a "NOTICE" text file as part of its distribution, then any
Derivative Works that You distribute must include a readable copy of the
attribution notices contained within such NOTICE file, excluding those notices
that do not pertain to any part of the Derivative Works, in at least one of the
following places: within a NOTICE text file distributed as part of the
Derivative Works; within the Source form or documentation, if provided along
with the Derivative Works; or, within a display generated by the Derivative
Works, if and wherever such third-party notices normally appear. The contents of
the NOTICE file are for informational purposes only and do not modify the
License. You may add Your own attribution notices within Derivative Works that
You distribute, alongside or as an addendum to the NOTICE text from the Work,
provided that such additional attribution notices cannot be construed as
modifying the License.
You may add Your own copyright statement to Your modifications and may provide
additional or different license terms and conditions for use, reproduction, or
distribution of Your modifications, or for any such Derivative Works as a whole,
provided Your use, reproduction, and distribution of the Work otherwise complies
with the conditions stated in this License.
5. Submission of Contributions.
Unless You explicitly state otherwise, any Contribution intentionally submitted
for inclusion in the Work by You to the Licensor shall be under the terms and
conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of
any separate license agreement you may have executed with Licensor regarding
such Contributions.
6. Trademarks.
This License does not grant permission to use the trade names, trademarks,
service marks, or product names of the Licensor, except as required for
reasonable and customary use in describing the origin of the Work and
reproducing the content of the NOTICE file.
7. Disclaimer of Warranty.
Unless required by applicable law or agreed to in writing, Licensor provides the
Work (and each Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
including, without limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are
solely responsible for determining the appropriateness of using or
redistributing the Work and assume any risks associated with Your exercise of
permissions under this License.
8. Limitation of Liability.
In no event and under no legal theory, whether in tort (including negligence),
contract, or otherwise, unless required by applicable law (such as deliberate
and grossly negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special, incidental,
or consequential damages of any character arising as a result of this License or
out of the use or inability to use the Work (including but not limited to
damages for loss of goodwill, work stoppage, computer failure or malfunction, or
any and all other commercial damages or losses), even if such Contributor has
been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability.
While redistributing the Work or Derivative Works thereof, You may choose to
offer, and charge a fee for, acceptance of support, warranty, indemnity, or
other liability obligations and/or rights consistent with this License. However,
in accepting such obligations, You may act only on Your own behalf and on Your
sole responsibility, not on behalf of any other Contributor, and only if You
agree to indemnify, defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason of your
accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work
To apply the Apache License to your work, attach the following boilerplate
notice, with the fields enclosed by brackets "[]" replaced with your own
identifying information. (Don't include the brackets!) The text should be
enclosed in the appropriate comment syntax for the file format. We also
recommend that a file or class name and description of purpose be included on
the same "printed page" as the copyright notice for easier identification within
third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

View File

@ -1,13 +0,0 @@
include ChangeLog
include README.rst
include MANIFEST.in
include AUTHORS
include LICENSE
include ChangeLog
include babel.cfg
include tox.ini
include muranorepository/tests/test.conf
exclude .gitignore
exclude .gitreview
recursive-include etc *
global-exclude *.pyc

View File

@ -1,37 +1,5 @@
Murano DEPRECATED: murano-repository
====== =============================
Murano Project introduces an application catalog, which allows application
developers and cloud administrators to publish various cloud-ready
applications in a browsable categorised catalog, which may be used by the
cloud users (including the inexperienced ones) to pick-up the needed
applications and services and composes the reliable environments out of them
in a “push-the-button” manner.
murano-repository **Warning** - this repository is deprecated. All functionality has been moved
----------------- to `murano-api <https://git.openstack.org/cgit/stackforge/murano-api>`__
murano-repository is a project that serves as service endpoint for
application metadata distribution.
Project Resources
-----------------
* `Murano at Launchpad <http://launchpad.net/murano>`__
* `Wiki <https://wiki.openstack.org/wiki/Murano>`__
* `Code Review <https://review.openstack.org/>`__
* `Sources <https://wiki.openstack.org/wiki/Murano/SourceCode>`__
* `Developers Guide <http://murano-docs.github.io/latest/developers-guide/content/ch02.html>`__
How To Participate
------------------
If you would like to ask some questions or make proposals, feel free to reach
us on #murano IRC channel at FreeNode. Typically somebody from our team will
be online at IRC from 6:00 to 20:00 UTC. You can also contact Murano community
directly by openstack-dev@lists.openstack.org adding [Murano] to a subject.
Were holding public weekly meetings on Tuesdays at 17:00 UTC
on #openstack-meeting-alt IRC channel at FreeNode.
If you want to contribute either to docs or to code, simply send us change
request via `gerrit <https://review.openstack.org/>`__.
You can `file bugs <https://bugs.launchpad.net/murano/+filebug>`__ and
`register blueprints <https://blueprints.launchpad.net/murano/+addspec>`__ on
Launchpad.

View File

@ -1 +0,0 @@
[python: **.py]

View File

@ -1,379 +0,0 @@
#!/bin/bash
#
# Common functions file
#
DEBUGLVL=2
RUN_DIR=${RUN_DIR:-$(cd $(dirname "$0") && pwd)}
LOGFILE="$RUN_DIR/install.log"
PIPAPPS="pip python-pip pip-python"
PIPCMD=""
PIPARGS=""
TRBL_FILE=""
if [ "$DEBUGLVL" -eq 4 ]; then
set -x
fi
function log {
if [ "$DEBUGLVL" -gt 0 ]; then
chars=$(echo "@$" | wc -c)
case $DEBUGLVL in
1)
echo -e "LOG:>$@"
;;
2)
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" | tee --append $LOGFILE
;;
3)
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" >> $LOGFILE
;;
4)
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" | tee --append $LOGFILE
;;
esac
fi
}
function lowercase(){
echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
}
function get_os(){
KERNEL=$(uname -r)
MACH=$(uname -m)
OS=$(uname)
if [ "${OS}" = "Linux" ] ; then
if [ -f /etc/redhat-release ] ; then
DISTRO_BASED_ON='RedHat'
PACKAGER='yum'
PKG_MGR='rpm'
DIST=$(cat /etc/redhat-release |sed s/\ release.*//)
PSUEDONAME=$(cat /etc/redhat-release | sed s/.*\(// | sed s/\)//)
REV=$(cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//)
elif [ -f /etc/SuSE-release ] ; then
DISTRO_BASED_ON='SuSe'
PACKAGER='zypper'
PKG_MGR='rpm'
PSUEDONAME=$(cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//)
REV=$(cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //)
elif [ -f /etc/debian_version ] ; then
DISTRO_BASED_ON='Debian'
PACKAGER='apt-get'
PKG_MGR='dpkg'
DIST=$(cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }')
PSUEDONAME=$(cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }')
REV=$(cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }')
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[$(cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//)]"
fi
OS=$(lowercase $OS)
DISTRO_BASED_ON=$(lowercase $DISTRO_BASED_ON)
readonly OS
readonly DIST
readonly DISTRO_BASED_ON
readonly PSUEDONAME
readonly REV
readonly KERNEL
readonly MACH
#readonly PACKAGER
else
OS=unknown
readonly OS
log "Unsupported OS:\"$OS\", sorry, exiting!"
exit 1
fi
}
function find_or_install()
{
_searching_for=$1
_pkg_mrg_cmd=''
_pkgr_cmd=''
retval=0
case $(lowercase $DISTRO_BASED_ON) in
"debian")
_pkg_mrg_cmd="$PKG_MGR -s $_searching_for"
_pkgr_cmd="$PACKAGER install $_searching_for --yes"
;;
*)
_pkg_mrg_cmd="$PKG_MGR -q $_searching_for"
_pkgr_cmd="$PACKAGER install $_searching_for -y"
;;
esac
$_pkg_mrg_cmd > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "Package \"$_searching_for\" already installed"
retval=2
else
log "Installing \"$_searching_for\"..."
$_pkgr_cmd > /dev/null 2>&1
if [ $? -ne 0 ];then
log "...installation fails, exiting!"
retval=1
else
log "...success"
retval=0
fi
fi
return $retval
}
function is_py_package_installed()
{
retval=0
py_pkg=$1
found_pkg=$($PIPCMD freeze | grep -E "^$py_pkg")
if [ $? -ne 0 ]; then
retval=1
fi
echo $found_pkg
return $retval
}
function genpass()
{
echo $(date | md5sum |head -c${5:-13})
}
function shslash()
{
echo $1 | sed 's/\//\\\//g'
}
function split()
{
# Prefix local names with the function name to try to avoid conflicts
# local split_wordlist
split_wordlist="$1"
shift
read "$@" <<EOF-split-end-of-arguments
${split_wordlist}
EOF-split-end-of-arguments
}
# Returns true if v1 >= v2, false if v1 < v2
function version_ge()
{
# Prefix local names with the function name to try to avoid conflicts
# local version_ge_1 version_ge_2 version_ge_a version_ge_b
# local version_ge_save_ifs
version_ge_v1="$1"
version_ge_v2="$2"
version_ge_save_ifs="$IFS"
while test -n "${version_ge_v1}${version_ge_v2}"; do
IFS="."
split "$version_ge_v1" version_ge_a version_ge_v1
split "$version_ge_v2" version_ge_b version_ge_v2
IFS="$version_ge_save_ifs"
#echo " compare $version_ge_a $version_ge_b"
test "0$version_ge_a" -gt "0$version_ge_b" && return 0 # v1>v2: true
test "0$version_ge_a" -lt "0$version_ge_b" && return 1 # v1<v2:false
done
# version strings are both empty & no differences found - must be equal.
return 0 # v1==v2: true
}
function find_pip()
{
_pipargs=""
pip_min_ver="1.4"
for cmd in $PIPAPPS
do
_cmd=$(which $cmd 2>/dev/null)
if [ $? -eq 0 ];then
break
fi
done
if [ -z "$_cmd" ];then
echo "Can't find \"pip\" in system, please install it first, exiting!"
exit 1
else
_pip_ver=$($_cmd --version | grep -oE "[0-9]\.[0-9]" | head -n1)
if [ -n "$_pip_ver" ]; then
version_ge $_pip_ver $pip_min_ver
if [ $? -ne 0 ]; then
log "Upgrading pip ..."
$_cmd install --upgrade pip==$pip_min_ver
if [ $? -ne 0 ]; then
log "...pip upgrade fails, exiting!"
exit 1
else
log "...success"
sleep 2
for cmd in $PIPAPPS
do
_cmd=$(which $cmd 2>/dev/null)
if [ $? -eq 0 ];then
break
fi
done
fi
fi
_pip_ver=$($_cmd --version | grep -oE "[0-9]\.[0-9]" | head -n1)
version_ge $_pip_ver "1.5"
if [ $? -eq 0 ]; then
log "For future use, sorry, use pip v$pip_min_ver, exiting!"
exit 1
##_pipargs="--allow-unverified --allow-external"
#_pipargs="--allow-all-external"
#mk_dir "/root/.pip"
#_pipcfg="/root/.pip/pip.conf"
#if [ ! -f "$_pipcfg" ]; then
# touch $_pipcfg
#fi
#iniset 'install' 'allow-all-external' 'true' "$_pipcfg"
#iniset 'install' 'allow-all-unverified' 'true' "$_pipcfg"
#log "Setuptools upgrade required..."
#$cmd install setuptools --no-use-wheel --upgrade >> $LOGFILE 2>&1
#if [ $? -ne 0 ]; then
# log "...upgrade fails, exiting"
# exit 1
#else
# log "...success"
#fi
fi
log "Found pip version - $_pip_ver"
fi
PIPARGS=$_pipargs
PIPCMD=$_cmd
fi
}
function add_daemon_credentials()
{
retval=0
daemonuser=${1:-murano}
daemongroup=${2:-murano}
daemonhomedir=${3:-/home/$daemonuser}
getent group $daemongroup > /dev/null
if [ $? -ne 0 ]; then
log "Creating group \"$daemongroup\"..."
groupadd -r $daemongroup
if [ $? -eq 0 ]; then
log "...success"
else
log "Can't create \"$daemongroup\", exiting!"
retval=1
exit 1
fi
else
log "Group \"$daemongroup\" exists"
fi
getent passwd $daemonuser > /dev/null
if [ $? -ne 0 ]; then
log "Creating user \"$daemonuser\"..."
useradd -r -g $daemongroup -G $daemongroup -d $daemonhomedir -s $(which nologin) -c "Murano Daemons" $daemonuser
if [ $? -eq 0 ]; then
log "...success"
else
log "Can't create \"$daemonuser\", exiting!"
retval=1
exit 1
fi
else
log "User \"$daemonuser\" exists"
fi
return $retval
}
function remove_daemon_credentials()
{
retval=0
daemonuser=${1:-murano}
daemongroup=${2:-murano}
daemonhomedir=${3:-/home/$daemonuser}
getent passwd $daemonuser > /dev/null
if [ $? -eq 0 ]; then
log "Deleting user \"$daemonuser\"..."
userdel -f $daemonuser
if [ $? -eq 0 ]; then
if [ -d "$daemonhomedir" ]; then
rm -rf $daemonhomedir
fi
log "...success"
else
log "Can't delete \"$daemonuser\", exiting!"
retval=1
exit 1
fi
fi
getent group $daemongroup > /dev/null
if [ $? -eq 0 ]; then
log "Deleting group \"$daemongroup\"..."
groupdel $daemongroup
if [ $? -eq 0 ]; then
log "...success"
else
log "Can't delete \"$daemongroup\", exiting!"
retval=1
exit 1
fi
fi
return $retval
}
function iniset()
{
local section=$1
local option=$2
local value=$3
local file=$4
local line
if [ -z "$section" ] ; then
# No section name specified
sed -i -e "s/^\($option[ \t]*=[ \t]*\).*$/\1$value/" "$file"
else
# Check if section already exists
if ! grep -q "^\[$section\]" "$file" ; then
# Add section at the end
echo -e "\n[$section]" >>"$file"
fi
# Check if parameter in the section exists
line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" "$file")
if [ -z "$line" ] ; then
# Add parameter if it is not exists
sed -i -e "/^\[$section\]/ a\\
$option = $value
" "$file"
else
# Replace existing parameter
sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" "$file"
fi
fi
}
function mk_dir()
{
retval=0
path_to_check=$1
if [ -d "$path_to_check" ]; then
log "Path \"$path_to_check\" already exists."
elif [ -f "$path_to_check" ]; then
log "Path \"path_to_check\" is an existing file, exiting!"
exit 1
else
mkdir -p "$path_to_check"
if [ $? -ne 0 ]; then
log "Can't create \"$path_to_check\", exiting!"
retval=1
exit 1
fi
fi
if [ $# -eq 3 ]; then
owner_user=$2
owner_group=$3
chown -R $owner_user:$owner_group $path_to_check
if [ $? -ne 0 ]; then
log "Can't set ownership to \"$owner_user:$owner_group\" for \"$path_to_check\", exiting!"
retval=1
exit 1
fi
fi
return $retval
}
function get_service_exec_path()
{
retval=0
if [ -z "$SERVICE_EXEC_PATH" ]; then
SERVICE_EXEC_PATH=$(which $DAEMON_NAME)
if [ $? -ne 0 ]; then
log "Can't find \"$DAEMON_NAME\", please install the \"$SERVICE_SRV_NAME\" by running \"$(basename "$0") install\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
retval=1
fi
else
if [ ! -x "$SERVICE_EXEC_PATH" ]; then
log "\"$SERVICE_EXEC_PATH\" in not executable, please install the \"$DAEMON_NAME\" or set variable SERVICE_EXEC_PATH=/path/to/daemon before running setup script, exiting!"
retval=1
fi
fi
return $retval
}

View File

@ -1,4 +0,0 @@
SysV init scripts
=====================
murano-repository-redhat - for RedHat based Linux distibution
murano-repository-debian - for Debian based Linux distibution

View File

@ -1,105 +0,0 @@
#!/bin/sh
# Copyright (c) 2014 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.
# Author: Igor Yozhikov <iyozhikov@mirantis.com>
#
### BEGIN INIT INFO
# Provides: murano-repository
# Required-Start: $network $local_fs $remote_fs $syslog
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OpenStack Murano Respository Service
# Description: This startup script launches murano-repository service daemon.
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="murano-repository"
NAME=murano-repository
DAEMON=$(which murano-repository)
PIDFILE=/var/run/murano/$NAME.pid
SCRIPTNAME=/etc/init.d/openstack-$NAME
SYSTEM_USER=murano
CONFIG_FILE=/etc/murano/murano-repository.conf
# Exit if the package is not installed
[ -x $DAEMON ] || exit 5
# source function library
. /lib/lsb/init-functions
do_start()
{
if [ ! -d "/var/run/murano" ]; then
mkdir -p /var/run/murano
chown -R $SYSTEM_USER /var/run/murano
fi
start-stop-daemon --start --background --quiet --chuid $SYSTEM_USER:$SYSTEM_USER --make-pidfile --pidfile $PIDFILE --startas $DAEMON --test -- --config-file=$CONFIG_FILE > /dev/null || return 1
start-stop-daemon --start --background --quiet --chuid $SYSTEM_USER:$SYSTEM_USER --make-pidfile --pidfile $PIDFILE --startas $DAEMON -- --config-file=$CONFIG_FILE || return 2
}
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE
RETVAL="$?"
rm -f $PIDFILE
return "$RETVAL"
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
2) log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

View File

@ -1,103 +0,0 @@
#!/bin/sh
# Copyright (c) 2014 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.
# Author: Igor Yozhikov <iyozhikov@mirantis.com>
#
### BEGIN INIT INFO
# Provides: murano-repository
# Required-Start: $network $local_fs $remote_fs $syslog
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OpenStack Murano Respository Service
# Description: This startup script launches murano-repository service daemon.
### END INIT INFO
# chkconfig: 3 90 10
# description: This startup script launches murano-repository service daemon.
# config: /etc/murano/murano-repository.conf
#
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
DESC="murano-repository"
NAME=murano-repository
DAEMON=$(which murano-repository)
PIDFILE=/var/run/murano/$NAME.pid
SCRIPTNAME=/etc/init.d/openstack-$NAME
SYSTEM_USER=murano
CONFIG_FILE=/etc/murano/murano-repository.conf
LOCKFILE=/var/lock/subsys/$NAME
# Exit if the package is not installed
[ -x $DAEMON ] || exit 5
# source function library
. /etc/init.d/functions
RETVAL=0
start() {
if [ ! -d "/var/run/murano" ]; then
mkdir -p /var/run/murano
chown -R $SYSTEM_USER /var/run/murano
fi
echo -n "Starting $NAME: "
daemon --user $SYSTEM_USER "$DAEMON --config-file=$CONFIG_FILE &>/dev/null & echo \$! > $PIDFILE"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $LOCKFILE
return $RETVAL
}
stop() {
echo -n "Stopping $NAME: "
#killproc $DAEMON -TERM
killproc -p $PIDFILE $DAEMON
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $LOCKFILE
return $RETVAL
}
restart() {
stop
start
}
rh_status() {
# run checks to determine if the service is running or use generic status
status $DAEMON
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
status)
rh_status
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 2
esac
exit $?

View File

@ -1,55 +0,0 @@
[DEFAULT]
# Address to bind the server to
host = 0.0.0.0
# Port the bind the server to
port = 8084
# Directory for cache, OS temp directory is used by default
# data_dir = /tmp/muranorepository-data
# Show more verbose log output (sets INFO log level output)
verbose = True
# Show debugging output in logs (sets DEBUG log level output)
debug = True
# Set up logging. To use syslog just set use_syslog parameter value to 'True'.
log_file = /tmp/murano-repository.log
use_syslog = False
syslog_log_facility = LOG_LOCAL0
# Provide information about data types
# absolute or relative path to manifest location(root directory)
# where absolute path starts with / and relative to the repository folder
# while relative hasn't leading '/' and is prepended to the repository folder
manifests = Services
# Parameter name corresponds to section in manifest file
# Parameter value corresponds to relative path inside folder with manifests
ui = ui_forms
workflows = workflows
heat = heat_templates
agent = agent_templates
scripts = scripts
# Configure client archive structure
# Format: data_type = desired folder
# ui parameter is not actually used, but is kept to not break things apart
[output]
ui = service_forms
workflows = workflows
heat = templates/cf
agent = templates/agent
scripts = templates/agent/scripts
#Configure keystone location.
#For more information see Auth-Token Middleware with Username and Password
#http://docs.openstack.org/developer/keystone/configuringservices.html
[keystone]
auth_host = 127.0.0.1
auth_port = 5000
auth_protocol = http
admin_user = admin
admin_password = swordfish
admin_tenant_name = admin
signing_dir = /tmp/keystone-signing-muranorepository

View File

@ -1,48 +0,0 @@
version: 0.1
service_display_name: Active Directory
description: <strong> The Active Directory Service </strong> includes one primary
and optionally a few secondary Domain Controllers, with DNS
full_service_name: activeDirectory
author: Mirantis Inc.
service_version: 1
enabled: true
ui:
- ActiveDirectory.yaml
workflows:
- AD.xml
- Networking.xml
- Common.xml
heat:
- RouterInterface.template
- Windows.template
- Network.template
- Param.template
- Subnet.template
- InstancePortWSubnet.template
- InstancePort.template
- NNSecurity.template
- DefaultSecurity.template
- WindowsSecurity.template
- DomainSecurity.template
agent:
- CreatePrimaryDC.template
- LeaveDomain.template
- SetPassword.template
- CreateSecondaryDC.template
- AskDnsIp.template
- JoinDomain.template
scripts:
- Install-RoleSecondaryDomainController.ps1
- Install-RolePrimaryDomainController.ps1
- Join-Domain.ps1
- ImportCoreFunctions.ps1
- Get-DnsListeningIpAddress.ps1
- Set-LocalUserPassword.ps1

View File

@ -1,12 +0,0 @@
{
"Scripts": [
"Get-DnsListeningIpAddress.ps1"
],
"Commands": [
{
"Name": "Get-DnsListeningIpAddress",
"Arguments": {}
}
],
"RebootOnCompletion": 0
}

View File

@ -1,23 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Configure database access credentails
Parameters:
database: $database
username: $username
password: $password
host: $databaseHost
Body: |
return configure('{0} {1} {2} {3}'.format(args.database, args.username, args.password, args.host)).stdout
Scripts:
configure:
Type: Application
Version: 1.0.0
EntryPoint: Linux/configureAccessToPostgreSql.sh
Files:
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,22 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Add database and user to PostgreSql
Parameters:
database: $database
username: $username
password: $password
Body: |
return configure('{0} {1} {2}'.format(args.database, args.username, args.password)).stdout
Scripts:
configure:
Type: Application
Version: 1.0.0
EntryPoint: Linux/configurePostgreSqlDatabase.sh
Files:
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,16 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"Install-RolePrimaryDomainController.ps1"
],
"Commands": [
{
"Name": "Install-RolePrimaryDomainController",
"Arguments": {
"DomainName": "$domain",
"SafeModePassword": "$recoveryPassword"
}
}
],
"RebootOnCompletion": 1
}

View File

@ -1,18 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"Install-RoleSecondaryDomainController.ps1"
],
"Commands": [
{
"Name": "Install-RoleSecondaryDomainController",
"Arguments": {
"DomainName": "$domain",
"UserName": "Administrator",
"Password": "$domainPassword",
"SafeModePassword": "$recoveryPassword"
}
}
],
"RebootOnCompletion": 1
}

View File

@ -1,7 +0,0 @@
{
"Scripts": [
],
"Commands": [
],
"RebootOnCompletion": 0
}

View File

@ -1,21 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Apache
Parameters:
enablePHP: $deployApachePHP
Body: |
return apacheDeploy('{0}'.format(args.enablePHP)).stdout
Scripts:
apacheDeploy:
Type: Application
Version: 1.0.0
EntryPoint: Linux/runApacheDeploy.sh
Files:
- <Linux/installer.sh>
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,21 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy PostgreSql
Parameters:
appName: $appName
Body: |
return deploy(args.appName).stdout
Scripts:
deploy:
Type: Application
Version: 1.0.0
EntryPoint: Linux/deployPostgreSql.sh
Files:
- <Linux/installer.sh>
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,22 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Telnet
Parameters:
appName: $appName
Body: |
return telnetDeploy(args.appName).stdout
Scripts:
telnetDeploy:
Type: Application
Version: 1.0.0
EntryPoint: Linux/runTelnetDeploy.sh
Files:
- <Linux/installer.sh>
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,21 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Tomcat
Parameters:
appName: $appName
Body: |
return deploy(args.appName).stdout
Scripts:
deploy:
Type: Application
Version: 1.0.0
EntryPoint: Linux/deployTomcat.sh
Files:
- <Linux/installer.sh>
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,21 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Tomcat
Parameters:
repository: $repository
Body: |
return installApp(args.repository).stdout
Scripts:
installApp:
Type: Application
Version: 1.0.0
EntryPoint: Linux/deployTomcatApp.sh
Files:
- <Linux/installer.sh>
- <Linux/common.sh>
Options:
captureStdout: true
captureStderr: false

View File

@ -1,15 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"DeployWebApp.ps1"
],
"Commands": [
{
"Name": "Deploy-WebAppFromGit",
"Arguments": {
"URL": "$repository"
}
}
],
"RebootOnCompletion": 0
}

View File

@ -1,19 +0,0 @@
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Tomcat
Parameters:
appName: $appName
Body: |
return getIp(args.appName).stdout
Scripts:
getIp:
Type: Application
Version: 1.0.0
EntryPoint: Linux/getIp.sh
Files: []
Options:
captureStdout: true
captureStderr: false

View File

@ -1,22 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"CopyPrerequisites.ps1",
"InstallIIS.ps1"
],
"Commands": [
{
"Name": "Copy-Prerequisites",
"Arguments": {
"Destination": "C:\\Prerequisites"
}
},
{
"Name": "Install-WebServer",
"Arguments": {
"PrerequisitesPath": "C:\\Prerequisites"
}
}
],
"RebootOnCompletion": 0
}

View File

@ -1,24 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"OptionParser.ps1",
"SQLServer/SQLServerOptionParsers.ps1",
"SQLServer/SQLServerInstaller.ps1",
"SQLServer/Install-SQLServer.ps1",
"Alter-FirewallRulesForSQL.ps1"
],
"Commands": [
{
"Name": "Install-SQLServer",
"Arguments": {
"SAPassword": "$saPassword",
"MixedModeAuth": "$mixedModeAuth"
}
},
{
"Name": "Enable-SQLExternalAccess",
"Arguments": {}
}
],
"RebootOnCompletion": 0
}

View File

@ -1,25 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"Join-Domain.ps1"
],
"Commands": [
{
"Name": "Set-NetworkAdapterConfiguration",
"Arguments": {
"FirstAvailable": true,
"DNSServer": "$dnsIp"
}
},
{
"Name": "Join-Domain",
"Arguments": {
"Username": "$domainUser",
"Password": "$domainPassword",
"DomainName": "$domain",
"OUPath": "$ouPath"
}
}
],
"RebootOnCompletion": 1
}

View File

@ -1,5 +0,0 @@
{
"Scripts": [],
"Commands": [],
"RebootOnCompletion": 0,
}

View File

@ -1,17 +0,0 @@
{
"Scripts": [
"ImportCoreFunctions.ps1",
"Set-LocalUserPassword.ps1"
],
"Commands": [
{
"Name": "Set-LocalUserPassword",
"Arguments": {
"UserName": "Administrator",
"Password": "$adminPassword",
"Force": true
}
}
],
"RebootOnCompletion": 0
}

View File

@ -1,18 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"SQLServerForAOAG.ps1"
],
"Commands": [
{
"Name": "Enable-TrustedHosts",
"Arguments": {}
},
{
"Name": "New-SharedFolderForAOAG",
"Arguments": {
"PrimaryNode": "$primaryNode"
}
}
]
}

View File

@ -1,21 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"/Start-PowerShellProcess.ps1",
"Failover-Cluster.ps1"
],
"Commands": [
{
"Name": "New-FailoverCluster",
"Arguments": {
"UserName": "$domainAdminAccountName",
"ClusterNodes": "$clusterNodes",
"DomainName": "$domainName",
"ClusterName": "$clusterName",
"UserPassword": "$domainAdminAccountPassword",
"StaticAddress": "$clusterIp"
}
}
],
"RebootOnCompletion": 0
}

View File

@ -1,28 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"/Update-ServiceConfig.ps1",
"SQLServerForAOAG.ps1",
"Failover-Cluster.ps1"
],
"Commands": [
{
"Name": "Install-FailoverClusterPrerequisites",
"Arguments": {}
},
{
"Name": "Enable-TrustedHosts",
"Arguments": {}
},
{
"Name": "Update-ServiceConfig",
"Arguments": {
"Password": "$domainAdminAccountPassword",
"Name": "Murano Agent",
"RunAsUser": "$domainAdminAccountName",
"DomainName": "$domainName"
}
}
],
"RebootOnCompletion": 1
}

View File

@ -1,28 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"/OptionParser.ps1",
"/SQLServer/SQLServerOptionParsers.ps1",
"/SQLServer/SQLServerInstaller.ps1",
"/Export-Function.ps1",
"/Start-PowerShellProcess.ps1",
"SQLServerForAOAG.ps1"
],
"Commands": [
{
"Name": "Initialize-AOAGPrimaryReplica",
"Arguments": {
"UserName": "$domainAdminAccountName",
"NodeList": "$nodeList",
"PrimaryNode": "$primaryNode",
"DomainName": "$domainName",
"UserPassword": "$domainAdminAccountPassword",
"GroupName": "$groupName",
"ListenerName": "$listenerName",
"SyncModeNodeList": "$syncModeNodeList",
"ListenerIP": "$listenerIP",
"DatabaseList": "$databaseList"
}
}
]
}

View File

@ -1,23 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"/OptionParser.ps1",
"/SQLServer/SQLServerOptionParsers.ps1",
"/SQLServer/SQLServerInstaller.ps1",
"/Export-Function.ps1",
"/Start-PowerShellProcess.ps1",
"SQLServerForAOAG.ps1"
],
"Commands": [
{
"Name": "Initialize-AOAGSecondaryReplica",
"Arguments": {
"UserName": "$domainAdminAccountName",
"UserPassword": "$domainAdminAccountPassword",
"NodeList": "$nodeList",
"PrimaryNode": "$primaryNode",
"DomainName": "$domainName"
}
}
]
}

View File

@ -1,23 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"/OptionParser.ps1",
"/SQLServer/SQLServerOptionParsers.ps1",
"/SQLServer/SQLServerInstaller.ps1",
"/Export-Function.ps1",
"/Start-PowerShellProcess.ps1",
"SQLServerForAOAG.ps1"
],
"Commands": [
{
"Name": "Initialize-AlwaysOnAvailabilityGroup",
"Arguments": {
"DomainAdminAccountName": "$domainAdminAccountName",
"DomainAdminAccountPassword": "$domainAdminAccountPassword",
"NodeList": "$nodeList",
"PrimaryNode": "$primaryNode",
"DomainName": "$domainName"
}
}
]
}

View File

@ -1,27 +0,0 @@
{
"Scripts": [
"/ImportCoreFunctions.ps1",
"/OptionParser.ps1",
"/SQLServer/SQLServerOptionParsers.ps1",
"/SQLServer/SQLServerInstaller.ps1",
"SQLServerForAOAG.ps1"
],
"Commands": [
{
"Name": "Disable-Firewall",
"Arguments": {}
},
{
"Name": "Install-SQLServerForAOAG",
"Arguments": {
"SQLServiceUserPassword": "$domainAdminAccountPassword",
"SQLServiceUserDomain": "$domainName",
"SQLServiceUserName": "$domainAdminAccountName"
}
},
{
"Name": "Install-SqlServerPowerShellModule",
"Arguments": {}
}
]
}

View File

@ -1,46 +0,0 @@
version: 0.1
service_display_name: ASP.NET Application
description: >-
<strong> The ASP.NET Application Service </strong> installs
custom application onto one IIS Web Server
full_service_name: aspNetApp
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- AspNetApp.yaml
workflows:
- WebApps.xml
- Common.xml
- Networking.xml
heat:
- Windows.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- DefaultSecurity.template
- WindowsSecurity.template
- WebServerSecurity.template
- FloatingIP.template
agent:
- SetPassword.template
- InstallIIS.template
- DeployWebApp.template
scripts:
- ImportCoreFunctions.ps1
- Set-LocalUserPassword.ps1
- CopyPrerequisites.ps1
- InstallIIS.ps1
- DeployWebApp.ps1

View File

@ -1,46 +0,0 @@
version: 0.1
service_display_name: ASP.NET Application Web Farm
description: >-
<strong> The ASP.NET Farm Service </strong> installs a custom application
on a load-balanced array of IIS servers
full_service_name: aspNetAppFarm
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- AspNetAppFarm.yaml
workflows:
- WebApps.xml
- Common.xml
- Networking.xml
heat:
- Windows.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- LoadBalancer.template
- DefaultSecurity.template
- WindowsSecurity.template
- WebServerSecurity.template
- FloatingIPwithLB.template
agent:
- SetPassword.template
- InstallIIS.template
- DeployWebApp.template
scripts:
- ImportCoreFunctions.ps1
- Set-LocalUserPassword.ps1
- CopyPrerequisites.ps1
- InstallIIS.ps1
- DeployWebApp.ps1

View File

@ -1,34 +0,0 @@
version: 0.1
service_display_name: Demo Service
description: <strong> Demo Service </strong> shows how Murano is working.
full_service_name: demoService
author: Mirantis Inc.
service_version: 1
enabled: true
agent:
- Demo.template
ui:
- Demo.yaml
workflows:
- Networking.xml
- Common.xml
- Demo.xml
heat:
- Demo.template
- RouterInterface.template
- Network.template
- NNSecurity.template
- Param.template
- Subnet.template
- InstancePortWSubnet.template
- InstancePort.template
- DefaultSecurity.template
- LinuxSecurity.template
- DemoSecurity.template
scripts: []

View File

@ -1,18 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "-1",
"IpProtocol": "icmp",
"FromPort": "-1",
"CidrIp": "$cidr"
}
],
"GroupDescription": "$Composite security group for Murano Environment {envName}"
}
}
}
}

View File

@ -1,15 +0,0 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"$instanceName": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "$instanceType",
"ImageId": "$imageName",
"AvailabilityZone": "$availabilityZone",
"UserData": "$userData"
}
}
}
}

View File

@ -1,17 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "-1",
"IpProtocol": "icmp",
"FromPort": "-1",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,143 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": "25",
"ToPort": "25",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "53",
"ToPort": "53",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "53",
"ToPort": "53",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "88",
"ToPort": "88",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "88",
"ToPort": "88",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "123",
"ToPort": "123",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "135",
"ToPort": "135",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "137",
"ToPort": "137",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "138",
"ToPort": "138",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "445",
"ToPort": "445",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "445",
"ToPort": "445",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "464",
"ToPort": "464",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "464",
"ToPort": "464",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "389",
"ToPort": "389",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "389",
"ToPort": "389",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "636",
"ToPort": "636",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "3268",
"ToPort": "3268",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "3269",
"ToPort": "3269",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "5722",
"ToPort": "5722",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "9389",
"ToPort": "9389",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "49152",
"ToPort": "65535",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "49152",
"ToPort": "65535",
"CidrIp": "$cidr"
}
]
}
}
}
}

View File

@ -1,24 +0,0 @@
{
"Resources": {
"${instanceName}-FloatingIP": {
"Type": "OS::Neutron::FloatingIP",
"Properties": {
"floating_network_id": "$externalNetworkId"
}
},
"${instanceName}-FloatingIpAssoc": {
"Type": "OS::Neutron::FloatingIPAssociation",
"Properties": {
"floatingip_id": { "Ref" : "${instanceName}-FloatingIP" },
"port_id": { "Ref" : "$instancePort" }
}
}
},
"Outputs": {
"${instanceName}-FloatingIPaddress": {
"Value": {"Fn::GetAtt": ["${instanceName}-FloatingIP", "floating_ip_address"]},
"Description": "Floating IP assigned"
}
}
}

View File

@ -1,23 +0,0 @@
{
"Resources": {
"${lbName}-FloatingIP": {
"Type": "OS::Neutron::FloatingIP",
"Properties": {
"floating_network_id": "$externalNetworkId"
}
},
"${lbName}-FloatingIpAssoc": {
"Type": "OS::Neutron::FloatingIPAssociation",
"Properties": {
"floatingip_id": { "Ref" : "${lbName}-FloatingIP" },
"port_id": {"Fn::Select": ["port_id", {"Fn::GetAtt": ["${lbName}-Pool", "vip"]}]}
}
}
},
"Outputs": {
"${lbName}-FloatingIPaddress": {
"Value": {"Fn::GetAtt": ["${lbName}-FloatingIP", "floating_ip_address"]},
"Description": "Floating IP assigned"
}
}
}

View File

@ -1,29 +0,0 @@
{
"Resources": {
"$instanceName": {
"Properties": {
"NetworkInterfaces": [
{
"Ref": "$instancePort"
}
]
}
},
"$instancePort": {
"Type": "OS::Neutron::Port",
"Properties": {
"security_groups": [
{
"Ref": "$MuranoSecurityGroup-{envName}"
}
],
"network_id": {
"Ref": "$network"
}
}
}
},
"Outputs": {
}
}

View File

@ -1,36 +0,0 @@
{
"Resources": {
"$instanceName": {
"Properties": {
"NetworkInterfaces": [
{
"Ref": "$instancePort"
}
]
}
},
"$instancePort": {
"Type": "OS::Neutron::Port",
"Properties": {
"security_groups": [
{
"Ref": "$MuranoSecurityGroup-{envName}"
}
],
"network_id": {
"Ref": "$network"
},
"fixed_ips": [
{
"subnet_id": {
"Ref": "$subnet"
}
}
]
}
}
},
"Outputs": {
}
}

View File

@ -1,9 +0,0 @@
{
"Resources": {
"$instanceName": {
"Properties": {
"KeyName": "$keyName"
}
}
}
}

View File

@ -1,18 +0,0 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"$instanceName": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "$instanceType",
"ImageId": "$imageName",
"AvailabilityZone": "$availabilityZone",
"UserData": "$userData"
}
}
},
"Outputs": {
}
}

View File

@ -1,17 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "22",
"IpProtocol": "tcp",
"FromPort": "22",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,44 +0,0 @@
{
"Resources": {
"${lbName}-HealthMonitor": {
"Type": "OS::Neutron::HealthMonitor",
"Properties": {
"type": "HTTP",
"delay": 3,
"max_retries": 3,
"timeout": 10,
"http_method": "GET",
"expected_codes": "200",
"url_path": "/"
}
},
"${lbName}-Pool": {
"Type": "OS::Neutron::Pool",
"Properties": {
"protocol": "HTTP",
"subnet_id": {"Ref": "subnet"},
"lb_method": "ROUND_ROBIN",
"name": "${lbName}-Pool",
"vip": {
"name": "${lbName}-Pool-VIP",
"protocol_port": "$lbPort"
},
"monitors": [{"Ref": "${lbName}-HealthMonitor"}]
}
},
"${lbName}-LoadBalancer": {
"Type": "OS::Neutron::LoadBalancer",
"Properties": {
"pool_id": {"Ref": "${lbName}-Pool"},
"protocol_port": "$lbPort",
"members": [{"Ref": "$instanceName"}]
}
}
},
"Outputs": {
"${lbName}-loadBalancerIp": {
"Value": {"Fn::Select": ["address", {"Fn::GetAtt": ["${lbName}-Pool", "vip"]}]},
"Description": "IP assigned to VIP"
}
}
}

View File

@ -1,13 +0,0 @@
{
"Resources": {
"$instanceName": {
"Properties": {
"SecurityGroups": [
{
"Ref": "$MuranoSecurityGroup-{envName}"
}
]
}
}
}
}

View File

@ -1,14 +0,0 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"network": {
"Type": "OS::Neutron::Net",
"Properties": {
"name": "$networkName"
}
}
},
"Outputs": {
}
}

View File

@ -1,8 +0,0 @@
{
"Parameters" : {
"$paramName" : {
"Type" : "String",
"Default" : "$paramValue"
}
}
}

View File

@ -1,17 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "5432",
"IpProtocol": "tcp",
"FromPort": "5432",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,18 +0,0 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"$interfaceName": {
"Type": "OS::Neutron::RouterInterface",
"Properties": {
"router_id": "$routerId",
"subnet_id": {
"Ref": "$subnet"
}
}
}
},
"Outputs": {
}
}

View File

@ -1,41 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": "135",
"ToPort": "135",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "1433",
"ToPort": "1433",
"CidrIp": "0.0.0.0/0"
},
{
"IpProtocol": "udp",
"FromPort": "1434",
"ToPort": "1434",
"CidrIp": "0.0.0.0/0"
},
{
"IpProtocol": "tcp",
"FromPort": "4022",
"ToPort": "4022",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "49152",
"ToPort": "65535",
"CidrIp": "$cidr"
}
]
}
}
}
}

View File

@ -1,13 +0,0 @@
{
"Resources": {
"$instancePort": {
"Properties": {
"allowed_address_pairs": [
{
"ip_address": "$clusterIp"
}
]
}
}
}
}

View File

@ -1,20 +0,0 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"$subnetName": {
"Type": "OS::Neutron::Subnet",
"Properties": {
"network_id": {
"Ref": "$networkRef"
},
"ip_version": 4,
"dns_nameservers": ["8.8.8.8"],
"cidr": "$cidr"
}
}
},
"Outputs": {
}
}

View File

@ -1,17 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "23",
"IpProtocol": "tcp",
"FromPort": "23",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,17 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "8080",
"IpProtocol": "tcp",
"FromPort": "8080",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,41 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"IpProtocol": "tcp",
"FromPort": "135",
"ToPort": "135",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "137",
"ToPort": "137",
"CidrIp": "$cidr"
},
{
"IpProtocol": "tcp",
"FromPort": "3343",
"ToPort": "3343",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "3343",
"ToPort": "3343",
"CidrIp": "$cidr"
},
{
"IpProtocol": "udp",
"FromPort": "49152",
"ToPort": "65535",
"CidrIp": "$cidr"
}
]
}
}
}
}

View File

@ -1,23 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "80",
"IpProtocol": "tcp",
"FromPort": "80",
"CidrIp": "0.0.0.0/0"
},
{
"ToPort": "443",
"IpProtocol": "tcp",
"FromPort": "443",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,19 +0,0 @@
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"$instanceName": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": "$instanceType",
"ImageId": "$imageName",
"AvailabilityZone": "$availabilityZone",
"UserData": "$userData"
}
}
},
"Outputs": {
}
}

View File

@ -1,17 +0,0 @@
{
"Resources": {
"$MuranoSecurityGroup-{envName}": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"SecurityGroupIngress": [
{
"ToPort": "3389",
"IpProtocol": "tcp",
"FromPort": "3389",
"CidrIp": "0.0.0.0/0"
}
]
}
}
}
}

View File

@ -1,42 +0,0 @@
version: 0.1
service_display_name: Linux Apache
description: >-
<strong> Linux Apache Service </strong>
Demonstrates a simple linux agent, which installs Apache Server
full_service_name: linuxApacheService
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- LinuxApache.yaml
workflows:
- Apache.xml
- Networking.xml
heat:
- Linux.template
- WebServerSecurity.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- DefaultSecurity.template
- WebServerSecurity.template
- LinuxSecurity.template
- Keypair.template
- FloatingIP.template
agent:
- DeployApache.template
scripts:
- Linux/common.sh
- Linux/installer.sh
- Linux/runApacheDeploy.sh

View File

@ -1,41 +0,0 @@
version: 0.1
service_display_name: Linux Telnet
description: >-
<strong> Linux Telnet Service </strong>
Demonstrates a simple linux agent, which installs Telnet if required.
full_service_name: linuxTelnetService
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- LinuxTelnet.yaml
workflows:
- LinuxTelnet.xml
- Networking.xml
heat:
- Linux.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- DefaultSecurity.template
- LinuxSecurity.template
- TelnetSecurity.template
- Keypair.template
- FloatingIP.template
agent:
- DeployTelnet.template
scripts:
- Linux/common.sh
- Linux/installer.sh
- Linux/runTelnetDeploy.sh

View File

@ -1,58 +0,0 @@
version: 0.1
service_display_name: MS SQL Server Cluster
description: >-
<strong> The MS SQL Failover Cluster </strong> installs
Microsoft SQL Failover Cluster Server
full_service_name: msSqlClusterServer
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- MsSqlClusterServer.yaml
workflows:
- MsSqlCluster.xml
- Common.xml
- Networking.xml
heat:
- Windows.template
- SQLCluster.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- DefaultSecurity.template
- WindowsSecurity.template
- SQL-security.template
- WSFCSecurity.template
agent:
- SetPassword.template
- SqlServerCluster/FailoverClusterPrerequisites.template
- SqlServerCluster/FailoverCluster.template
- SqlServerCluster/ConfigureEnvironmentForAOAG.template
- SqlServerCluster/InstallSqlServerForAOAG.template
- SqlServerCluster/InitializeAlwaysOn.template
- SqlServerCluster/InitializeAOAGPrimaryReplica.template
- SqlServerCluster/InitializeAOAGSecondaryReplica.template
scripts:
- ImportCoreFunctions.ps1
- Set-LocalUserPassword.ps1
- Update-ServiceConfig.ps1
- SqlServerCluster/SQLServerForAOAG.ps1
- SqlServerCluster/Failover-Cluster.ps1
- Start-PowerShellProcess.ps1
- OptionParser.ps1
- SQLServer/SQLServerOptionParsers.ps1
- SQLServer/SQLServerInstaller.ps1
- Export-Function.ps1

View File

@ -1,48 +0,0 @@
version: 0.1
service_display_name: MS SQL Server
description: >-
<strong> The MS SQL Service </strong> installs an instance of
Microsoft SQL Server
full_service_name: msSqlServer
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- MsSqlServer.yaml
workflows:
- MsSqlServer.xml
- Common.xml
- Networking.xml
heat:
- Windows.template
- SQL-security.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- DefaultSecurity.template
- WindowsSecurity.template
- SQL-security.template
- FloatingIP.template
agent:
- SetPassword.template
- InstallMsSqlServer.template
scripts:
- ImportCoreFunctions.ps1
- Set-LocalUserPassword.ps1
- OptionParser.ps1
- SQLServer/SQLServerOptionParsers.ps1
- SQLServer/SQLServerInstaller.ps1
- SQLServer/Install-SQLServer.ps1
- Alter-FirewallRulesForSQL.ps1

View File

@ -1,49 +0,0 @@
version: 0.1
service_display_name: PostgreSQL
description: >-
<strong> PostgreSQL database
full_service_name: postgreSql
author: Mirantis Inc.
service_version: 1
enabled: True
ui:
- PostgreSql.yaml
workflows:
- PostgreSql.xml
- Networking.xml
heat:
- Linux.template
- LinuxSecurity.template
- PostgreSqlSecurity.template
- InstancePort.template
- InstancePortWSubnet.template
- Network.template
- NNSecurity.template
- Param.template
- RouterInterface.template
- Subnet.template
- DefaultSecurity.template
- Keypair.template
- LoadBalancer.template
- FloatingIP.template
- FloatingIPwithLB.template
agent:
- DeployPostgreSql.template
- ConfigurePostgreSqlDatabase.template
- ConfigureAccessToPostgreSql.template
- GetIP.template
scripts:
- Linux/common.sh
- Linux/installer.sh
- Linux/deployPostgreSql.sh
- Linux/configurePostgreSqlDatabase.sh
- Linux/configureAccessToPostgreSql.sh
- Linux/getIp.sh

View File

@ -1,61 +0,0 @@
trap {
&$TrapHandler
}
$FW_Rules = @{
"SQL Server Data Connection" = "1433";
"SQL Admin Connection" = "1434";
"SQL Service Broker" = "4022";
"SQL Debugger/RPC"="135";
}
$FW_Proto = "TCP"
function Add-NetshFirewallRule {
param (
[HashTable] $hshRules,
[String] $proto
)
foreach ($h in $hshRules.GetEnumerator()) {
try {
$command="advfirewall firewall add rule name=`"$($h.Name)`" dir=in action=allow protocol=$proto localport=$($h.Value)"
Start-Process -FilePath netsh -ArgumentList $command -Wait
}
catch {
$except= $_ | Out-String
Write-LogError "Add rule $($h.Name) FAILS with $except"
}
}
}
function Remove-NetShFirewallRule {
param (
[HashTable] $hshRules
)
foreach ($h in $hshRules.GetEnumerator()) {
try {
$command="advfirewall firewall delete rule name=`"$($h.Name)`""
Start-Process -FilePath netsh -ArgumentList $command -Wait
}
catch {
$except= $_ | Out-String
Write-LogError "Delete rule $($h.Name) FAILS with $except"
}
}
}
function Enable-SQLExternalAccess {
Add-NetshFirewallRule $FW_Rules $FW_Proto
}
function Disable-SQLExternalAccess {
Remove-NetshFirewallRule $FW_Rules $FW_Proto
}

View File

@ -1,50 +0,0 @@
trap {
&$TrapHandler
}
Function Copy-Prerequisites {
param (
[String] $Path = '',
[String] $Destination = ''
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Write-Log "--> Copy-Prerequisites"
if ($Destination -eq '') {
throw("Copy-Prerequisites: Destination path not specified!")
}
if ($Path -eq '') {
$Path = [Environment]::GetEnvironmentVariable('MuranoFileShare')
if ($Path -eq $null) {
throw("Copy-Prerequisites: Unable to determine source path for prerequisites.")
}
}
Write-Log "Creating new PSDrive ..."
New-PSDrive -Name 'P' -PSProvider 'FileSystem' -Root $Path | Out-Null
Write-Log "Creating destination folder ..."
New-Item -Path $Destination -ItemType Container -Force | Out-Null
Write-Log "Copying items ..."
Copy-Item -Path 'P:\Prerequisites\IIS' -Destination $Destination -Recurse -Force | Out-Null
Write-Log "Removing PSDrive ..."
Remove-PSDrive -Name 'P' -PSProvider 'FileSystem' -Force | Out-Null
Write-Log "<-- Copy-Prerequisites"
}
}

View File

@ -1,152 +0,0 @@
trap {
&$TrapHandler
}
Function Register-WebApp {
<#
.LINKS
http://www.iis.net/learn/manage/powershell/powershell-snap-in-creating-web-sites-web-applications-virtual-directories-and-application-pools
#>
param (
[String] $Source,
[String] $Path = "C:\inetpub\wwwroot",
[String] $Name = "",
[String] $Username = "",
[String] $Password = ""
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Import-Module WebAdministration
if ($Name -eq "") {
$Name = @([IO.Path]::GetDirectoryName($Source) -split '\\')[-1]
if ($Name -eq "wwwroot") {
throw("Application pool name couldn't be 'wwwroot'.")
}
}
else {
$Path = [IO.Path]::Combine($Path, $Name)
}
$null = Copy-Item -Path $Source -Destination $Path -Recurse -Force
# Create new application pool
$AppPool = New-WebAppPool -Name $Name -Force
#$AppPool = Get-Item "IIS:\AppPools\$Name"
$AppPool.managedRuntimeVersion = 'v4.0'
$AppPool.managedPipelineMode = 'Classic'
$AppPool.processModel.loadUserProfile = $true
$AppPool.processModel.logonType = 'LogonBatch'
#Set Identity type
if ($Username -eq "") {
$AppPool.processModel.identityType = 'ApplicationPoolIdentity'
}
else {
$AppPool.processModel.identityType = 'SpecificUser'
$AppPool.processModel.userName = $Username
$AppPool.processModel.password = $Password
$null = $AppPool | Set-Item
}
# Create Website
$WebSite = New-WebSite -Name $Name -Port 80 -HostHeader $Name -PhysicalPath $Path -Force
#$WebSite = Get-Item "IIS:\Sites\$Name"
# Set the Application Pool
$null = Set-ItemProperty "IIS:\Sites\$Name" 'ApplicationPool' $Name
#Turn on Directory Browsing
#Set-WebConfigurationProperty -Filter '/system.webServer/directoryBrowse' -Name 'enabled' -Value $true -PSPath "IIS:\Sites\$Name"
# Update Authentication
#Set-WebConfigurationProperty -Filter '/system.WebServer/security/authentication/AnonymousAuthentication' -Name 'enabled' -Value $true -Location $name
#Set-WebConfigurationProperty -Filter '/system.WebServer/security/authentication/windowsAuthentication' -Name 'enabled' -Value $false -Location $Name
#Set-WebConfigurationProperty -Filter '/system.WebServer/security/authentication/basicAuthentication' -Name 'enabled' -Value $false -Location $Name
$null = $WebSite.Start()
$null = Add-Content -Path "C:\Windows\System32\Drivers\etc\hosts" -Value "127.0.0.1 $Name"
# Remove standard IIS 'Hello World' application from localhost:80
$null = Get-WebBinding 'Default Web Site' | Remove-WebBinding
# Add new application on http://localhost:80
$null = New-WebBinding -Name "$Name" -IP "*" -Port 80 -Protocol http
}
}
Function Deploy-WebAppFromGit {
param (
[String] $URL,
[String] $TempPath = [IO.Path]::Combine([IO.Path]::GetTempPath(), [IO.Path]::GetRandomFileName()),
[String] $OutputPath = [IO.Path]::Combine([IO.Path]::GetTempPath(), [IO.Path]::GetRandomFileName())
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Write-Log "TempPath = '$TempPath'"
Write-Log "OutputPath = '$OutputPath'"
# Fetch web application
#----------------------
Write-Log "Fetching sources from Git ..."
$null = New-Item -Path $TempPath -ItemType Container
$null = Exec -FilePath 'git.exe' -ArgumentList @('clone', $URL) -WorkingDir $TempPath -RedirectStreams
$Path = @(Get-ChildItem $TempPath)[0].FullName
#----------------------
# Build web application
#----------------------
Write-Log "Building sources ..."
$msbuild = "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"
$null = New-Item -Path $OutputPath -ItemType Container
$SlnFiles = @(Get-ChildItem -Path $Path -Filter *.sln -Recurse)
# Start new processs with additional env variables:
#* VisualStudioVersion = "10.0"
#* EnableNuGetPackageRestore = "true"
$null = Exec -FilePath $msbuild `
-ArgumentList @($SlnFiles[0].FullName, "/p:OutputPath=$OutputPath") `
-Environment @{'VisualStudioVersion' = '10.0'; 'EnableNuGetPackageRestore' = 'true'} `
-RedirectStreams
$AppFolder = @(Get-ChildItem ([IO.Path]::Combine($OutputPath, '_PublishedWebsites')))[0]
#----------------------
# Install web application
#------------------------
$null = Register-WebApp -Source $AppFolder.FullName -Name $AppFolder.Name
#------------------------
}
}

View File

@ -1,61 +0,0 @@
trap {
&$TrapHandler
}
function Export-Function {
param (
[String[]] $Name,
[Parameter(ValueFromPipeline=$true)]
[String] $Path = [IO.Path]::GetTempFileName(),
[Switch] $All
)
if ([IO.Path]::GetExtension($Path) -ne 'ps1') {
$null = Rename-Item -Path $Path -NewName "$Path.ps1" -Force
$Path = "$Path.ps1"
}
$SystemFunctions = @(
'A:', 'B:', 'C:', 'D:', 'E:', 'F:', 'G:', 'H:', 'I:', 'J:',
'K:', 'L:', 'M:', 'N:', 'O:', 'P:', 'Q:', 'R:', 'S:', 'T:',
'U:', 'V:', 'W:', 'X:', 'Y:', 'Z:',
'cd..', 'cd\', 'help', 'mkdir', 'more', 'oss', 'prompt',
'Clear-Host', 'Get-Verb', 'Pause', 'TabExpansion2'
)
if ($All) {
Get-ChildItem Function: |
Where-Object {$_.ModuleName -eq ''} |
Where-Object {$SystemFunctions -notcontains $_.Name} |
ForEach-Object {
Add-Content -Path $Path -Value @"
function $($_.Name) {
$($_.ScriptBlock)
}
"@
}
}
else {
foreach ($FunctionName in $Name) {
$FunctionObject = Get-ChildItem "Function:\$FunctionName"
if ($FunctionObject -ne $null) {
Add-Content -Path $Path -Value @"
function $FunctionName {
$($FunctionObject.ScriptBlock)
}
"@
}
}
}
return $Path
}

View File

@ -1,7 +0,0 @@
function Get-DnsListeningIpAddress {
Import-Module DnsServer
(Get-DNSServer -ComputerName localhost).ServerSetting.ListeningIpAddress |
Where-Object { $_ -match "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" }
}

View File

@ -1,68 +0,0 @@
Import-Module CoreFunctions -Force
Initialize-Logger 'MuranoAgent' 'C:\Murano\PowerShell.log'
function Show-InvocationInfo {
param (
$Invocation,
[Switch] $End
)
if ($End) {
Write-LogDebug "</function name='$($Invocation.MyCommand.Name)'>"
}
else {
Write-LogDebug "<function name='$($Invocation.MyCommand.Name)'>"
Write-LogDebug "<param>"
foreach ($Parameter in $Invocation.MyCommand.Parameters) {
foreach ($Key in $Parameter.Keys) {
$Type = $Parameter[$Key].ParameterType.FullName
foreach ($Value in $Invocation.BoundParameters[$Key]) {
Write-LogDebug "[$Type] $Key = '$Value'"
}
}
}
Write-LogDebug "</param>"
}
}
$TrapHandler = {
Write-LogError "<exception>"
Write-LogError $_ -EntireObject
Write-LogError "</exception>"
break
}
trap {
&$TrapHandler
}
$ErrorActionPreference = 'Stop'
<#
# Usage example for Show-InvocationInfo
function MyFunction {
param (
[String] $Value1,
[String] $Value2,
[Int] $Int1
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
# Main code here
}
}
#>

View File

@ -1,43 +0,0 @@
trap {
&$TrapHandler
}
Function Install-RolePrimaryDomainController {
param (
[String] $DomainName,
[String] $SafeModePassword
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Add-WindowsFeatureWrapper `
-Name "DNS","AD-Domain-Services","RSAT-DFS-Mgmt-Con" `
-IncludeManagementTools `
-NotifyRestart
Write-Log "Creating first domain controller ..."
$SMAP = ConvertTo-SecureString -String $SafeModePassword -AsPlainText -Force
$null = Install-ADDSForest `
-DomainName $DomainName `
-SafeModeAdministratorPassword $SMAP `
-DomainMode Default `
-ForestMode Default `
-NoRebootOnCompletion `
-Force
Write-Log "Waiting 60 seconds for reboot ..."
Start-Sleep -Seconds 60
}
}

View File

@ -1,69 +0,0 @@
trap {
&$TrapHandler
}
Function Install-RoleSecondaryDomainController
{
<#
.SYNOPSIS
Install additional (secondary) domain controller.
#>
param
(
[String]
# Domain name to join to.
$DomainName,
[String]
# Domain user who is allowed to join computer to domain.
$UserName,
[String]
# User's password.
$Password,
[String]
# Domain controller recovery mode password.
$SafeModePassword
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
$Credential = New-Credential -UserName "$DomainName\$UserName" -Password $Password
# Add required windows features
Add-WindowsFeatureWrapper `
-Name "DNS","AD-Domain-Services","RSAT-DFS-Mgmt-Con" `
-IncludeManagementTools `
-NotifyRestart
Write-Log "Adding secondary domain controller ..."
$SMAP = ConvertTo-SecureString -String $SafeModePassword -AsPlainText -Force
Install-ADDSDomainController `
-DomainName $DomainName `
-SafeModeAdministratorPassword $SMAP `
-Credential $Credential `
-NoRebootOnCompletion `
-Force `
-ErrorAction Stop | Out-Null
Write-Log "Waiting for restart ..."
# Stop-Execution -ExitCode 3010 -ExitString "Computer must be restarted to finish domain controller promotion."
# Write-Log "Restarting computer ..."
# Restart-Computer -Force
}
}

View File

@ -1,72 +0,0 @@
trap {
&$TrapHandler
}
Function Install-WebServer {
param (
[String] $PrerequisitesPath
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Write-Log "--> Install-WebServer"
$FeatureList = @(
'Web-Server',
'Web-Net-Ext45',
'Web-ASP',
'Web-Asp-Net45',
'Web-ISAPI-Ext',
'Web-ISAPI-Filter',
'Web-Includes'
)
$PrerequisitesList = @(
'AspNetMvc4Setup.exe',
'WebApplications.exe'
)
$PrerequisitesPath = [IO.Path]::Combine($PrerequisitesPath, 'IIS')
Write-Log "Validating prerequisites based on the list ..."
foreach ($FileName in $PrerequisitesList) {
$FilePath = [IO.Path]::Combine($PrerequisitesPath, $FileName)
if (-not (Test-Path -Path $FilePath -PathType Leaf)) {
throw("Prerequisite file not found: '$FilePath'")
}
}
Import-Module ServerManager
Write-Log "Installing Web Server ..."
Install-WindowsFeature $FeatureList -IncludeManagementTools
Write-Log "Installing AspNetMvp4 ..."
$Exec = Exec -FilePath $([IO.Path]::Combine($PrerequisitesPath, 'AspNetMvc4Setup.exe')) -ArgumentList '/q' -PassThru
if ($Exec.ExitCode -ne 0) {
throw("Installation of 'AspNetMvc4Setup.exe' failed. Process exit code '$($Exec.ExitCode)'")
}
# Extract WebApplications folder with *.target files to
# C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0
Write-Log "Installing WebApplication targets ..."
$WebApplicationsTargetsRoot = 'C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0'
$null = New-Item -Path $WebApplicationsTargetsRoot -ItemType Container
$Exec = Exec -FilePath $([IO.Path]::Combine($PrerequisitesPath, 'WebApplications.exe')) -ArgumentList @("-o`"$WebApplicationsTargetsRoot`"", '-y') -PassThru
if ($Exec.ExitCode -ne 0) {
throw("Installation of 'WebApplications.exe' failed. Process exit code '$($Exec.ExitCode)'")
}
Write-Log "<-- Install-WebServer"
}
}

View File

@ -1,67 +0,0 @@
trap {
&$TrapHandler
}
Function Join-Domain {
<#
.SYNOPSIS
Executes "Join domain" action.
Requires 'CoreFunctions' module.
#>
param (
[String] $DomainName = '',
[String] $UserName = '',
[String] $Password = '',
[String] $OUPath = '',
[Switch] $AllowRestart
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ($UserName -eq '') {
$UserName = 'Administrator'
}
$Credential = New-Credential -UserName "$DomainName\$UserName" -Password $Password
if (Test-ComputerName -DomainName $DomainName -ErrorAction 'SilentlyContinue') {
Write-LogWarning "Computer already joined to domain '$DomainName'"
}
else {
Write-Log "Joining computer to domain '$DomainName' ..."
if ($OUPath -eq '') {
Add-Computer -DomainName $DomainName -Credential $Credential -Force
}
else {
Add-Computer -DomainName $DomainName -Credential $Credential -OUPath $OUPath -Force
}
$null = Exec 'ipconfig' @('/registerdns') -RedirectStreams
Write-Log "Waiting 30 seconds to restart ..."
Start-Sleep -Seconds 30
<#
if ($AllowRestart) {
Write-Log "Restarting computer ..."
Restart-Computer -Force
}
else {
Write-Log "Please restart the computer now."
}
#>
}
}
}

View File

@ -1,204 +0,0 @@
#!/bin/bash
#
DEBUGLVL=3
LOGFILE=/tmp/muranodeployment.log
PIPAPPS="pip python-pip pip-python"
PIPCMD=""
if [ "$DEBUGLVL" -eq 4 ]; then
set -x
fi
function log {
if [ "$DEBUGLVL" -gt 0 ]; then
chars=$(echo "@$" | wc -c)
case $DEBUGLVL in
1 )
echo -e "LOG:>$@"
;;
2)
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" | tee --append $LOGFILE
;;
3)
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" >> $LOGFILE
;;
4)
echo -e "$(date +"%m-%d-%Y %H:%M") LOG:>$@" | tee --append $LOGFILE
;;
esac
fi
}
function lowercase(){
echo "$1" | sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/"
}
function find_pip()
{
for cmd in $PIPAPPS
do
_cmd=$(which $cmd 2>/dev/null)
if [ $? -eq 0 ];then
break
fi
done
if [ -z $_cmd ];then
echo "Can't find \"pip\" in system, please install it first, exiting!"
exit 1
else
PIPCMD=$_cmd
fi
}
OPTIND=1 # Reset if getopts used previously
function collect_args(){
_n=$1
shift
ARGS=''
while true
do
if [[ "$_n" == -* ]] || [ -z "$_n" ]; then
OPTIND=$((OPTIND - 1))
break
fi
#echo "_n=$_n ; $OPTIND"
if [ -z "$ARGS" ]; then
ARGS=$OPTARG
else
ARGS="$ARGS $_n"
fi
eval _n=\$$OPTIND
OPTIND=$((OPTIND + 1))
#sleep 1
done
echo $ARGS
unset _n
unset ARGS
}
function get_os(){
KERNEL=$(uname -r)
MACH=$(uname -m)
OS=$(uname)
if [ "${OS}" = "Linux" ] ; then
if [ -f /etc/redhat-release ] ; then
DistroBasedOn='RedHat'
Packager='yum'
DIST=$(cat /etc/redhat-release |sed s/\ release.*//)
PSUEDONAME=$(cat /etc/redhat-release | sed s/.*\(// | sed s/\)//)
REV=$(cat /etc/redhat-release | sed s/.*release\ // | sed s/\ .*//)
elif [ -f /etc/SuSE-release ] ; then
DistroBasedOn='SuSe'
Packager='zypper'
PSUEDONAME=$(cat /etc/SuSE-release | tr "\n" ' '| sed s/VERSION.*//)
REV=$(cat /etc/SuSE-release | tr "\n" ' ' | sed s/.*=\ //)
elif [ -f /etc/mandrake-release ] ; then
DistroBasedOn='Mandrake'
Packager='urpmi urpme'
PSUEDONAME=$(cat /etc/mandrake-release | sed s/.*\(// | sed s/\)//)
REV=$(cat /etc/mandrake-release | sed s/.*release\ // | sed s/\ .*//)
elif [ -f /etc/debian_version ] ; then
DistroBasedOn='Debian'
Packager='apt-get'
DIST=$(cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }')
PSUEDONAME=$(cat /etc/lsb-release | grep '^DISTRIB_CODENAME' | awk -F= '{ print $2 }')
REV=$(cat /etc/lsb-release | grep '^DISTRIB_RELEASE' | awk -F= '{ print $2 }')
fi
if [ -f /etc/UnitedLinux-release ] ; then
DIST="${DIST}[$(cat /etc/UnitedLinux-release | tr "\n" ' ' | sed s/VERSION.*//)]"
fi
OS=$(lowercase $OS)
DistroBasedOn=$(lowercase $DistroBasedOn)
readonly OS
readonly DIST
readonly DistroBasedOn
readonly PSUEDONAME
readonly REV
readonly KERNEL
readonly MACH
#readonly Packager
else
OS=unknown
readonly OS
log "OS:$OS"
exit 1
fi
}
function add_fw_rule(){
_rule_string=$@
_tmp_fw_port=$(echo $_rule_string | grep -o -e "dport [0-9]*\s")
_tmp_fw_proto=$(echo $_rule_string | grep -o -e "-p \w*\s")
_fw_port=$(echo $_tmp_fw_port | awk '{print $2}')
_fw_proto=$(echo $_tmp_fw_proto |awk '{print $2}')
_fw_reload=""
#find iptables and add rule
case $DIST in
"Fedora")
_fw_cmd=$(which firewall-cmd)
_fw_port=$(echo $_rule_string | grep -o -e "dport [0-9]*\s" | awk '{print $2}')
_fw_proto=$(echo $_rule_string | grep -o -e "-p \w*\s" | awk '{print $2}')
_fw_rule="--permanent --add-port=$_fw_port/$_fw_proto"
_fw_enable_rules="$_fw_cmd --reload"
;;
*)
_fw_cmd=$(which iptables)
_fw_rule=$_rule_string
_fw_enable_rules="service $(basename $_fw_cmd) save"
;;
esac
iptcmdsave=$(which iptables-save)
if [[ "$_fw_cmd" != '' ]] && [[ "$iptcmdsave" != '' ]]; then
eval "$iptcmdsave | grep -e \"$_tmp_fw_port\" | grep -e \"$_tmp_fw_proto\"" > /dev/null 2>&1
if [ $? -ne 0 ]; then
eval $_fw_cmd $_fw_rule
if [ $? -ne 0 ]; then
log "Can't set firewall rules, exiting..."
exit 1
else
if [ -n "$_fw_enable_rules" ]; then
log "Running \"$_fw_enable_rules\""
$_fw_enable_rules > /dev/null
fi
log "$_fw_cmd rule with $_fw_rule set."
fi
else
log "$_fw_cmd rule exists."
fi
else
log "There are no fw found..."
fi
}
function enable_init(){
_initctrl=""
_init_suffix=""
_service=$1
case $DistroBasedOn in
"debian")
_initctrl="update-rc.d"
_init_suffix="defaults"
;;
*)
_initctrl="chkconfig"
_init_suffix="on"
;;
esac
$_initctrl $_service $_init_suffix
if [ $? -ne 0 ]; then
log "$_initctrl $_service $_init_suffix - fails!"
exit 1
fi
}
function restart_service(){
_service=$1
service $_service restart > /dev/null 2>&1
if [ $? -ne 0 ]; then
log "Can't start $_service service!"
exit 1
fi
}
function package_renamer(){
_pkg=$1
case $DistroBasedOn in
"debian")
_pkg=$(echo $_pkg | sed 's/-devel$/-dev/')
;;
*)
_pkg=$(echo $_pkg | sed 's/-dev$/-devel/')
;;
esac
echo $_pkg
}

View File

@ -1,26 +0,0 @@
#!/bin/bash
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
get_os
[[ $? -ne 0 ]] && exit 1
if [[ "$DistroBasedOn" != "redhat" ]]; then
DEBUGLVL=4
log "ERROR: We are sorry, only \"redhat\" based distribution of Linux supported for this service type, exiting!"
exit 1
fi
sed -e "s/YOURUSERNAMEHERE/$2/" -i /usr/share/tomcat/webapps/app/META-INF/context.xml
sed -e "s/YOURPASSWORDHERE/$3/" -i /usr/share/tomcat/webapps/app/META-INF/context.xml
sed -e "s/YOURHOSTHERE/$4/" -i /usr/share/tomcat/webapps/app/META-INF/context.xml
sed -e "s/YOURDATABASEHERE/$1/" -i /usr/share/tomcat/webapps/app/META-INF/context.xml

View File

@ -1,28 +0,0 @@
#!/bin/bash
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
get_os
[[ $? -ne 0 ]] && exit 1
if [[ "$DistroBasedOn" != "redhat" ]]; then
DEBUGLVL=4
log "ERROR: We are sorry, only \"redhat\" based distribution of Linux supported for this service type, exiting!"
exit 1
fi
su -c "psql -d postgres -c \"CREATE DATABASE $1\"" -s /bin/sh postgres
su -c "psql -d postgres -c \"CREATE USER $2 WITH PASSWORD '$3'\"" -s /bin/sh postgres
su -c "psql -d postgres -c \"GRANT ALL PRIVILEGES ON DATABASE $1 to $2;\"" -s /bin/sh postgres
echo "host $1 $2 all md5" >> /var/lib/pgsql/data/pg_hba.conf
systemctl restart postgresql.service

View File

@ -1,31 +0,0 @@
#!/bin/bash
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
get_os
[[ $? -ne 0 ]] && exit 1
if [[ "$DistroBasedOn" != "redhat" ]]; then
DEBUGLVL=4
log "ERROR: We are sorry, only \"redhat\" based distribution of Linux supported for this service type, exiting!"
exit 1
fi
bash installer.sh -p sys -i "postgresql-server postgresql-contrib"
postgresql-setup initdb
sed -e "s/^#listen_addresses =.*$/listen_addresses = \'*\'/" -i /var/lib/pgsql/data/postgresql.conf
add_fw_rule '-I INPUT 1 -p tcp -m tcp --dport 5432 -j ACCEPT -m comment --comment "by murano, PostgreSQL"'
systemctl enable postgresql.service
systemctl start postgresql.service

View File

@ -1,29 +0,0 @@
#!/bin/bash
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
get_os
[[ $? -ne 0 ]] && exit 1
if [[ "$DistroBasedOn" != "redhat" ]]; then
DEBUGLVL=4
log "ERROR: We are sorry, only \"redhat\" based distribution of Linux supported for this service type, exiting!"
exit 1
fi
bash installer.sh -p sys -i "tomcat tomcat-webapps tomcat-admin-webapps"
add_fw_rule '-I INPUT 1 -p tcp -m tcp --dport 8080 -j ACCEPT -m comment --comment "by murano, Tomcat"'
systemctl enable tomcat.service
systemctl start tomcat.service

View File

@ -1,30 +0,0 @@
#!/bin/bash
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
get_os
[[ $? -ne 0 ]] && exit 1
if [[ "$DistroBasedOn" != "redhat" ]]; then
DEBUGLVL=4
log "ERROR: We are sorry, only \"redhat\" based distribution of Linux supported for this service type, exiting!"
exit 1
fi
bash installer.sh -p sys -i "java-devel"
cd /usr/share/tomcat/webapps
git clone $1 app
cd app/WEB-INF/classes
for f in $(find . -name "*.java"); do
javac -cp /usr/share/tomcat/lib/tomcat-servlet-3.0-api.jar "$f"
done

View File

@ -1,2 +0,0 @@
#!/bin/sh
curl -s http://169.254.169.254/latest/meta-data/local-ipv4

View File

@ -1,142 +0,0 @@
#!/bin/bash
#
INSTALLER_OPTS=""
UNINSTALLER_OPTS=""
PMGR=""
PMGR_LIST_OPTS=""
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
exit 1
fi
}
function set_install_options(){
case $1 in
apt-get )
INSTALLER_OPTS="-y -q install"
UNINSTALLER_OPTS="-y -q remove"
PMGR="dpkg"
PMGR_LIST_OPTS="-s"
;;
yum )
INSTALLER_OPTS="--assumeyes install"
UNINSTALLER_OPTS="--assumeyes erase"
PMGR="rpm"
PMGR_LIST_OPTS="-q"
;;
urpm* )
INSTALLER_OPTS="-y"
UNINSTALLER_OPTS=""
PMGR="rpm"
PMGR_LIST_OPTS="-q"
;;
zypper )
INSTALLER_OPTS="install"
UNINSTALLER_OPTS="remove --quiet"
PMGR="rpm"
PMGR_LIST_OPTS="-q"
;;
pip )
INSTALLER_OPTS="install"
UNINSTALLER_OPTS="uninstall --yes"
find_pip
PACKAGER=$PIPCMD
PMGR=$PIPCMD
PMGR_LIST_OPTS="freeze | grep"
;;
* )
exit 1
;;
esac
PACKAGER=$(which $1)
if [ $? -ne 0 ]; then
log "Can't find \"$1\", exiting!"
exit 1
fi
}
function package_install(){
PKG=$1
eval "$PMGR $PMGR_LIST_OPTS $PKG" > /dev/null 2>&1
if [ $? -eq 0 ]; then
log "\"$PKG\" already installed"
else
log "Installing \"$PKG\" ..."
$PACKAGER $INSTALLER_OPTS $PKG > /dev/null 2>&1
if [ $? -ne 0 ]; then
log "\"$PKG\" installation fails, exiting!"
exit 1
else
log "\t\t...success"
fi
fi
}
function package_uninstall(){
PKG=$1
eval "$PMGR $PMGR_LIST_OPTS $PKG" > /dev/null 2>&1
if [ $? -eq 1 ]; then
log "\"$PKG\" not installed"
else
log "Unnstalling \"$PKG\" ..."
$PACKAGER $UNINSTALLER_OPTS $PKG > /dev/null 2>&1
if [ $? -ne 0 ]; then
log "\"$PKG\" uninstallation fails, exiting!"
exit 1
else
log "\t\t...success"
fi
fi
}
function run_install(){
for PKG in $@
do
package_install $PKG
done
}
function run_uninstall(){
for PKG in $@
do
package_uninstall $PKG
done
}
# Main workflow
include "common.sh"
if [ $# -eq 0 ]; then
script=$(basename $0)
echo -e "Usage:\n\t* install packages -- ./$script -p package_manager -i package0 [packageN]\n\t* remove packages -- ./$script -p package_manager -r package0 [packageN]"
exit 1
fi
Packager=''
get_os
if [ $? -ne 0 ]; then
log "Unsupported *nix version ($DistroBasedOn - $DIST/$PSUEDONAME/$REV/$MACH)"
exit 1
fi
while getopts ":p:i:r:" opt ; do
case "$opt" in
p)
if [[ "$OPTARG" != sys ]]; then
Packager=$OPTARG
fi
set_install_options $Packager
;;
i)
n=$OPTARG
run_install $(collect_args $n $@)
break;
;;
r)
n=$OPTARG
run_uninstall $(collect_args $n $@)
break;
;;
\?)
log "Invalid option: -$OPTARG" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))

View File

@ -1,37 +0,0 @@
#!/bin/bash
#
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
# FirewallRules
FW_RULE1='-I INPUT 1 -p tcp -m tcp --dport 443 -j ACCEPT -m comment --comment "by murano, Apache server access on HTTPS port 443"'
FW_RULE2='-I INPUT 1 -p tcp -m tcp --dport 80 -j ACCEPT -m comment --comment "by murano, Apache server access on HTTP port 80"'
APP=''
get_os
[[ $? -ne 0 ]] && exit 1
case $DistroBasedOn in
"debian")
APP="apache2"
;;
"redhat")
APP="httpd"
;;
esac
_php=""
if [[ "$1" == "True" ]]; then
_php="php"
fi
APPS_TO_INSTALL="$APP $_php $FW_BOOT_PKG"
bash installer.sh -p sys -i $APPS_TO_INSTALL
enable_init $APP
service $APP start > /dev/null 2>&1
add_fw_rule $FW_RULE1
add_fw_rule $FW_RULE2

View File

@ -1,67 +0,0 @@
#!/bin/bash
#
function include(){
curr_dir=$(cd $(dirname "$0") && pwd)
inc_file_path=$curr_dir/$1
if [ -f "$inc_file_path" ]; then
. $inc_file_path
else
echo -e "$inc_file_path not found!"
exit 1
fi
}
include "common.sh"
# FirewallRules
FW_RULE1='-I INPUT 1 -p tcp -m tcp --dport 23 -j ACCEPT -m comment --comment "by murano, Telnet server access on port 23"'
APP=''
XINIT_CFG=0
get_os
[[ $? -ne 0 ]] && exit 1
case $DistroBasedOn in
"debian")
APP="telnetd"
;;
"redhat")
APP="telnet-server"
XINIT_CFG=1
;;
esac
APPS_TO_INSTALL="$APP"
bash installer.sh -p sys -i $APPS_TO_INSTALL
if [ $XINIT_CFG -gt 0 ]; then
xinetd_tlnt_cfg="/etc/xinetd.d/telnet"
if [ -f "$xinetd_tlnt_cfg" ]; then
sed -i '/disable.*=/ s/yes/no/' $xinetd_tlnt_cfg
if [ $? -ne 0 ]; then
log "can't modify $xinetd_tlnt_cfg"
exit 1
fi
else
log "$APP startup config not found under $xinetd_tlnt_cfg"
fi
#security tty for telnet
setty=/etc/securetty
lines=$(sed -ne '/^pts\/[0-9]/,/^pts\/[0-9]/ =' $setty)
if [ -z "$lines" ]; then
cat >> $setty << "EOF"
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
EOF
if [ $? -ne 0 ]; then
log "Error occured during $setty changing..."
exit 1
fi
else
echo "$setty has pts/0-9 options..."
fi
restart_service xinetd
fi
add_fw_rule $FW_RULE1

View File

@ -1,64 +0,0 @@
trap {
&$TrapHandler
}
function New-SqlServerSystemAccount {
param (
# (REQUIRED) Domain Name
[Parameter(Mandatory=$true)]
[String] $DomainName,
# (REQUIRED) User name who has permissions to create and modify userPassword
# Usually this is the domain administrator '$domainName\Administrator' account
[Parameter(Mandatory=$true)]
[String] $UserName,
# (REQUIRED) Password for that user
[Parameter(Mandatory=$true)]
[String] $UserPassword,
# (REQUIRED) User name for a new account that will be used to run SQL Server
[Parameter(Mandatory=$true)]
[String] $SQLServiceUserName,
# (REQUIRED) Password for that user
[Parameter(Mandatory=$true)]
[String] $SQLServiceUserPassword,
[String] $PrimaryNode = ' '
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ($PrimaryNode.ToLower() -ne ($Env:ComputerName).ToLower()) {
Write-Log "THis function runs on AOAG primary node only."
Write-Log "Exiting."
return
}
Write-Log "Installing 'RSAT-AD-PowerShell' ... "
Add-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
$Creds = New-Credential -UserName "$DomainName\$UserName" -Password "$UserPassword"
Write-Log "Adding new user ..."
$null = New-ADUser `
-Name $SQLServiceUserName `
-AccountPassword $(ConvertTo-SecureString -String $SQLServiceUserPassword -AsPlainText -Force) `
-Credential $Creds `
-ErrorAction 'Stop'
}
}

View File

@ -1,280 +0,0 @@
function New-Option ([string]$Name, [switch]$Switch, [switch]$Boolean, [switch]$String, [switch]$List, $Constraints=$null) {
<#
.SYNOPSIS
Creates Option object
.DESCRIPTION
Option object is a virtual object represtnting typed command line option. These objects encapsulate escaping and
validation matters.
One and only one of the switches 'Switch', 'Boolean', 'String' or 'List' should be provided.
.PARAMETER Name
Option name as it appears in the command line.
.PARAMETER Switch
Use this switch to create valueless option (a switch).
.PARAMETER Boolean
Use this switch to create boolean option. Its value is always converted to "1" or "0"
.PARAMETER String
Use this switch to create string option. Its value will be properly quoted if necessary.
.PARAMETER List
Use this switch to create option with list value. Values will be put into command line using valid value delemiter (a comma)
.PARAMETER Constraints
When this parameter is specified, option values are limited to options from that list.
#>
$Option = New-Object -TypeName PSObject
# Fields
$Option | Add-Member NoteProperty Type -value $null
$Option | Add-Member NoteProperty Name -value $null
$Option | Add-Member NoteProperty AllowedValues -value $null
# Init
$Option | Add-Member ScriptMethod __init__ {
param([string]$Name, $Switch, $Boolean, $String, $List)
$this.Name = $Name
# With respect for our developers we do not check for double type selected
if ($Switch) {
AugmentOptionSwitch($this)
} elseif ($Boolean) {
AugmentOptionBoolean($this)
} elseif ($String) {
AugmentOptionString($this)
} elseif ($List) {
AugmentOptionList($this)
} else {
throw "Switch, Boolean, String or List option type must be provided for option '$Name'"
}
}
$Option | Add-Member ScriptMethod __post_init__ {
param($Constraints=$null)
if ($Constraints -ne $null) {
$this.AllowedValues = @()
$this.AllowedValues = $this.AllowedValues + $Constraints
} else {
$Constraints = $null
}
}
# Methods
$Option | Add-Member -Force ScriptMethod Validate {
if ($this.AllowedValues -ne $null) {
if (-not($this.AllowedValues -contains $this.Value)) {
$Cts = $this.AllowedValues -join ','
throw "Option '$($this.Name)' may have values ($Cts) but not '$($this.Value)'"
}
}
}
$Option | Add-Member -Force ScriptMethod ToString {
return "/$($this.Name)"
}
# invoke constructor
$Option.__init__($Name, $Switch, $Boolean, $String, $List)
$Option.__post_init__($Constraints)
return $Option
}
function AugmentOptionSwitch($Option) {
}
function AugmentOptionBoolean($Option) {
# Fields
$Option | Add-Member NoteProperty Value -value $false
# Methods
$Option | Add-Member -Force ScriptMethod ToString {
if ($this.Value) {
return "/$($this.Name)=1"
} else {
return "/$($this.Name)=0"
}
}
}
function AugmentOptionString($Option) {
# Fields
$Option | Add-Member NoteProperty Value -value ""
# Methods
$Option | Add-Member -Force ScriptMethod ToString {
$v = "$($this.Value)"
if ($v -match '.* .*') {
# TODO: Escape double quote characters if possible
return "/$($this.Name)=`"$v`""
} else {
return "/$($this.Name)=$v"
}
}
}
function AugmentOptionList($Option) {
# Fields
$Option | Add-Member NoteProperty Value -value @()
# Methods
$Option | Add-Member -Force ScriptMethod Validate {
if ($this.AllowedValues -ne $null) {
foreach ($V in $this.Value) {
if (-not($this.AllowedValues -contains $V)) {
$Cts = $this.AllowedValues -join ','
throw "Option '$($this.Name)' may have values ($Cts) but not '$V'"
}
}
}
}
$Option | Add-Member -Force ScriptMethod ToString {
return "/$($this.Name)=$($this.Value -join ',')"
}
}
function New-OptionParser() {
<#
.SYNOPSIS
Creates OptionParser object.
.DESCRIPTION
OptionParser object leverages Option objects capabilities and builds valid command line using specified options.
An application may also be invoked with OptionParser.
#>
$OptionParser = New-Object -TypeName PSObject
# Fields
$OptionParser | Add-Member NoteProperty Options -value @{}
$OptionParser | Add-Member NoteProperty Defaults -value @{}
$OptionParser | Add-Member NoteProperty RequiredOptions -value @()
# Methods
$OptionParser | Add-Member ScriptMethod AddOption {
<#
.SYNOPSIS
Adds supported option into OptionParser.
.DESCRIPTION
OptionParser does not allow using unrecognized options. Use this method to fill OptionParser with recognized options
.PARAMETER Option
Option object
.PARAMETER Required
Required option switch
.PARAMETER Default
Option default value
#>
param($Option, [bool]$Required=$false, $Default=$null)
$this.Options.Add($Option.Name, $Option)
if ($Required) {
$this.RequiredOptions = $this.RequiredOptions + $Option.Name
if ($Option | Get-Member "Value") {
if ($Default) {
$this.Defaults.Add($Option.Name, $Default)
}
} else {
$this.Defaults.Add($Option.Name, $null)
}
}
}
$OptionParser | Add-Member ScriptMethod Parse {
<#
.SYNOPSIS
Parses supplied options and returns command line parameters array.
.DESCRIPTION
This method verifies that only supported options are provided, all mandatory options are in place,
all option meet constraints if any. Unspecified options with default values are added to command line.
So, mandatory option with default value never causes exception.
.PARAMETER Options
A hash map of options to parse. Option names should be mapped to corresponding values.
#>
param([hashtable]$Options)
$CommandLine = @()
foreach ($RequiredOptionName in $this.RequiredOptions) {
if (-not $Options.ContainsKey($RequiredOptionName)) {
$Default = $this.Defaults.Get_Item($RequiredOptionName)
if ($this.Defaults.ContainsKey($RequiredOptionName)) {
$Options.Add($RequiredOptionName, $this.Defaults.Get_Item($RequiredOptionName))
} else {
throw "Required option '$RequiredOptionName' is missing"
}
}
}
foreach ($OptionName in $($Options.keys)) {
$Option = $this.Options.Get_Item($OptionName)
if ($Option -eq $null) {
throw "Option '$OptionName' is not allowed"
}
if ($Option | Get-Member "Value") {
$Option.Value = $Options.Get_Item($OptionName)
}
$Option.Validate()
$CommandLine = $CommandLine + $Option.ToString()
}
return $CommandLine
}
$OptionParser | Add-Member ScriptMethod ExecuteBinary {
param($Binary, [hashtable]$Options = @{}, $CommandLineSuffix = @())
<#
.SYNOPSIS
Executes binary with a command line constructed from provided options. An arbitrary suffix may be
appended to the command line.
.DESCRIPTION
This method uses OptionParser.Parse method to construct command line. If there a command line suffix
was supplied, it is appended to the end of command line. Normally command line suffix should contain
leading space character.
Method waits for executable process to complete and returns its exit code.
.PARAMETER Binary
Full or relative path to the executable to run.
.PARAMETER Options
A hash map of options to pass to the executable.
.PARAMETER CommandLineSuffix
Arbitrary command line suffix. Normally it shoud have leading space character.
#>
$Binary = Get-Item $Binary
$CommandLine = $this.Parse($Options)
if ($CommandLineSuffix) {
$CommandLine = $CommandLine + $CommandLineSuffix
}
Write-Log "Executing: $($Binary.FullName) $($CommandLine -join ' ')"
$process = [System.Diagnostics.Process]::Start($Binary, $CommandLine)
$process.WaitForExit()
$process.Refresh()
return $process.ExitCode
}
return $OptionParser
}

View File

@ -1,84 +0,0 @@
trap {
&$TrapHandler
}
Function ConvertTo-Boolean {
param (
$InputObject,
[Boolean] $Default = $false
)
try {
[System.Convert]::ToBoolean($InputObject)
}
catch {
$Default
}
}
Function Show-Environment {
foreach ($item in (Get-ChildItem Env:)) {
Write-Log ("'{0}' --> '{1}'" -f $item.Name, $item.Value)
}
}
Function Install-SqlServer {
param (
[String] $SetupRoot = '',
[String] $SAPassword = '',
[String] $MuranoFileShare = '',
[Switch] $MixedModeAuth = $false,
[Switch] $UpdateEnabled = $false
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ($SetupRoot -eq '') {
if ($MuranoFileShare -eq '') {
$MuranoFileShare = [Environment]::GetEnvironmentVariable('MuranoFileShare')
if ($MuranoFileShare -eq '') {
throw("Unable to find MuranoFileShare path.")
}
}
$SetupRoot = [IO.Path]::Combine($MuranoFileShare, 'Prerequisites\SQL Server\2012')
}
#$MixedModeAuthSwitch = ConvertTo-Boolean $MixedModeAuth
$ExtraOptions = @{}
if ($MixedModeAuth -eq $true) {
$ExtraOptions += @{'SECURITYMODE' = 'SQL'}
if ($SAPassword -eq '') {
throw("SAPassword must be set when MixedModeAuth is requisted!")
}
}
if ($SAPassword -ne '') {
$ExtraOptions += @{'SAPWD' = $SAPassword}
}
if (-not $UpdateEnabled) {
$ExtraOptions += @{'UpdateEnabled' = $false}
}
Show-Environment
New-SqlServer -SetupRoot $SetupRoot -ExtraOptions $ExtraOptions
}
}

View File

@ -1,367 +0,0 @@
function New-OptionParserInstall {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "INSTALL" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "INSTALL" action.
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParser = New-OptionParser
$IsPartOfDomain = (Get-WmiObject Win32_ComputerSystem).PartOfDomain
$OptionParser.AddOption((New-Option "ACTION" -String -Constraints "INSTALL"), $true, "INSTALL")
$OptionParser.AddOption((New-Option "IACCEPTSQLSERVERLICENSETERMS" -Switch), $true)
$OptionParser.AddOption((New-Option "ENU" -Switch))
#$OptionParser.AddOption((New-Option "UpdateEnabled" -Switch))
$OptionParser.AddOption((New-Option "UpdateEnabled" -Boolean))
$OptionParser.AddOption((New-Option "UpdateSource" -String))
$OptionParser.AddOption((New-Option "CONFIGURATIONFILE" -String))
$OptionParser.AddOption((New-Option "ERRORREPORTING" -Boolean))
$OptionParser.AddOption((New-Option "FEATURES" -List -Constraints ("SQL","SQLEngine","Replication","FullText","DQ","AS","RS","DQC","IS","MDS","Tools","BC","BOL","BIDS","Conn","SSMS","ADV_SSMS","DREPLAY_CTLR","DREPLAY_CLT","SNAC_SDK","SDK","LocalDB")))
$OptionParser.AddOption((New-Option "ROLE" -String -Constraints ("SPI_AS_ExistingFarm", "SPI_AS_NewFarm", "AllFeatures_WithDefaults")))
$OptionParser.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParser.AddOption((New-Option "INSTALLSHAREDDIR" -String))
$OptionParser.AddOption((New-Option "INSTALLSHAREDWOWDIR" -String))
$OptionParser.AddOption((New-Option "INSTANCEDIR" -String))
$OptionParser.AddOption((New-Option "INSTANCEID" -String))
$OptionParser.AddOption((New-Option "INSTANCENAME" -String), $true, "MSSQLSERVER")
$OptionParser.AddOption((New-Option "PID" -String))
$OptionParser.AddOption((New-Option "Q" -Switch))
$OptionParser.AddOption((New-Option "QS" -Switch))
$OptionParser.AddOption((New-Option "UIMODE" -String -Constraints ("Normal", "AutoAdvance")))
$OptionParser.AddOption((New-Option "SQMREPORTING" -Boolean))
$OptionParser.AddOption((New-Option "HIDECONSOLE" -Switch))
$OptionParser.AddOption((New-Option "AGTSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "AGTSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "AGTSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "ASBACKUPDIR" -String))
$OptionParser.AddOption((New-Option "ASCOLLATION" -String))
$OptionParser.AddOption((New-Option "ASCONFIGDIR" -String))
$OptionParser.AddOption((New-Option "ASDATADIR" -String))
$OptionParser.AddOption((New-Option "ASLOGDIR" -String))
$OptionParser.AddOption((New-Option "ASSERVERMODE" -String -Constraints ("MULTIDIMENSIONAL", "POWERPIVOT", "TABULAR")))
$OptionParser.AddOption((New-Option "ASSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "ASSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "ASSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
#$OptionParser.AddOption((New-Option "ASSYSADMINACCOUNTS" -String), $true, "$ENV:USERDOMAIN\$ENV:USERNAME")
if ($IsPartOfDomain) {
$OptionParser.AddOption((New-Option "ASSYSADMINACCOUNTS" -String), $true, "$Env:USERDOMAIN\Administrator")
}
else {
$OptionParser.AddOption((New-Option "ASSYSADMINACCOUNTS" -String), $true, "$Env:COMPUTERNAME\Administrator")
}
$OptionParser.AddOption((New-Option "ASTEMPDIR" -String))
$OptionParser.AddOption((New-Option "ASPROVIDERMSOLAP" -Boolean))
$OptionParser.AddOption((New-Option "FARMACCOUNT" -String))
$OptionParser.AddOption((New-Option "FARMPASSWORD" -String))
$OptionParser.AddOption((New-Option "PASSPHRASE" -String))
$OptionParser.AddOption((New-Option "FARMADMINIPORT" -String))
$OptionParser.AddOption((New-Option "BROWSERSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "ENABLERANU" -Switch))
$OptionParser.AddOption((New-Option "INSTALLSQLDATADIR" -String))
$OptionParser.AddOption((New-Option "SAPWD" -String))
$OptionParser.AddOption((New-Option "SECURITYMODE" -String -Constrainrs ("SQL")))
$OptionParser.AddOption((New-Option "SQLBACKUPDIR" -String))
$OptionParser.AddOption((New-Option "SQLCOLLATION" -String))
$OptionParser.AddOption((New-Option "ADDCURRENTUSERASSQLADMIN" -Switch))
$OptionParser.AddOption((New-Option "SQLSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "SQLSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "SQLSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
#$OptionParser.AddOption((New-Option "SQLSYSADMINACCOUNTS" -String), $true, "$ENV:USERDOMAIN\$ENV:USERNAME")
if ($IsPartOfDomain) {
$OptionParser.AddOption((New-Option "SQLSYSADMINACCOUNTS" -String), $true, "$ENV:USERDOMAIN\Administrator")
}
else {
$OptionParser.AddOption((New-Option "SQLSYSADMINACCOUNTS" -String), $true, "$ENV:COMPUTERNAME\Administrator")
}
$OptionParser.AddOption((New-Option "SQLTEMPDBDIR" -String))
$OptionParser.AddOption((New-Option "SQLTEMPDBLOGDIR" -String))
$OptionParser.AddOption((New-Option "SQLUSERDBDIR" -String))
$OptionParser.AddOption((New-Option "SQLUSERDBLOGDIR" -String))
$OptionParser.AddOption((New-Option "FILESTREAMLEVEL" -String -Constraints ("0", "1", "2", "3")))
$OptionParser.AddOption((New-Option "FILESTREAMSHARENAME" -String))
$OptionParser.AddOption((New-Option "FTSVCACCOUNT" -String))
$OptionParser.AddOption((New-Option "FTSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "ISSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "ISSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "ISSVCStartupType" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "NPENABLED" -Boolean))
$OptionParser.AddOption((New-Option "TCPENABLED" -Boolean))
$OptionParser.AddOption((New-Option "RSINSTALLMODE" -String -Constraints ("SharePointFilesOnlyMode", "DefaultNativeMode", "FilesOnlyMode")))
$OptionParser.AddOption((New-Option "RSSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "RSSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "RSSVCStartupType" -String -Constraints ("Manual", "Automatic", "Disabled")))
return $OptionParser
}
function New-OptionParserPrepareImage {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "PrepareImage" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "PrepareImage" action.
Note that for installer version of MS SQL Server prior to 2012 SP1 Cumulative Update 2 only the
following features are supported: SQLEngine, Replication, FullText, RS
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParser = New-OptionParser
$OptionParser.AddOption((New-Option "ACTION" -String -Constraints "PrepareImage"), $true, "PrepareImage")
$OptionParser.AddOption((New-Option "IACCEPTSQLSERVERLICENSETERMS" -Switch), $true)
$OptionParser.AddOption((New-Option "ENU" -Switch))
$OptionParser.AddOption((New-Option "UpdateEnabled" -Switch))
$OptionParser.AddOption((New-Option "UpdateSource" -String))
$OptionParser.AddOption((New-Option "CONFIGURATIONFILE" -String))
# $OptionParser.AddOption((New-Option "FEATURES" -List -Constraints ("SQLEngine","Replication","FullText","RS")))
$OptionParser.AddOption((New-Option "FEATURES" -List -Constraints ("SQL","SQLEngine","Replication","FullText","DQ","AS","RS","DQC","IS","MDS","Tools","BC","BOL","BIDS","Conn","SSMS","ADV_SSMS","DREPLAY_CTLR","DREPLAY_CLT","SNAC_SDK","SDK","LocalDB")))
$OptionParser.AddOption((New-Option "HIDECONSOLE" -Switch))
$OptionParser.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParser.AddOption((New-Option "INSTALLSHAREDDIR" -String))
$OptionParser.AddOption((New-Option "INSTANCEDIR" -String))
$OptionParser.AddOption((New-Option "INSTANCEID" -String), $true, "MSSQLSERVER")
$OptionParser.AddOption((New-Option "Q" -Switch))
$OptionParser.AddOption((New-Option "QS" -Switch))
return $OptionParser
}
function New-OptionParserPrepareImageSP1U2 {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "PrepareImage" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "PrepareImage" action.
This cmdlet should be used only for MS SQL Server 2012 SP1 Cimilative Update 2 or later.
Note that for installer version of MS SQL Server prior to 2012 SP1 Cimilative Update 2 only the
following features are supported: SQLEngine, Replication, FullText, RS
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParser = New-OptionParser
$OptionParser.AddOption((New-Option "ACTION" -String -Constraints "PrepareImage"), $true, "PrepareImage")
$OptionParser.AddOption((New-Option "IACCEPTSQLSERVERLICENSETERMS" -Switch), $true)
$OptionParser.AddOption((New-Option "ENU" -Switch))
$OptionParser.AddOption((New-Option "UpdateEnabled" -Switch))
$OptionParser.AddOption((New-Option "UpdateSource" -String))
$OptionParser.AddOption((New-Option "CONFIGURATIONFILE" -String))
$OptionParser.AddOption((New-Option "FEATURES" -List -Constraints ("SQL","SQLEngine","Replication","FullText","DQ","AS","RS","DQC","IS","MDS","Tools","BC","BOL","BIDS","Conn","SSMS","ADV_SSMS","SNAC_SDK","SDK","LocalDB")))
$OptionParser.AddOption((New-Option "HIDECONSOLE" -Switch))
$OptionParser.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParser.AddOption((New-Option "INSTALLSHAREDDIR" -String))
$OptionParser.AddOption((New-Option "INSTANCEDIR" -String))
$OptionParser.AddOption((New-Option "INSTANCEID" -String), $true, "MSSQLSERVER")
$OptionParser.AddOption((New-Option "Q" -Switch))
$OptionParser.AddOption((New-Option "QS" -Switch))
return $OptionParser
}
function New-OptionParserCompleteImage {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "CompleteImage" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "CompleteImage" action.
Note that INSTANCEID parameter value MUST be the same as specified on "PrepareImage" phase.
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParser = New-OptionParser
$OptionParser.AddOption((New-Option "ACTION" -String -Constraints "CompleteImage"), $true, "CompleteImage")
$OptionParser.AddOption((New-Option "IACCEPTSQLSERVERLICENSETERMS" -Switch), $true)
$OptionParser.AddOption((New-Option "ENU" -Switch))
$OptionParser.AddOption((New-Option "CONFIGURATIONFILE" -String))
$OptionParser.AddOption((New-Option "ERRORREPORTING" -Boolean))
$OptionParser.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParser.AddOption((New-Option "INSTANCEID" -String), $true, "MSSQLSERVER")
$OptionParser.AddOption((New-Option "INSTANCENAME" -String), $true, "MSSQLSERVER")
$OptionParser.AddOption((New-Option "PID" -String))
$OptionParser.AddOption((New-Option "Q" -Switch))
$OptionParser.AddOption((New-Option "QS" -Switch))
$OptionParser.AddOption((New-Option "SQMREPORTING" -Boolean))
$OptionParser.AddOption((New-Option "HIDECONSOLE" -Switch))
$OptionParser.AddOption((New-Option "AGTSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "AGTSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "AGTSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "BROWSERSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "ENABLERANU" -Switch))
$OptionParser.AddOption((New-Option "INSTALLSQLDATADIR" -String))
$OptionParser.AddOption((New-Option "SAPWD" -String))
$OptionParser.AddOption((New-Option "SECURITYMODE" -String -Constrainrs ("SQL")))
$OptionParser.AddOption((New-Option "SQLBACKUPDIR" -String))
$OptionParser.AddOption((New-Option "SQLCOLLATION" -String))
$OptionParser.AddOption((New-Option "SQLSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "SQLSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "SQLSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "SQLSYSADMINACCOUNTS" -String), $true, "$ENV:USERDOMAIN\$ENV:USERNAME")
$OptionParser.AddOption((New-Option "SQLTEMPDBDIR" -String))
$OptionParser.AddOption((New-Option "SQLTEMPDBLOGDIR" -String))
$OptionParser.AddOption((New-Option "SQLUSERDBDIR" -String))
$OptionParser.AddOption((New-Option "SQLUSERDBLOGDIR" -String))
$OptionParser.AddOption((New-Option "FILESTREAMLEVEL" -String -Constraints ("0", "1", "2", "3")))
$OptionParser.AddOption((New-Option "FILESTREAMSHARENAME" -String))
$OptionParser.AddOption((New-Option "FTSVCACCOUNT" -String))
$OptionParser.AddOption((New-Option "FTSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "NPENABLED" -Boolean))
$OptionParser.AddOption((New-Option "TCPENABLED" -Boolean))
$OptionParser.AddOption((New-Option "RSINSTALLMODE" -String -Constraints ("SharePointFilesOnlyMode", "DefaultNativeMode", "FilesOnlyMode")))
$OptionParser.AddOption((New-Option "RSSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "RSSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "RSSVCStartupType" -String -Constraints ("Manual", "Automatic", "Disabled")))
return $OptionParser
}
function New-OptionParserCompleteImageSP1U2 {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "CompleteImage" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "CompleteImage" action.
This cmdlet should be used only for MS SQL Server 2012 SP1 Cimilative Update 2 or later.
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParser = New-OptionParser
$OptionParser.AddOption((New-Option "ACTION" -String -Constraints "CompleteImage"), $true, "CompleteImage")
$OptionParser.AddOption((New-Option "IACCEPTSQLSERVERLICENSETERMS" -Switch), $true)
$OptionParser.AddOption((New-Option "ENU" -Switch))
$OptionParser.AddOption((New-Option "CONFIGURATIONFILE" -String))
$OptionParser.AddOption((New-Option "ERRORREPORTING" -Boolean))
$OptionParser.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParser.AddOption((New-Option "INSTANCEID" -String))
$OptionParser.AddOption((New-Option "INSTANCENAME" -String))
$OptionParser.AddOption((New-Option "PID" -String))
$OptionParser.AddOption((New-Option "Q" -Switch))
$OptionParser.AddOption((New-Option "QS" -Switch))
$OptionParser.AddOption((New-Option "SQMREPORTING" -Boolean))
$OptionParser.AddOption((New-Option "HIDECONSOLE" -Switch))
$OptionParser.AddOption((New-Option "AGTSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "AGTSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "AGTSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "BROWSERSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "ENABLERANU" -Switch))
$OptionParser.AddOption((New-Option "INSTALLSQLDATADIR" -String))
$OptionParser.AddOption((New-Option "SAPWD" -String))
$OptionParser.AddOption((New-Option "SECURITYMODE" -String -Constrainrs ("SQL")))
$OptionParser.AddOption((New-Option "SQLBACKUPDIR" -String))
$OptionParser.AddOption((New-Option "SQLCOLLATION" -String))
$OptionParser.AddOption((New-Option "SQLSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "SQLSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "SQLSVCSTARTUPTYPE" -String -Constraints ("Manual", "Automatic", "Disabled")))
$OptionParser.AddOption((New-Option "SQLSYSADMINACCOUNTS" -String), $true, "$ENV:USERDOMAIN\$ENV:USERNAME")
$OptionParser.AddOption((New-Option "SQLTEMPDBDIR" -String))
$OptionParser.AddOption((New-Option "SQLTEMPDBLOGDIR" -String))
$OptionParser.AddOption((New-Option "SQLUSERDBDIR" -String))
$OptionParser.AddOption((New-Option "SQLUSERDBLOGDIR" -String))
$OptionParser.AddOption((New-Option "FILESTREAMLEVEL" -String -Constraints ("0", "1", "2", "3")))
$OptionParser.AddOption((New-Option "FILESTREAMSHARENAME" -String))
$OptionParser.AddOption((New-Option "FTSVCACCOUNT" -String))
$OptionParser.AddOption((New-Option "FTSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "NPENABLED" -Boolean))
$OptionParser.AddOption((New-Option "TCPENABLED" -Boolean))
$OptionParser.AddOption((New-Option "RSINSTALLMODE" -String -Constraints ("SharePointFilesOnlyMode", "DefaultNativeMode", "FilesOnlyMode")))
$OptionParser.AddOption((New-Option "RSSVCACCOUNT" -String), $true, "NT AUTHORITY\Network Service")
$OptionParser.AddOption((New-Option "RSSVCPASSWORD" -String))
$OptionParser.AddOption((New-Option "RSSVCStartupType" -String -Constraints ("Manual", "Automatic", "Disabled")))
return $OptionParser
}
function New-OptionParserUpgrade {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserEditionUpgrade {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserRepair {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserRebuilddatabase {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserUninstall {
<#
.SYNOPSIS
Creates an option parser for MS SQL Server 2012 setup "INSTALL" action.
.DESCRIPTION
Use this cmdlet to create an option parser for MS SQL Server 2012 setup "INSTALL" action.
All documented option are supported. See the following link for details:
http://msdn.microsoft.com/en-us/library/ms144259.aspx
#>
$OptionParser = New-OptionParser
$OptionParser.AddOption((New-Option "ACTION" -String -Constraints "UNINSTALL"), $true, "UNINSTALL")
$OptionParser.AddOption((New-Option "CONFIGURATIONFILE" -String))
$OptionParser.AddOption((New-Option "FEATURES" -List -Constraints ("SQL","SQLEngine","Replication","FullText","DQ","AS","RS","DQC","IS","MDS","Tools","BC","BOL","BIDS","Conn","SSMS","ADV_SSMS","DREPLAY_CTLR","DREPLAY_CLT","SNAC_SDK","SDK","LocalDB")), $true)
$OptionParser.AddOption((New-Option "INDICATEPROGRESS" -Switch))
$OptionParser.AddOption((New-Option "INSTANCENAME" -String), $true, "MSSQLSERVER")
$OptionParser.AddOption((New-Option "Q" -Switch))
$OptionParser.AddOption((New-Option "HIDECONSOLE" -Switch))
return $OptionParser
}
function New-OptionParserInstallFailoverCluster {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserPrepareFailoverCluster {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserCompleteFailoverCluster {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserUpgrade {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserAddNode {
# ToDo: Implement
throw "Not yet implemented"
}
function New-OptionParserRemoveNode {
# ToDo: Implement
throw "Not yet implemented"
}

View File

@ -1,37 +0,0 @@
trap {
&$TrapHandler
}
Function Set-LocalUserPassword {
param (
[String] $UserName,
[String] $Password,
[Switch] $Force
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ((Get-WmiObject Win32_UserAccount -Filter "LocalAccount = 'True' AND Name='$UserName'") -eq $null) {
throw "Unable to find local user account '$UserName'"
}
if ($Force) {
Write-Log "Changing password for user '$UserName' to '*****'" # :)
$null = ([ADSI] "WinNT://./$UserName").SetPassword($Password)
}
else {
Write-LogWarning "You are trying to change password for user '$UserName'. To do this please run the command again with -Force parameter."
}
}
}

View File

@ -1,239 +0,0 @@
<#
.DESCRIPTION
## Failover Cluster Input Data (from the UI)
* Domain Membership
- [String] / [Select box] $DomainName - Domain name
* Domain User Credentials
- [String] $UserName - Username
- [Password string] $UserPassword - User password
* Shared Folder Information
- [String] $ShareServer - Server which will host the folder
- [String] $ShareName - Share name
- [String] $SharePath - Shared folder internal path
* Failover Cluster Members
- [String] $ClusterName - Cluster name
- [String] $ClusterIP - Static IP address that will be assigned to the cluster
- [String[]] $ClusterNodes - List of node names
## Failover Cluster creation workflow
* Create AD domain
* Join all the VMs to that domain
* Prepare nodes
- Install Failover Cluster prerequisites on all FC nodes
* Create failover cluster
- Create new cluster
- Add members
* Confugure FC quorum
- Create new folder that will be shared
- Share that folder with appropriate permissions
- Configure quorum mode
## Helpful SmbShare* Functions
* New-SmbShare
* Grant-SmbShareAccess
#>
trap {
&$TrapHandler
}
function Install-FailoverClusterPrerequisites {
#Import-Module FailoverClusters
#Add-WindowsFeature Failover-Clustering, RSAT-Clustering-PowerShell
}
function New-FailoverClusterSharedFolder {
param (
[String] $ClusterName,
[String] $DomainName,
[String] $ShareServer,
[String] $SharePath = $($Env:SystemDrive + '\FCShare'),
[String] $ShareName = 'FCShare',
[String] $UserName,
[String] $UserPassword,
$Credential = $null
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Write-Log "--> New-FailoverClusterSharedFolder"
Write-Log "Creating shared folder for Failover Cluster ..."
if ($Credential -eq $null) {
$Credential = New-Credential -UserName "$DomainName\$UserName" -Password "$UserPassword"
}
if ((Test-Connection -ComputerName $ShareServer -Count 1 -Quiet) -eq $false) {
throw("Server '$ShareServer' is unreachable via ICMP.")
}
$Session = New-PSSession -ComputerName $ShareServer -Credential $Credential
Write-Log "Creating folder on '$ShareServer' ..."
Invoke-Command -Session $Session -ScriptBlock {
param (
[String] $SharePath,
[String] $ShareName,
[String] $ClusterAccount
)
Remove-SmbShare -Name $ShareName -Force -ErrorAction 'SilentlyContinue'
Remove-Item -Path $SharePath -Force -ErrorAction 'SilentlyContinue'
New-Item -Path $SharePath -ItemType Container -Force
New-SmbShare -Path $SharePath `
-Name $ShareName `
-FullAccess "$ClusterAccount", 'Everyone' `
-Description "Shared folder for Failover Cluster."
} -ArgumentList $SharePath, $ShareName, "$DomainName\$ClusterName`$"
Write-Log "Confguring Failover Cluster to use shared folder as qourum resourse ..."
$null = Set-ClusterQuorum -NodeAndFileShareMajority "\\$ShareServer\$ShareName"
Write-Log "<-- New-FailoverClusterSharedFolder"
}
}
function New-FailoverCluster {
param (
[String] $ClusterName,
[String] $StaticAddress,
[String[]] $ClusterNodes,
[String] $DomainName,
[String] $UserName,
[String] $UserPassword,
$Credential
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Write-Log "ClusterNodes: $($ClusterNodes -join ', ')"
if ($Credential -eq $null) {
$Credential = New-Credential -UserName "$DomainName\$UserName" -Password "$UserPassword"
}
foreach ($Node in $ClusterNodes) {
Write-LogDebug "Installing Failover Cluster modules on '$Node' ..."
$null = Invoke-Command `
-ComputerName $Node `
-Credential $Credential `
-ScriptBlock {
Add-WindowsFeature Failover-Clustering, RSAT-Clustering-PowerShell
}
}
Import-Module FailoverClusters
if ((Get-Cluster $ClusterName -ErrorAction SilentlyContinue) -eq $null) {
Write-Log "Creating new cluster '$ClusterName' ..."
<#
Start-PowerShellProcess -Command @"
Import-Module FailoverClusters
New-Cluster -Name '$ClusterName' -StaticAddress '$StaticAddress'
"@ -Credential $Credential -NoBase64
#>
New-Cluster -Name "$ClusterName" -StaticAddress "$StaticAddress"
Start-Sleep -Seconds 30
}
else {
Write-Log "Cluster '$ClusterName' already exists."
}
foreach ($Node in $ClusterNodes) {
Write-Log "Adding node '$Node' to the cluster '$ClusterName' ..."
if ((Get-ClusterNode $Node -ErrorAction SilentlyContinue) -eq $null) {
Write-Log "Adding node ..."
<#
Start-PowerShellProcess -Command @"
Import-Module FailoverClusters
Add-ClusterNode -Cluster '$ClusterName' -Name '$Node'
"@ -Credential $Credential -NoBase64
#>
Add-ClusterNode -Cluster "$ClusterName" -Name "$Node"
}
else {
Write-Log "Node '$Node' already a part of the cluster '$ClusterName'."
}
}
}
}
<#
# Example
$DomainName = 'fc-acme.local'
$DomainUser = 'Administrator'
$DomainPassword = 'P@ssw0rd'
$ClusterName = 'fc-test'
$ClusterIP = '10.200.0.60'
$ClusterNodes = @('fc-node-01','fc-node-02','fc-node-03')
$ShareServer = 'fc-dc-01'
$ShareName = 'FCShare'
$SharePath = "C:\$ShareName"
Import-Module CoreFunctions -Force
$Creds = New-Credential `
-UserName "$DomainName\$DomainUser" `
-Password "$DomainPassword"
New-FailoverCluster `
-ClusterName $ClusterName `
-StaticAddress $ClusterIP `
-ClusterNodes $ClusterNodes `
-Credential $Creds
New-FailoverClusterSharedFolder `
-ClusterName $ClusterName `
-DomainName $DomainName `
-ShareServer $ShareServer `
-SharePath "$SharePath" `
-ShareName "$ShareName" `
-Credential $Creds
#>

View File

@ -1,538 +0,0 @@
trap {
&$TrapHandler
}
function Install-SqlServerPowerShellModule {
param (
[String] $SetupRoot = ''
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ((Get-Module SQLPS -ListAvailable) -ne $null) {
Write-Log "Module SQLSP already installed."
return
}
if ($MuranoFileShare -eq '') {
$MuranoFileShare = [String]([Environment]::GetEnvironmentVariable('MuranoFileShare'))
if ($MuranoFileShare -eq '') {
throw "Unable to find MuranoFileShare path."
}
}
Write-LogDebug "MuranoFileShare = '$MuranoFileShare'"
if ($SetupRoot -eq '') {
$SetupRoot = [IO.Path]::Combine("$MuranoFileShare", 'Prerequisites\SQL Server\Tools')
}
Write-LogDebug "SetupRoot = '$SetupRoot'"
$FileList = @(
'SQLSysClrTypes.msi',
'SharedManagementObjects.msi',
'PowerShellTools.msi'
)
foreach ($MsiFile in $FileList) {
Write-Log "Trying to install '$MsiFile' ..."
$MsiPath = Join-Path $SetupRoot $MsiFile
if ([IO.File]::Exists($MsiPath)) {
Write-Log "Starting msiexe ..."
$Result = Exec -FilePath "msiexec.exe" -ArgumentList @('/i', "`"$MsiPath`"", '/quiet') -PassThru
if ($Result.ExitCode -ne 0) {
throw "Installation of MSI package '$MsiPath' failed with error code '$($Result.ExitCode)'"
}
}
else {
Write-Log "File '$MsiPath' not found."
}
}
}
}
function Install-SqlServerForAOAG {
param (
# Path to folder where msi files for additional SQL features are located
[String] $SetupRoot = '',
# Path to folder where msi files for additional SQLPS module are located
[String] $SqlpsSetupRoot = '',
[String] $MuranoFileShare = '',
# (REQUIRED) Domain name
[String] $SQLServiceUserDomain = 'fc-acme.local',
# (REQUIRED) User name for the account which will be used by SQL service
[String] $SQLServiceUserName = 'Administrator',
# (REQUIRED) Password for that user
[String] $SQLServiceUserPassword = 'P@ssw0rd',
[Switch] $UpdateEnabled
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ($MuranoFileShare -eq '') {
$MuranoFileShare = [String]([Environment]::GetEnvironmentVariable('MuranoFileShare'))
if ($MuranoFileShare -eq '') {
throw "Unable to find MuranoFileShare path."
}
}
Write-LogDebug "MuranoFileShare = '$MuranoFileShare'"
if ($SetupRoot -eq '') {
$SetupRoot = [IO.Path]::Combine("$MuranoFileShare", 'Prerequisites\SQL Server\2012')
}
Write-LogDebug "SetupRoot = '$SetupRoot'"
$ExtraOptions = @{}
if ($UpdateEnabled) {
$ExtraOptions += @{'UpdateEnabled' = $true}
}
else {
$ExtraOptions += @{'UpdateEnabled' = $false}
}
$null = New-SQLServerForAOAG `
-SetupRoot $SetupRoot `
-SQLSvcUsrDomain $SQLServiceUserDomain `
-SQLSvcUsrName $SQLServiceUserName `
-SQLSvcUsrPassword $SQLServiceUserPassword `
-ExtraOptions $ExtraOptions
}
}
function Initialize-AlwaysOnAvailabilityGroup {
param (
[String] $DomainName,
[String] $DomainAdminAccountName,
[String] $DomainAdminAccountPassword,
[String] $SqlServiceAccountName,
[String] $PrimaryNode,
[String] $ShareName = 'SharedWorkDir'
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
$ShareNetworkPath = '\\' + $PrimaryNode + '\' + $ShareName
$DomainAdminAccountCreds = New-Credential `
-UserName "$DomainName\$DomainAdminAccountName" `
-Password "$DomainAdminAccountPassword"
$FunctionsFile = Export-Function 'Get-NextFreePort', 'Initialize-AlwaysOn'
$null = Start-PowerShellProcess @"
trap {
`$_
exit 1
}
Import-Module CoreFunctions
Write-Log "Importing functions file '$FunctionsFile' ..."
. "$FunctionsFile"
Write-Log "Starting 'Initialize-AlwaysOn' ..."
`$XmlFile = [IO.Path]::Combine("$ShareNetworkPath", "`$(`$Env:ComputerName).xml")
Write-Log "Output XML file is '`$XmlFile'"
Initialize-AlwaysOn | Export-CliXml -Path `$XmlFile
"@ -Credential $DomainAdminAccountCreds -NoBase64
}
}
function New-SharedFolderForAOAG {
param (
# (OPTIONAL)
[String] $SharePath = [IO.Path]::Combine($Env:SystemDrive + '\', 'SharedWorkDir'),
# (OPTIONAL)
[String] $ShareName = 'SharedWorkDir',
[String] $PrimaryNode = ' '
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ($PrimaryNode.ToLower() -ne ($Env:ComputerName).ToLower()) {
Write-Log "This script runs on primary node only."
Write-Log "Exiting script."
return
}
if ($ShareName -eq '') {
$ShareName = [IO.Path]::GetFileNameWithoutExtension($SharePath)
}
Write-LogDebug "SharePath = '$SharePath'"
Write-LogDebug "ShareName = '$ShareName'"
try {
Write-LogDebug "Trying to remove share '$ShareName'"
$null = Get-SmbShare -Name $ShareName -ErrorAction 'Stop'
$null = Remove-SmbShare -Name $ShareName -Force
write-Log "Share '$ShareName' removed."
}
catch {
Write-LogWarning "Share '$ShareName' not exists or cannot be deleted."
}
try {
Write-LogDebug "Trying to remove folder '$SharePath"
$null = Get-Item -Path $SharePath -ErrorAction 'Stop'
$null = Remove-Item -Path $SharePath -Recurse -Force
Write-Log "Folder '$SharePath' removed."
}
catch {
Write-LogWarning "Folder '$SharePath' not exists or cannot be deleted."
}
$null = New-Item -Path $SharePath -ItemType Container -Force
$null = New-SmbShare -Path $SharePath `
-Name $ShareName `
-FullAccess "Everyone" `
-Description "Shared folder for AlwaysOn Availability Group setup."
return '\\' + $Env:ComputerName + '\' + $ShareName
}
}
function New-DatabaseForAOAG {
param (
[String] $DatabaseName,
[String] $DomainName,
[String] $UserName,
[String] $UserPassword
)
$Creds = New-Credential -UserName "$DomainName\$UserName" -Password "$UserPassword"
$FunctionsFile = Export-Function 'Invoke-SQLText', 'ConvertTo-SQLName', 'ConvertTo-SQLString', 'New-SQLDatabase'
Start-PowerShellProcess @"
trap {
`$_
exit 1
}
Import-Module CoreFunctions
Write-Log "Importing functions from file '$FunctionsFile' ..."
. "$FunctionsFile"
Write-Log "Starting 'New-SQLDatabase' ..."
New-SQLDatabase $DatabaseName
"@ -Credential $Creds -NoBase64
}
function Initialize-AOAGPrimaryReplica {
param (
# (OPTIONAL) Name of the new Availability Group. If not specified then default name will be used.
[String] $GroupName = 'MuranoAG',
# (REQUIRED) Nodes that will be configured as replica partners.
#[Parameter(Mandatory=$true)]
[String[]] $NodeList,
# (REQUIRED) Node name that will be primary for selected Availability Group
#[Parameter(Mandatory=$true)]
[String] $PrimaryNode,
# (REQUIRED) Database list that will be added to the Availability Group
#[Parameter(Mandatory=$true)]
[String[]] $DatabaseList,
# (REQUIRED) Listener name that will be used by clients to connect to databases in that AG
#[Parameter(Mandatory=$true)]
[String] $ListenerName = 'MuranoAG_Listener',
# (REQUIRED) IP address of the listener
#[Parameter(Mandatory=$true)]
[String] $ListenerIP,
[String] $ListenerIPMask = '255.255.255.0',
[String] $ListenerPort = '5023',
# Sync Mode Node List
[String[]] $SyncModeNodeList,
[String] $SharedWorkDir = 'SharedWorkDir',
[String] $CliXmlFile = '',
[String] $DomainName,
[String] $UserName,
[String] $UserPassword
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Write-Log "Primary node: '$($PrimaryNode.ToLower())'"
Write-Log "Current node: '$(($Env:ComputerName).ToLower())'"
if ($PrimaryNode.ToLower() -ne $($Env:ComputerName).ToLower()) {
Write-Log "This function works on PrimaryNode only."
Write-Log "Exiting."
return
}
if ($CliXmlFile -eq '') {
$ReplicaDefinitionList = @()
foreach ($Node in $NodeList) {
try {
$NodeEndpointPort = Import-CliXml -Path "\\$PrimaryNode\SharedWorkDir\$Node.xml"
}
catch {
Write-Log "Using default endpoint port 5022"
$NodeEndpointPort = 5022
}
$ReplicaDefinition = @{
"SERVER_INSTANCE" = "$Node";
"ENDPOINT_URL" = "TCP://${Node}:${NodeEndpointPort}";
"AVAILABILITY_MODE" = "ASYNCHRONOUS_COMMIT";
"FAILOVER_MODE"="MANUAL";
}
if ($SyncModeNodeList -contains $Node) {
Write-Log "$Node is in SyncModeNodeList"
$ReplicaDefinition['AVAILABILITY_MODE'] = "SYNCHRONOUS_COMMIT"
$ReplicaDefinition['FAILOVER_MODE'] = "AUTOMATIC"
}
else {
Write-Log "$Node is NOT in SyncModeNodeList"
}
$ReplicaDefinitionList += @($ReplicaDefinition)
}
$Preferences = @{}
$ListenerDefinition = @{
"NAME"=$ListenerName;
"PORT" = "$ListenerPort";
"STATIC" = "$ListenerIP/$ListenerIPMask"
}
$Parameters = @{
'WorkDir' = "\\$PrimaryNode\$SharedWorkDir";
'Name' = $GroupName;
'DatabaseNames' = $DatabaseList;
'ReplicaDefs' = $ReplicaDefinitionList;
'Preferences' = $Preferences;
'ListenerDef' = $ListenerDefinition;
}
$null = Remove-Item -Path "\\$PrimaryNode\SharedWorkDir\*" -Force
$CliXmlFile = [IO.Path]::GetTempFileName()
Write-LogDebug "CliXml file: '$CliXmlFile'"
$null = Export-CliXml -Path $CliXmlFile -InputObject $Parameters -Depth 10
$null = Initialize-AOAGPrimaryReplica `
-CliXmlFile $CliXmlFile `
-DomainName $DomainName `
-UserName $UserName `
-UserPassword $UserPassword `
-PrimaryNode $PrimaryNode
Write-LogDebug "Inner 'Initialize-AOAGPrimaryReplica' call completed."
}
else {
$Creds = New-Credential -UserName "$DomainName\$UserName" -Password "$UserPassword"
$FunctionsFile = Export-Function -All
$null = Start-PowerShellProcess @"
trap {
`$_
exit 1
}
Import-Module CoreFunctions
Write-Log "Importing functions from '$FunctionsFile' ..."
. "$FunctionsFile"
Write-Log "Importing CliXml parameters file ..."
`$Parameters = Import-CliXml -Path $CliXmlFile
Write-Log "Starting 'New-AlwaysOnAvailabilityGroup' ..."
New-AlwaysOnAvailabilityGroup ``
-WorkDir `$Parameters['WorkDir'] ``
-Name `$Parameters['Name'] ``
-DatabaseNames `$Parameters['DatabaseNames'] ``
-ReplicaDefs `$Parameters['ReplicaDefs'] ``
-Preferences `$Parameters['Preferences'] ``
-ListenerDef `$Parameters['ListenerDef']
"@ -Credential $Creds -NoBase64
}
}
}
function Initialize-AOAGSecondaryReplica {
param (
# (REQUIRED) Nodes that will be configured as replica partners.
[Parameter(Mandatory=$true)]
[String[]] $NodeList,
# (REQUIRED) Node name that will be primary for selected Availability Group
[Parameter(Mandatory=$true)]
[String] $PrimaryNode,
[String] $SharedWorkDir = 'SharedWorkDir',
[String] $DomainName,
[String] $UserName,
[String] $UserPassword
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
if ($PrimaryNode.ToLower() -eq ($Env:ComputerName).ToLower()) {
Write-Log "This function works on any SecondaryNode only."
Write-Log "Exiting."
return
}
$Creds = New-Credential -UserName "$DomainName\$UserName" -Password "$UserPassword"
$FunctionsFile = Export-Function -All
$null = Start-PowerShellProcess @"
trap {
$_
exit 1
}
Import-Module CoreFunctions
Write-Log "Importing functions from '$FunctionsFile' ..."
. "$FunctionsFile"
Write-Log "Starting 'New-AlwaysOnAvailabilityGroupReplica' ..."
New-AlwaysOnAvailabilityGroupReplica -WorkDir "\\$PrimaryNode\$SharedWorkDir"
"@ -Credential $Creds -NoBase64
}
}
function Disable-Firewall {
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
netsh advfirewall set allprofiles state off
}
}
function Enable-Firewall {
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
netsh advfirewall set allprofiles state on
}
}
function Enable-TrustedHosts {
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*' -Force
}
}

View File

@ -1,151 +0,0 @@
trap {
&$TrapHandler
}
function Select-CliXmlBlock {
param (
[String] $Path,
[String] $OutFile = [IO.Path]::GetTempFileName()
)
$TagFound = $false
Get-Content $Path |
ForEach-Object {
if ($_ -eq '#< CLIXML') {
$TagFound = $true
}
if ($TagFound) {
Add-Content -Path $OutFile -Value $_
}
}
$OutFile
}
function Start-PowerShellProcess {
param (
[String] $Command,
$Credential = $null,
[Switch] $IgnoreStdErr,
[Switch] $NoBase64
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
$StdOut = [IO.Path]::GetTempFileName()
$StdErr = [IO.Path]::GetTempFileName()
$ArgumentList = @('-OutputFormat', 'XML')
if ($NoBase64) {
$TmpScript = [IO.Path]::GetTempFileName()
Rename-Item -Path "$TmpScript" -NewName "$TmpScript.ps1" -Force
$TmpScript = "$TmpScript.ps1"
Write-LogDebug $TmpScript
$Command | Out-File $TmpScript
$ArgumentList += @('-File', "$TmpScript")
}
else {
$Bytes = [Text.Encoding]::Unicode.GetBytes($Command)
$EncodedCommand = [Convert]::ToBase64String($Bytes)
Write-LogDebug $EncodedCommand
$ArgumentList += @('-EncodedCommand', $EncodedCommand)
}
Write-LogDebug $ArgumentList
Write-Log "Starting external PowerShell process ..."
if ($Credential -eq $null) {
$Process = Start-Process -FilePath 'powershell.exe' `
-ArgumentList @($ArgumentList) `
-RedirectStandardOutput $StdOut `
-RedirectStandardError $StdErr `
-NoNewWindow `
-Wait `
-PassThru
}
else {
$Process = Start-Process -FilePath 'powershell.exe' `
-ArgumentList @($ArgumentList) `
-RedirectStandardOutput $StdOut `
-RedirectStandardError $StdErr `
-Credential $Credential `
-NoNewWindow `
-Wait `
-PassThru
}
Write-Log "External PowerShell process exited with exit code '$($Process.ExitCode)'."
#if ($ArgumentList -contains '-File') {
# Remove-Item -Path $TmpScript -Force
#}
$ErrorActionPreferenceSaved = $ErrorActionPreference
$ErrorActionPreference = 'SilentlyContinue'
Write-LogDebug "StdOut file is '$StdOut'"
Write-LogDebug "StdErr file is '$StdErr'"
if ((Get-Item $StdOut).Length -gt 0) {
try {
Write-LogDebug "Loading StdOut from '$StdOut'"
$TmpFile = Select-CliXmlBlock $StdOut
$StdOutObject = Import-Clixml $TmpFile
Write-LogDebug "<StdOut>"
Write-LogDebug ($StdOutObject)
Write-LogDebug "</StdOut>"
$StdOutObject
#Remove-Item -Path $TmpFile -Force
}
catch {
Write-LogDebug "An error occured while loading StdOut from '$TmpFile'"
}
}
if ((Get-Item $StdErr).Length -gt 0) {
try {
Write-LogDebug "Loading StdErr ..."
$TmpFile = Select-CliXmlBlock $StdErr
$StdErrObject = Import-Clixml $TmpFile
Write-LogDebug "<StdErr>"
Write-LogDebug ($StdErrObject)
Write-LogDebug "</StdErr>"
if (-not $IgnoreStdErr) {
$StdErrObject
}
#Remove-Item -Path $TmpFile -Force
}
catch {
Write-LogDebug "An error occured while loading StdErr from '$TmpFile'"
}
}
$ErrorActionPreference = $ErrorActionPreferenceSaved
if ($Process.ExitCode -ne 0) {
throw("External PowerShell process exited with code '$($Process.ExitCode)'")
}
#Remove-Item $StdOut -Force
#Remove-Item $StdErr -Force
}
}

View File

@ -1,74 +0,0 @@
#!/bin/sh
#
#
#install app
rpm -aq | grep $1 > /dev/null
if [ $? -ne 0 ];then
yum install $1 --assumeyes --quiet
if [ $? -ne 0 ]; then
echo -e "Can't install $1, exiting..."
exit 1
fi
else
echo "$1 already installed."
fi
#find iptables and add telnet rule
iptcmd=$(which iptables)
if [ -n "$iptcmd" ]; then
$iptcmd -nvL INPUT | grep "Telnet server access on TCP port 23" > /dev/null
if [ $? -ne 0 ]; then
$iptcmd -I INPUT 1 -p tcp -m tcp --dport 23 -j ACCEPT -m comment --comment "Telnet server access on TCP port 23"
if [ $? -ne 0 ]; then
echo -e "Can't set $1 access firewall rules, exiting..."
exit 1
else
echo "$iptcmd rule for $1 set."
fi
else
echo "$iptcmd rule for $1 exists."
fi
else
echo "There's no iptables found..."
fi
# check telnet start disabled
xinetd_tlnt_cfg=/etc/xinetd.d/telnet
if [ -f "$xinetd_tlnt_cfg" ]; then
sed -i '/disable.*=/ s/yes/no/' $xinetd_tlnt_cfg
if [ $? -ne 0 ]; then
echo "can't modify $xinetd_tlnt_cfg"
exit 1
fi
else
echo "$ serviec startup config not found under $xinetd_tlnt_cfg"
fi
#security tty for telnet
setty=/etc/securetty
lines=$(sed -ne '/^pts\/[0-9]/,/^pts\/[0-9]/ =' $setty)
if [ -z "$lines" ]; then
cat >> $setty << "EOF"
pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9
EOF
if [ $? -ne 0 ]; then
echo "Error occured during $setty changing..."
exit 1
fi
else
echo "$setty has pts/0-9 options..."
fi
#restart xinetd
service xinetd restart
if [ $? -ne 0 ]; then
echo "Error occured during xinetd restart..."
exit 1
fi

View File

@ -1,60 +0,0 @@
trap {
&$TrapHandler
}
function Update-ServiceConfig {
param (
[String] $Name,
[String] $RunAsUser = '',
[String] $DomainName = '.',
[String] $Password = '',
[Switch] $RunAsLocalService
)
begin {
Show-InvocationInfo $MyInvocation
}
end {
Show-InvocationInfo $MyInvocation -End
}
process {
trap {
&$TrapHandler
}
$ArgumentList = @('config', "`"$Name`"")
if ($RunAsLocalService) {
$ArgumentList += @("obj=", "`"NT AUTHORITY\LocalService`"")
}
elseif ($RunAsUser -ne '') {
$ArgumentList += @("obj=", "`"$DomainName\$RunAsUser`"", "password=", "`"$Password`"")
}
$Process = Exec 'sc.exe' $ArgumentList -PassThru -RedirectStreams
if ($Process.ExitCode -ne 0) {
throw "Command 'sc.exe' returned exit code '$($Process.ExitCode)'"
}
$NtRights = "C:\Murano\Tools\ntrights.exe"
if (-not ([IO.File]::Exists($NtRights))) {
throw "File '$NtRights' not found."
}
$Process = Exec $NtRights @('-u', "$DomainName\$RunAsUser", '+r', 'SeServiceLogonRight') -RedirectStreams -PassThru
if ($Process.ExitCode -ne 0) {
throw "Command '$NtRights' returned exit code '$($Process.ExitCode)'"
}
$Process = Exec $NtRights @('-u', "$DomainName\$RunAsUser", '+r', 'SeBatchLogonRight') -RedirectStreams -PassThru
if ($Process.ExitCode -ne 0) {
throw "Command '$NtRights' returned exit code '$($Process.ExitCode)'"
}
}
}

Some files were not shown because too many files have changed in this diff Show More