Browse code

Merge "Only run chmod/chown for local files"

Jenkins authored on 2013/09/15 23:05:25
Showing 2 changed files
... ...
@@ -1160,6 +1160,51 @@ function service_check() {
1160 1160
     fi
1161 1161
 }
1162 1162
 
1163
+# Returns true if the directory is on a filesystem mounted via NFS.
1164
+function is_nfs_directory() {
1165
+    local mount_type=`stat -f -L -c %T $1`
1166
+    test "$mount_type" == "nfs"
1167
+}
1168
+
1169
+# Only run the command if the target file (the last arg) is not on an
1170
+# NFS filesystem.
1171
+function _safe_permission_operation() {
1172
+    local args=( $@ )
1173
+    local last
1174
+    local sudo_cmd
1175
+    local dir_to_check
1176
+
1177
+    let last="${#args[*]} - 1"
1178
+
1179
+    dir_to_check=${args[$last]}
1180
+    if [ ! -d "$dir_to_check" ]; then
1181
+        dir_to_check=`dirname "$dir_to_check"`
1182
+    fi
1183
+
1184
+    if is_nfs_directory "$dir_to_check" ; then
1185
+        return 0
1186
+    fi
1187
+
1188
+    if [[ $TRACK_DEPENDS = True ]]; then
1189
+        sudo_cmd="env"
1190
+    else
1191
+        sudo_cmd="sudo"
1192
+    fi
1193
+
1194
+    $sudo_cmd $@
1195
+}
1196
+
1197
+# Only change ownership of a file or directory if it is not on an NFS
1198
+# filesystem.
1199
+function safe_chown() {
1200
+    _safe_permission_operation chown $@
1201
+}
1202
+
1203
+# Only change permissions of a file or directory if it is not on an
1204
+# NFS filesystem.
1205
+function safe_chmod() {
1206
+    _safe_permission_operation chmod $@
1207
+}
1163 1208
 
1164 1209
 # ``pip install -e`` the package, which processes the dependencies
1165 1210
 # using pip before running `setup.py develop`
... ...
@@ -1167,11 +1212,6 @@ function service_check() {
1167 1167
 # setup_develop directory
1168 1168
 function setup_develop() {
1169 1169
     local project_dir=$1
1170
-    if [[ $TRACK_DEPENDS = True ]]; then
1171
-        SUDO_CMD="env"
1172
-    else
1173
-        SUDO_CMD="sudo"
1174
-    fi
1175 1170
 
1176 1171
     echo "cd $REQUIREMENTS_DIR; $SUDO_CMD python update.py $project_dir"
1177 1172
 
... ...
@@ -1183,7 +1223,7 @@ function setup_develop() {
1183 1183
 
1184 1184
     pip_install -e $project_dir
1185 1185
     # ensure that further actions can do things like setup.py sdist
1186
-    $SUDO_CMD chown -R $STACK_USER $1/*.egg-info
1186
+    safe_chown -R $STACK_USER $1/*.egg-info
1187 1187
 }
1188 1188
 
1189 1189
 
... ...
@@ -203,7 +203,7 @@ if [[ $EUID -eq 0 ]]; then
203 203
     echo "Copying files to $STACK_USER user"
204 204
     STACK_DIR="$DEST/${TOP_DIR##*/}"
205 205
     cp -r -f -T "$TOP_DIR" "$STACK_DIR"
206
-    chown -R $STACK_USER "$STACK_DIR"
206
+    safe_chown -R $STACK_USER "$STACK_DIR"
207 207
     cd "$STACK_DIR"
208 208
     if [[ "$SHELL_AFTER_RUN" != "no" ]]; then
209 209
         exec sudo -u $STACK_USER  bash -l -c "set -e; bash stack.sh; bash"
... ...
@@ -236,8 +236,8 @@ fi
236 236
 # Create the destination directory and ensure it is writable by the user
237 237
 # and read/executable by everybody for daemons (e.g. apache run for horizon)
238 238
 sudo mkdir -p $DEST
239
-sudo chown -R $STACK_USER $DEST
240
-chmod 0755 $DEST
239
+safe_chown -R $STACK_USER $DEST
240
+safe_chmod 0755 $DEST
241 241
 
242 242
 # a basic test for $DEST path permissions (fatal on error unless skipped)
243 243
 check_path_perm_sanity ${DEST}
... ...
@@ -258,7 +258,7 @@ ENABLE_DEBUG_LOG_LEVEL=`trueorfalse True $ENABLE_DEBUG_LOG_LEVEL`
258 258
 # Destination path for service data
259 259
 DATA_DIR=${DATA_DIR:-${DEST}/data}
260 260
 sudo mkdir -p $DATA_DIR
261
-sudo chown -R $STACK_USER $DATA_DIR
261
+safe_chown -R $STACK_USER $DATA_DIR
262 262
 
263 263
 
264 264
 # Common Configuration
... ...
@@ -965,7 +965,7 @@ if is_service_enabled n-net q-dhcp; then
965 965
     clean_iptables
966 966
     rm -rf ${NOVA_STATE_PATH}/networks
967 967
     sudo mkdir -p ${NOVA_STATE_PATH}/networks
968
-    sudo chown -R ${USER} ${NOVA_STATE_PATH}/networks
968
+    safe_chown -R ${USER} ${NOVA_STATE_PATH}/networks
969 969
     # Force IP forwarding on, just in case
970 970
     sudo sysctl -w net.ipv4.ip_forward=1
971 971
 fi