如何自动根据职位设置NextCloud用户配额?

Bash

1 前言

一个问题,一篇文章,一出故事。
今天更新一个自动根据AD中的职位(title)设置NextCloud用户可用空间配额的脚本,于是记录在本章节。

2 最佳实践

2.1 测试环境

如何用命令别名缩写NextCloud的OCC命令?

2.2 部署监控脚本

2.2.1 创建脚本

bash ~/scripts/setVicePresidentDefaultQuota.sh

加入如下配置,

#!/bin/bash

ldapSer="cmeschool.org"
ldapPort="3268"
ldapPasswd='adminPWD'
ldapUser="CN=admin,CN=Users,DC=cmdschool,DC=org"
ldapBaseDN="DC=cmdschool,DC=org"
ldapFilter="(&(title=*President)(objectCategory=person))"
quotaDefaultSize="10 GB"
quotaLog="/var/log/nextcloud/setVicePresidentDefaultQuota.log"

occ() {
    sudo -u apache /usr/bin/php -d apc.enable_cli=1 -d memory_limit=1024M /var/www/nextcloud/occ "$@"
}

getVipList() {
    vipList=`ldapsearch -x -h "$ldapSer" -p "$ldapPort" -w "$ldapPasswd" -D "$ldapUser" \
	-b "$ldapBaseDN" "$ldapFilter" | grep "sAMAccountName:" | sed 's/sAMAccountName: //g'`
    echo "$vipList"
}

getUserID() {
    staffID="$1"
    userID=$(occ ldap:search "$staffID" | grep -oP '\(\K[^)]+')
    echo "$userID"
}

getUserQuota() {
    userID="$1"
    userQuota=$(occ user:info "$userID" | grep "quota:" | grep "GB" | sed 's/  - quota: //g')
    echo "$userQuota"
}

getQuota() {
	for staffID in $(getVipList); do
		userID=$(getUserID "$staffID")
		userQuota=$(getUserQuota "$userID")
		echo "$staffID ($userID): $userQuota"
	done
}

setQuota() {
	for staffID in $(getVipList); do
		userID=$(getUserID "$staffID")
		userQuota=$(getUserQuota "$userID")
		formatUserQuota=`echo $userQuota  |  sed -e 's/GB//g' -e 's/ //g'`
		formatQuotaDefaultSize=`echo $quotaDefaultSize | sed -e 's/GB//g' -e 's/ //g'`
		if [ "$formatUserQuota" -ge "$formatQuotaDefaultSize" ]; then
			continue
		fi
		occ user:setting "$userID" files quota "$quotaDefaultSize"
		echo "`date +'%Y-%m-%d %H:%M:%S'` Modify user $staffID quota from $userQuota to $quotaDefaultSize." | tee -a "$quotaLog"
	done
}


case "$1" in
	set)
		setQuota
		;;
	get)
		getQuota
		;;
	*)
		echo "Usage: $0 {get|set}"
		;;
esac

2.2.2 测试脚本

bash ~/scripts/setVicePresidentDefaultQuota.sh get
bash ~/scripts/setVicePresidentDefaultQuota.sh set

2.2.3 设置脚本触发

0 8 */1 * * sh ~/scripts/setVicePresidentDefaultQuota.sh set
没有评论

发表回复

Bash
如何在远程主机执行函数?

1 前言 一个问题,一篇文章,一出故事。 笔者今天想在远程机器执行本地脚本定义的函数,于是整理当前章 …

Bash
如何实现监视多台服务器的日志?

1 前言 一个问题,一篇文章,一出故事。 今天遇到需要根据PostFix的特定邮箱地址触发一个电话报 …

Cloud storage
如何备份Nextcloud的启用应用列表?

1 前言 一个问题,一篇文章,一出故事。 笔者今天需要手动更新NextCloud,于是想到手动备份N …