Deprecate murano-repository
Change-Id: I54050e53da6874cd83260de5c1a4304504c89cdd
This commit is contained in:
parent
b643c8d9fe
commit
8149d27d80
191
LICENSE
191
LICENSE
@ -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.
|
|
13
MANIFEST.in
13
MANIFEST.in
@ -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
|
|
40
README.rst
40
README.rst
@ -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.
|
|
||||||
|
|
||||||
We’re 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.
|
|
||||||
|
379
common.inc
379
common.inc
@ -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
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
SysV init scripts
|
|
||||||
=====================
|
|
||||||
murano-repository-redhat - for RedHat based Linux distibution
|
|
||||||
murano-repository-debian - for Debian based Linux distibution
|
|
@ -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
|
|
||||||
|
|
@ -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 $?
|
|
||||||
|
|
@ -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
|
|
@ -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
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [
|
|
||||||
"Get-DnsListeningIpAddress.ps1"
|
|
||||||
],
|
|
||||||
"Commands": [
|
|
||||||
{
|
|
||||||
"Name": "Get-DnsListeningIpAddress",
|
|
||||||
"Arguments": {}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"RebootOnCompletion": 0
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [
|
|
||||||
"ImportCoreFunctions.ps1",
|
|
||||||
"Install-RolePrimaryDomainController.ps1"
|
|
||||||
],
|
|
||||||
"Commands": [
|
|
||||||
{
|
|
||||||
"Name": "Install-RolePrimaryDomainController",
|
|
||||||
"Arguments": {
|
|
||||||
"DomainName": "$domain",
|
|
||||||
"SafeModePassword": "$recoveryPassword"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"RebootOnCompletion": 1
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [
|
|
||||||
],
|
|
||||||
"Commands": [
|
|
||||||
],
|
|
||||||
"RebootOnCompletion": 0
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [
|
|
||||||
"ImportCoreFunctions.ps1",
|
|
||||||
"DeployWebApp.ps1"
|
|
||||||
],
|
|
||||||
"Commands": [
|
|
||||||
{
|
|
||||||
"Name": "Deploy-WebAppFromGit",
|
|
||||||
"Arguments": {
|
|
||||||
"URL": "$repository"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"RebootOnCompletion": 0
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [],
|
|
||||||
"Commands": [],
|
|
||||||
"RebootOnCompletion": 0,
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [
|
|
||||||
"ImportCoreFunctions.ps1",
|
|
||||||
"Set-LocalUserPassword.ps1"
|
|
||||||
],
|
|
||||||
"Commands": [
|
|
||||||
{
|
|
||||||
"Name": "Set-LocalUserPassword",
|
|
||||||
"Arguments": {
|
|
||||||
"UserName": "Administrator",
|
|
||||||
"Password": "$adminPassword",
|
|
||||||
"Force": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"RebootOnCompletion": 0
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"Scripts": [
|
|
||||||
"/ImportCoreFunctions.ps1",
|
|
||||||
"SQLServerForAOAG.ps1"
|
|
||||||
],
|
|
||||||
"Commands": [
|
|
||||||
{
|
|
||||||
"Name": "Enable-TrustedHosts",
|
|
||||||
"Arguments": {}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "New-SharedFolderForAOAG",
|
|
||||||
"Arguments": {
|
|
||||||
"PrimaryNode": "$primaryNode"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -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": {}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
@ -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: []
|
|
@ -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}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"AWSTemplateFormatVersion": "2010-09-09",
|
|
||||||
|
|
||||||
"Resources": {
|
|
||||||
"$instanceName": {
|
|
||||||
"Type": "AWS::EC2::Instance",
|
|
||||||
"Properties": {
|
|
||||||
"InstanceType": "$instanceType",
|
|
||||||
"ImageId": "$imageName",
|
|
||||||
"AvailabilityZone": "$availabilityZone",
|
|
||||||
"UserData": "$userData"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -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": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"Resources": {
|
|
||||||
"$instanceName": {
|
|
||||||
"Properties": {
|
|
||||||
"KeyName": "$keyName"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"AWSTemplateFormatVersion": "2010-09-09",
|
|
||||||
|
|
||||||
"Resources": {
|
|
||||||
"$instanceName": {
|
|
||||||
"Type": "AWS::EC2::Instance",
|
|
||||||
"Properties": {
|
|
||||||
"InstanceType": "$instanceType",
|
|
||||||
"ImageId": "$imageName",
|
|
||||||
"AvailabilityZone": "$availabilityZone",
|
|
||||||
"UserData": "$userData"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"Outputs": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"Resources": {
|
|
||||||
"$instanceName": {
|
|
||||||
"Properties": {
|
|
||||||
"SecurityGroups": [
|
|
||||||
{
|
|
||||||
"Ref": "$MuranoSecurityGroup-{envName}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"AWSTemplateFormatVersion": "2010-09-09",
|
|
||||||
|
|
||||||
"Resources": {
|
|
||||||
"network": {
|
|
||||||
"Type": "OS::Neutron::Net",
|
|
||||||
"Properties": {
|
|
||||||
"name": "$networkName"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Outputs": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"Parameters" : {
|
|
||||||
"$paramName" : {
|
|
||||||
"Type" : "String",
|
|
||||||
"Default" : "$paramValue"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"AWSTemplateFormatVersion": "2010-09-09",
|
|
||||||
|
|
||||||
"Resources": {
|
|
||||||
"$interfaceName": {
|
|
||||||
"Type": "OS::Neutron::RouterInterface",
|
|
||||||
"Properties": {
|
|
||||||
"router_id": "$routerId",
|
|
||||||
"subnet_id": {
|
|
||||||
"Ref": "$subnet"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"Outputs": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
{
|
|
||||||
"Resources": {
|
|
||||||
"$instancePort": {
|
|
||||||
"Properties": {
|
|
||||||
"allowed_address_pairs": [
|
|
||||||
{
|
|
||||||
"ip_address": "$clusterIp"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"AWSTemplateFormatVersion": "2010-09-09",
|
|
||||||
|
|
||||||
|
|
||||||
"Resources": {
|
|
||||||
"$instanceName": {
|
|
||||||
"Type": "AWS::EC2::Instance",
|
|
||||||
"Properties": {
|
|
||||||
"InstanceType": "$instanceType",
|
|
||||||
"ImageId": "$imageName",
|
|
||||||
"AvailabilityZone": "$availabilityZone",
|
|
||||||
"UserData": "$userData"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
"Outputs": {
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
#------------------------
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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}" }
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#>
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
@ -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"
|
|
||||||
}
|
|
||||||
}
|
|
@ -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."
|
|
||||||
}
|
|
||||||
#>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
||||||
|
|
@ -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
|
|
@ -1,2 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
curl -s http://169.254.169.254/latest/meta-data/local-ipv4
|
|
@ -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))
|
|
@ -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
|
|
@ -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
|
|
@ -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'
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -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"
|
|
||||||
}
|
|
@ -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."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
||||||
#>
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
||||||
}
|
|
||||||
}
|
|
@ -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
|
|
@ -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
Loading…
Reference in New Issue
Block a user