Add ini*() and tests
Add GetOSVersion()
Add install_package(), yum_install()
Add *_service()
Rebased
Change-Id: I570dba5ed4d2b988cdd1771cf6bed0aaf8e0fe27
| ... | ... |
@@ -1,4 +1,7 @@ |
| 1 | 1 |
# functions - Common functions used by DevStack components |
| 2 |
+# |
|
| 3 |
+# ENABLED_SERVICES is used by is_service_enabled() |
|
| 4 |
+ |
|
| 2 | 5 |
|
| 3 | 6 |
# Save trace setting |
| 4 | 7 |
XTRACE=$(set +o | grep xtrace) |
| ... | ... |
@@ -6,7 +9,7 @@ set +o xtrace |
| 6 | 6 |
|
| 7 | 7 |
|
| 8 | 8 |
# apt-get wrapper to set arguments correctly |
| 9 |
-# apt_get package [package ...] |
|
| 9 |
+# apt_get operation package [package ...] |
|
| 10 | 10 |
function apt_get() {
|
| 11 | 11 |
[[ "$OFFLINE" = "True" || -z "$@" ]] && return |
| 12 | 12 |
local sudo="sudo" |
| ... | ... |
@@ -70,6 +73,71 @@ function get_field() {
|
| 70 | 70 |
} |
| 71 | 71 |
|
| 72 | 72 |
|
| 73 |
+# Determine OS Vendor, Release and Update |
|
| 74 |
+# Tested with OS/X, Ubuntu, RedHat, CentOS, Fedora |
|
| 75 |
+# Returns results in global variables: |
|
| 76 |
+# os_VENDOR - vendor name |
|
| 77 |
+# os_RELEASE - release |
|
| 78 |
+# os_UPDATE - update |
|
| 79 |
+# os_PACKAGE - package type |
|
| 80 |
+# os_CODENAME - vendor's codename for release |
|
| 81 |
+# GetOSVersion |
|
| 82 |
+GetOSVersion() {
|
|
| 83 |
+ # Figure out which vendor we are |
|
| 84 |
+ if [[ -n "`which sw_vers 2>/dev/null`" ]]; then |
|
| 85 |
+ # OS/X |
|
| 86 |
+ os_VENDOR=`sw_vers -productName` |
|
| 87 |
+ os_RELEASE=`sw_vers -productVersion` |
|
| 88 |
+ os_UPDATE=${os_RELEASE##*.}
|
|
| 89 |
+ os_RELEASE=${os_RELEASE%.*}
|
|
| 90 |
+ os_PACKAGE="" |
|
| 91 |
+ if [[ "$os_RELEASE" =~ "10.7" ]]; then |
|
| 92 |
+ os_CODENAME="lion" |
|
| 93 |
+ elif [[ "$os_RELEASE" =~ "10.6" ]]; then |
|
| 94 |
+ os_CODENAME="snow leopard" |
|
| 95 |
+ elif [[ "$os_RELEASE" =~ "10.5" ]]; then |
|
| 96 |
+ os_CODENAME="leopard" |
|
| 97 |
+ elif [[ "$os_RELEASE" =~ "10.4" ]]; then |
|
| 98 |
+ os_CODENAME="tiger" |
|
| 99 |
+ elif [[ "$os_RELEASE" =~ "10.3" ]]; then |
|
| 100 |
+ os_CODENAME="panther" |
|
| 101 |
+ else |
|
| 102 |
+ os_CODENAME="" |
|
| 103 |
+ fi |
|
| 104 |
+ elif [[ -x $(which lsb_release 2>/dev/null) ]]; then |
|
| 105 |
+ os_VENDOR=$(lsb_release -i -s) |
|
| 106 |
+ os_RELEASE=$(lsb_release -r -s) |
|
| 107 |
+ os_UPDATE="" |
|
| 108 |
+ if [[ "Debian,Ubuntu" =~ $os_VENDOR ]]; then |
|
| 109 |
+ os_PACKAGE="deb" |
|
| 110 |
+ else |
|
| 111 |
+ os_PACKAGE="rpm" |
|
| 112 |
+ fi |
|
| 113 |
+ os_CODENAME=$(lsb_release -c -s) |
|
| 114 |
+ elif [[ -r /etc/redhat-release ]]; then |
|
| 115 |
+ # Red Hat Enterprise Linux Server release 5.5 (Tikanga) |
|
| 116 |
+ # CentOS release 5.5 (Final) |
|
| 117 |
+ # CentOS Linux release 6.0 (Final) |
|
| 118 |
+ # Fedora release 16 (Verne) |
|
| 119 |
+ os_CODENAME="" |
|
| 120 |
+ for r in "Red Hat" CentOS Fedora; do |
|
| 121 |
+ os_VENDOR=$r |
|
| 122 |
+ if [[ -n "`grep \"$r\" /etc/redhat-release`" ]]; then |
|
| 123 |
+ ver=`sed -e 's/^.* \(.*\) (\(.*\)).*$/\1\|\2/' /etc/redhat-release` |
|
| 124 |
+ os_CODENAME=${ver#*|}
|
|
| 125 |
+ os_RELEASE=${ver%|*}
|
|
| 126 |
+ os_UPDATE=${os_RELEASE##*.}
|
|
| 127 |
+ os_RELEASE=${os_RELEASE%.*}
|
|
| 128 |
+ break |
|
| 129 |
+ fi |
|
| 130 |
+ os_VENDOR="" |
|
| 131 |
+ done |
|
| 132 |
+ os_PACKAGE="rpm" |
|
| 133 |
+ fi |
|
| 134 |
+ export os_VENDOR os_RELEASE os_UPDATE os_PACKAGE os_CODENAME |
|
| 135 |
+} |
|
| 136 |
+ |
|
| 137 |
+ |
|
| 73 | 138 |
# git clone only if directory doesn't exist already. Since ``DEST`` might not |
| 74 | 139 |
# be owned by the installation user, we create the directory and change the |
| 75 | 140 |
# ownership to the proper user. |
| ... | ... |
@@ -115,6 +183,42 @@ function git_clone {
|
| 115 | 115 |
} |
| 116 | 116 |
|
| 117 | 117 |
|
| 118 |
+# Comment an option in an INI file |
|
| 119 |
+# optset config-file section option |
|
| 120 |
+function inicomment() {
|
|
| 121 |
+ local file=$1 |
|
| 122 |
+ local section=$2 |
|
| 123 |
+ local option=$3 |
|
| 124 |
+ sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=.*$\)|#\1|" $file |
|
| 125 |
+} |
|
| 126 |
+ |
|
| 127 |
+ |
|
| 128 |
+# Get an option from an INI file |
|
| 129 |
+# optget config-file section option |
|
| 130 |
+function iniget() {
|
|
| 131 |
+ local file=$1 |
|
| 132 |
+ local section=$2 |
|
| 133 |
+ local option=$3 |
|
| 134 |
+ local line |
|
| 135 |
+ line=$(sed -ne "/^\[$section\]/,/^\[.*\]/ { /^$option[ \t]*=/ p; }" $file)
|
|
| 136 |
+ echo ${line#*=}
|
|
| 137 |
+} |
|
| 138 |
+ |
|
| 139 |
+ |
|
| 140 |
+# Set an option in an INI file |
|
| 141 |
+# This is NOT a complete option setter, it assumes that the section and |
|
| 142 |
+# option already exist in the INI file. If the section does not exist, |
|
| 143 |
+# nothing happens. |
|
| 144 |
+# optset config-file section option value |
|
| 145 |
+function iniset() {
|
|
| 146 |
+ local file=$1 |
|
| 147 |
+ local section=$2 |
|
| 148 |
+ local option=$3 |
|
| 149 |
+ local value=$4 |
|
| 150 |
+ sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" $file |
|
| 151 |
+} |
|
| 152 |
+ |
|
| 153 |
+ |
|
| 118 | 154 |
# is_service_enabled() checks if the service(s) specified as arguments are |
| 119 | 155 |
# enabled by the user in **ENABLED_SERVICES**. |
| 120 | 156 |
# |
| ... | ... |
@@ -138,6 +242,20 @@ function is_service_enabled() {
|
| 138 | 138 |
} |
| 139 | 139 |
|
| 140 | 140 |
|
| 141 |
+# Distro-agnostic package installer |
|
| 142 |
+# install_package package [package ...] |
|
| 143 |
+function install_package() {
|
|
| 144 |
+ if [[ -z "$os_PACKAGE" ]]; then |
|
| 145 |
+ GetOSVersion |
|
| 146 |
+ fi |
|
| 147 |
+ if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 148 |
+ apt_get install "$@" |
|
| 149 |
+ else |
|
| 150 |
+ yum_install "$@" |
|
| 151 |
+ fi |
|
| 152 |
+} |
|
| 153 |
+ |
|
| 154 |
+ |
|
| 141 | 155 |
# Test if the named environment variable is set and not zero length |
| 142 | 156 |
# is_set env-var |
| 143 | 157 |
function is_set() {
|
| ... | ... |
@@ -153,10 +271,39 @@ function is_set() {
|
| 153 | 153 |
# pip_install package [package ...] |
| 154 | 154 |
function pip_install {
|
| 155 | 155 |
[[ "$OFFLINE" = "True" || -z "$@" ]] && return |
| 156 |
+ if [[ -z "$os_PACKAGE" ]]; then |
|
| 157 |
+ GetOSVersion |
|
| 158 |
+ fi |
|
| 159 |
+ if [[ "$os_PACKAGE" = "deb" ]]; then |
|
| 160 |
+ CMD_PIP=/usr/bin/pip |
|
| 161 |
+ else |
|
| 162 |
+ CMD_PIP=/usr/bin/pip-python |
|
| 163 |
+ fi |
|
| 156 | 164 |
sudo PIP_DOWNLOAD_CACHE=/var/cache/pip \ |
| 157 | 165 |
HTTP_PROXY=$http_proxy \ |
| 158 | 166 |
HTTPS_PROXY=$https_proxy \ |
| 159 |
- pip install --use-mirrors $@ |
|
| 167 |
+ $CMD_PIP install --use-mirrors $@ |
|
| 168 |
+} |
|
| 169 |
+ |
|
| 170 |
+ |
|
| 171 |
+# Service wrapper to restart services |
|
| 172 |
+# restart_service service-name |
|
| 173 |
+function restart_service() {
|
|
| 174 |
+ sudo /usr/sbin/service $1 restart |
|
| 175 |
+} |
|
| 176 |
+ |
|
| 177 |
+ |
|
| 178 |
+# Service wrapper to start services |
|
| 179 |
+# start_service service-name |
|
| 180 |
+function start_service() {
|
|
| 181 |
+ sudo /usr/sbin/service $1 start |
|
| 182 |
+} |
|
| 183 |
+ |
|
| 184 |
+ |
|
| 185 |
+# Service wrapper to stop services |
|
| 186 |
+# stop_service service-name |
|
| 187 |
+function stop_service() {
|
|
| 188 |
+ sudo /usr/sbin/service $1 stop |
|
| 160 | 189 |
} |
| 161 | 190 |
|
| 162 | 191 |
|
| ... | ... |
@@ -172,5 +319,17 @@ function trueorfalse() {
|
| 172 | 172 |
echo "$default" |
| 173 | 173 |
} |
| 174 | 174 |
|
| 175 |
+ |
|
| 176 |
+# yum wrapper to set arguments correctly |
|
| 177 |
+# yum_install package [package ...] |
|
| 178 |
+function yum_install() {
|
|
| 179 |
+ [[ "$OFFLINE" = "True" ]] && return |
|
| 180 |
+ local sudo="sudo" |
|
| 181 |
+ [[ "$(id -u)" = "0" ]] && sudo="env" |
|
| 182 |
+ $sudo http_proxy=$http_proxy https_proxy=$https_proxy \ |
|
| 183 |
+ yum install -y "$@" |
|
| 184 |
+} |
|
| 185 |
+ |
|
| 186 |
+ |
|
| 175 | 187 |
# Restore xtrace |
| 176 | 188 |
$XTRACE |
| ... | ... |
@@ -107,7 +107,7 @@ if [[ $EUID -eq 0 ]]; then |
| 107 | 107 |
|
| 108 | 108 |
# since this script runs as a normal user, we need to give that user |
| 109 | 109 |
# ability to run sudo |
| 110 |
- dpkg -l sudo || apt_get update && apt_get install sudo |
|
| 110 |
+ dpkg -l sudo || apt_get update && install_package sudo |
|
| 111 | 111 |
|
| 112 | 112 |
if ! getent passwd stack >/dev/null; then |
| 113 | 113 |
echo "Creating a user called stack" |
| ... | ... |
@@ -268,6 +268,7 @@ function read_password {
|
| 268 | 268 |
set -o xtrace |
| 269 | 269 |
} |
| 270 | 270 |
|
| 271 |
+ |
|
| 271 | 272 |
# Nova Network Configuration |
| 272 | 273 |
# -------------------------- |
| 273 | 274 |
|
| ... | ... |
@@ -590,7 +591,7 @@ function get_packages() {
|
| 590 | 590 |
|
| 591 | 591 |
# install apt requirements |
| 592 | 592 |
apt_get update |
| 593 |
-apt_get install $(get_packages $FILES/apts) |
|
| 593 |
+install_package $(get_packages $FILES/apts) |
|
| 594 | 594 |
|
| 595 | 595 |
# install python requirements |
| 596 | 596 |
pip_install $(get_packages $FILES/pips | sort -u) |
| ... | ... |
@@ -677,7 +678,7 @@ fi |
| 677 | 677 |
# ------ |
| 678 | 678 |
|
| 679 | 679 |
if [[ $SYSLOG != "False" ]]; then |
| 680 |
- apt_get install -y rsyslog-relp |
|
| 680 |
+ install_package rsyslog-relp |
|
| 681 | 681 |
if [[ "$SYSLOG_HOST" = "$HOST_IP" ]]; then |
| 682 | 682 |
# Configure the master host to receive |
| 683 | 683 |
cat <<EOF >/tmp/90-stack-m.conf |
| ... | ... |
@@ -692,7 +693,7 @@ EOF |
| 692 | 692 |
EOF |
| 693 | 693 |
sudo mv /tmp/90-stack-s.conf /etc/rsyslog.d |
| 694 | 694 |
fi |
| 695 |
- sudo /usr/sbin/service rsyslog restart |
|
| 695 |
+ restart_service rsyslog |
|
| 696 | 696 |
fi |
| 697 | 697 |
|
| 698 | 698 |
|
| ... | ... |
@@ -703,7 +704,7 @@ if is_service_enabled rabbit; then |
| 703 | 703 |
# Install and start rabbitmq-server |
| 704 | 704 |
# the temp file is necessary due to LP: #878600 |
| 705 | 705 |
tfile=$(mktemp) |
| 706 |
- apt_get install rabbitmq-server > "$tfile" 2>&1 |
|
| 706 |
+ install_package rabbitmq-server > "$tfile" 2>&1 |
|
| 707 | 707 |
cat "$tfile" |
| 708 | 708 |
rm -f "$tfile" |
| 709 | 709 |
# change the rabbit password since the default is "guest" |
| ... | ... |
@@ -738,13 +739,13 @@ EOF |
| 738 | 738 |
fi |
| 739 | 739 |
|
| 740 | 740 |
# Install and start mysql-server |
| 741 |
- apt_get install mysql-server |
|
| 741 |
+ install_package mysql-server |
|
| 742 | 742 |
# Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases: |
| 743 | 743 |
sudo mysql -uroot -p$MYSQL_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' identified by '$MYSQL_PASSWORD';" |
| 744 | 744 |
|
| 745 | 745 |
# Edit /etc/mysql/my.cnf to change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and restart the mysql service: |
| 746 | 746 |
sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf |
| 747 |
- sudo service mysql restart |
|
| 747 |
+ restart_service mysql |
|
| 748 | 748 |
fi |
| 749 | 749 |
|
| 750 | 750 |
# Our screenrc file builder |
| ... | ... |
@@ -801,7 +802,7 @@ screen -r stack -X hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<
|
| 801 | 801 |
if is_service_enabled horizon; then |
| 802 | 802 |
|
| 803 | 803 |
# Install apache2, which is NOPRIME'd |
| 804 |
- apt_get install apache2 libapache2-mod-wsgi |
|
| 804 |
+ install_package apache2 libapache2-mod-wsgi |
|
| 805 | 805 |
|
| 806 | 806 |
|
| 807 | 807 |
# Remove stale session database. |
| ... | ... |
@@ -826,7 +827,7 @@ if is_service_enabled horizon; then |
| 826 | 826 |
s,%GROUP%,$APACHE_GROUP,g; |
| 827 | 827 |
s,%HORIZON_DIR%,$HORIZON_DIR,g; |
| 828 | 828 |
" -i /etc/apache2/sites-enabled/000-default |
| 829 |
- sudo service apache2 restart |
|
| 829 |
+ restart_service apache2 |
|
| 830 | 830 |
fi |
| 831 | 831 |
|
| 832 | 832 |
|
| ... | ... |
@@ -905,8 +906,7 @@ if is_service_enabled q-svc; then |
| 905 | 905 |
# Install deps |
| 906 | 906 |
# FIXME add to files/apts/quantum, but don't install if not needed! |
| 907 | 907 |
kernel_version=`cat /proc/version | cut -d " " -f3` |
| 908 |
- apt_get install linux-headers-$kernel_version |
|
| 909 |
- apt_get install openvswitch-switch openvswitch-datapath-dkms |
|
| 908 |
+ install_package openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version |
|
| 910 | 909 |
# Create database for the plugin/agent |
| 911 | 910 |
if is_service_enabled mysql; then |
| 912 | 911 |
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS ovs_quantum;' |
| ... | ... |
@@ -1019,7 +1019,7 @@ if is_service_enabled n-cpu; then |
| 1019 | 1019 |
|
| 1020 | 1020 |
# Virtualization Configuration |
| 1021 | 1021 |
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 1022 |
- apt_get install libvirt-bin |
|
| 1022 |
+ install_package libvirt-bin |
|
| 1023 | 1023 |
|
| 1024 | 1024 |
# Force IP forwarding on, just on case |
| 1025 | 1025 |
sudo sysctl -w net.ipv4.ip_forward=1 |
| ... | ... |
@@ -1043,7 +1043,7 @@ if is_service_enabled n-cpu; then |
| 1043 | 1043 |
# to simulate multiple systems. |
| 1044 | 1044 |
if [[ "$LIBVIRT_TYPE" == "lxc" ]]; then |
| 1045 | 1045 |
if [[ "$DISTRO" > natty ]]; then |
| 1046 |
- apt_get install cgroup-lite |
|
| 1046 |
+ install_package cgroup-lite |
|
| 1047 | 1047 |
else |
| 1048 | 1048 |
cgline="none /cgroup cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0" |
| 1049 | 1049 |
sudo mkdir -p /cgroup |
| ... | ... |
@@ -1062,7 +1062,7 @@ if is_service_enabled n-cpu; then |
| 1062 | 1062 |
# libvirt detects various settings on startup, as we potentially changed |
| 1063 | 1063 |
# the system configuration (modules, filesystems), we need to restart |
| 1064 | 1064 |
# libvirt to detect those changes. |
| 1065 |
- sudo /etc/init.d/libvirt-bin restart |
|
| 1065 |
+ restart_service libvirt-bin |
|
| 1066 | 1066 |
|
| 1067 | 1067 |
|
| 1068 | 1068 |
# Instance Storage |
| ... | ... |
@@ -1113,7 +1113,7 @@ fi |
| 1113 | 1113 |
# Storage Service |
| 1114 | 1114 |
if is_service_enabled swift; then |
| 1115 | 1115 |
# Install memcached for swift. |
| 1116 |
- apt_get install memcached |
|
| 1116 |
+ install_package memcached |
|
| 1117 | 1117 |
|
| 1118 | 1118 |
# We first do a bit of setup by creating the directories and |
| 1119 | 1119 |
# changing the permissions so we can run it as our user. |
| ... | ... |
@@ -1297,7 +1297,7 @@ if is_service_enabled n-vol; then |
| 1297 | 1297 |
# By default, the backing file is 2G in size, and is stored in /opt/stack. |
| 1298 | 1298 |
|
| 1299 | 1299 |
# install the package |
| 1300 |
- apt_get install tgt |
|
| 1300 |
+ install_package tgt |
|
| 1301 | 1301 |
|
| 1302 | 1302 |
if ! sudo vgs $VOLUME_GROUP; then |
| 1303 | 1303 |
VOLUME_BACKING_FILE=${VOLUME_BACKING_FILE:-$DEST/nova-volumes-backing-file}
|
| ... | ... |
@@ -37,3 +37,89 @@ if [[ $? = 0 ]]; then |
| 37 | 37 |
echo "die_if_not_set [X='' false] Failed" |
| 38 | 38 |
fi |
| 39 | 39 |
|
| 40 |
+ |
|
| 41 |
+echo "Testing INI functions" |
|
| 42 |
+ |
|
| 43 |
+cat >test.ini <<EOF |
|
| 44 |
+[default] |
|
| 45 |
+# comment an option |
|
| 46 |
+#log_file=./log.conf |
|
| 47 |
+log_file=/etc/log.conf |
|
| 48 |
+handlers=do not disturb |
|
| 49 |
+ |
|
| 50 |
+[aaa] |
|
| 51 |
+# the commented option should not change |
|
| 52 |
+#handlers=cc,dd |
|
| 53 |
+handlers = aa, bb |
|
| 54 |
+ |
|
| 55 |
+[bbb] |
|
| 56 |
+handlers=ee,ff |
|
| 57 |
+EOF |
|
| 58 |
+ |
|
| 59 |
+# Test with spaces |
|
| 60 |
+ |
|
| 61 |
+VAL=$(iniget test.ini aaa handlers) |
|
| 62 |
+if [[ "$VAL" == "aa, bb" ]]; then |
|
| 63 |
+ echo "OK: $VAL" |
|
| 64 |
+else |
|
| 65 |
+ echo "iniget failed: $VAL" |
|
| 66 |
+fi |
|
| 67 |
+ |
|
| 68 |
+iniset test.ini aaa handlers "11, 22" |
|
| 69 |
+ |
|
| 70 |
+VAL=$(iniget test.ini aaa handlers) |
|
| 71 |
+if [[ "$VAL" == "11, 22" ]]; then |
|
| 72 |
+ echo "OK: $VAL" |
|
| 73 |
+else |
|
| 74 |
+ echo "iniget failed: $VAL" |
|
| 75 |
+fi |
|
| 76 |
+ |
|
| 77 |
+ |
|
| 78 |
+# Test without spaces, end of file |
|
| 79 |
+ |
|
| 80 |
+VAL=$(iniget test.ini bbb handlers) |
|
| 81 |
+if [[ "$VAL" == "ee,ff" ]]; then |
|
| 82 |
+ echo "OK: $VAL" |
|
| 83 |
+else |
|
| 84 |
+ echo "iniget failed: $VAL" |
|
| 85 |
+fi |
|
| 86 |
+ |
|
| 87 |
+iniset test.ini bbb handlers "33,44" |
|
| 88 |
+ |
|
| 89 |
+VAL=$(iniget test.ini bbb handlers) |
|
| 90 |
+if [[ "$VAL" == "33,44" ]]; then |
|
| 91 |
+ echo "OK: $VAL" |
|
| 92 |
+else |
|
| 93 |
+ echo "iniget failed: $VAL" |
|
| 94 |
+fi |
|
| 95 |
+ |
|
| 96 |
+ |
|
| 97 |
+# Test section not exist |
|
| 98 |
+ |
|
| 99 |
+VAL=$(iniget test.ini zzz handlers) |
|
| 100 |
+if [[ -z "$VAL" ]]; then |
|
| 101 |
+ echo "OK" |
|
| 102 |
+else |
|
| 103 |
+ echo "iniget failed: $VAL" |
|
| 104 |
+fi |
|
| 105 |
+ |
|
| 106 |
+iniset test.ini zzz handlers "999" |
|
| 107 |
+ |
|
| 108 |
+VAL=$(iniget test.ini zzz handlers) |
|
| 109 |
+if [[ -z "$VAL" ]]; then |
|
| 110 |
+ echo "OK" |
|
| 111 |
+else |
|
| 112 |
+ echo "iniget failed: $VAL" |
|
| 113 |
+fi |
|
| 114 |
+ |
|
| 115 |
+ |
|
| 116 |
+# Test comments |
|
| 117 |
+ |
|
| 118 |
+inicomment test.ini aaa handlers |
|
| 119 |
+ |
|
| 120 |
+VAL=$(iniget test.ini aaa handlers) |
|
| 121 |
+if [[ -z "$VAL" ]]; then |
|
| 122 |
+ echo "OK" |
|
| 123 |
+else |
|
| 124 |
+ echo "inicomment failed: $VAL" |
|
| 125 |
+fi |