135 lines
4.7 KiB
PowerShell
135 lines
4.7 KiB
PowerShell
############### CONST ##############
|
|
$destDockerDir="/mnt/SSD1/docker/"
|
|
$stacksfolder="stacks/"
|
|
$datafolder="data/"
|
|
$destStacks=$destDockerDir+$stacksfolder
|
|
$destData=$destDockerDir+$datafolder
|
|
$destTraefikRulesDir=$destStacks+"traefik/rules/"
|
|
$destTraefikUsersDir=$destStacks+"traefik/users/"
|
|
$destDataDir=$destData
|
|
############### MAIN ###############
|
|
# main function
|
|
#
|
|
$Main =
|
|
{
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $destHost,
|
|
[Parameter(Mandatory=$false)]
|
|
[string[]] $apps
|
|
)
|
|
$applist=[System.Collections.Generic.List[object]]::new()
|
|
If($PSBoundParameters.ContainsKey("apps")) {
|
|
foreach ($appname in $apps)
|
|
{
|
|
if ($appname.Contains('*')) {
|
|
$wclist=Get-ChildItem $appname -Directory | ForEach-Object { $_.Name }
|
|
# if wildcard is specified, we only add folders with a 'stacks' subfolder
|
|
foreach ($wcname in $wclist) {
|
|
if ((Test-Path -Path "$wcname\stacks")) {
|
|
$applist.Add($wcname)
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
# here we don't have to check for a 'stacks' subfolder as the user specified appname explicitly
|
|
$applist.Add($appname)
|
|
}
|
|
}
|
|
# remove duplicates
|
|
$uniqlist=$applist | Sort-Object -Unique
|
|
foreach ($appname in $uniqlist)
|
|
{
|
|
copyfolder $destHost $appname "$appname\"
|
|
}
|
|
}
|
|
else {
|
|
# we're in the app subfolder, so only one stacks folder to copy
|
|
$appname="$pwd".Split("\\")[-1]
|
|
copyfolder $destHost $appname ".\"
|
|
}
|
|
}
|
|
#######################################################################
|
|
# copies specified folder to data folder on truenas
|
|
#
|
|
Function copytosubfolder
|
|
{
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $destHost,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $folder,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $subfolder,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $srcdir,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $destdir
|
|
)
|
|
$date=Get-Date -format "yyyy-MM-ddTHH:mm:ss"
|
|
if ((Test-Path -Path "$srcdir")) {
|
|
Write-Host "$date# pscp -P 22 -r ""$srcdir\*.*"" root@${destHost}:""${destdir}""" -ForegroundColor Green
|
|
Write-Host "Copying to ${destHost}:""${destDockerDir}" -NoNewline
|
|
Write-Host "${folder}" -ForegroundColor Cyan -NoNewline
|
|
Write-Host "${subfolder}" -ForegroundColor DarkYellow -NoNewline
|
|
Write-Host """:"
|
|
pscp -P 22 -r "$srcdir\*.*" root@${destHost}:""${destdir}""
|
|
}
|
|
}
|
|
#######################################################################
|
|
# copies folder(s) to truenas
|
|
#
|
|
Function copyfolder
|
|
{
|
|
[CmdletBinding()]
|
|
Param(
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $destHost,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $subfolder,
|
|
|
|
[Parameter(Mandatory=$true)]
|
|
[ValidateNotNullOrEmpty()]
|
|
[string] $srcdir
|
|
)
|
|
$srcStacksDir=$srcdir+"stacks"
|
|
$srcTraefikRulesDir=$srcdir+"traefik-rules"
|
|
$srcTraefikUsersDir=$srcdir+"traefik-users"
|
|
$srcDataDir=$srcdir+"data"
|
|
if (-Not(Test-Path -Path $srcStacksDir)) {
|
|
Write-Host "Source path doesn't exist: ""$PSScriptRoot\$srcStacksDir\*.*"". No files copied!" -ForegroundColor Red
|
|
Write-Host "Usage: in app folder : ./cp2nas DEST|IP"
|
|
Write-Host " in app parent folder: ./cp2nas DEST|IP app1, app2, app3, ..."
|
|
Write-Host " in app parent folder: ./cp2nas DEST|IP *"
|
|
Write-Host " in app parent folder: ./cp2nas DEST|IP wcstring1, wcstring2, ..."
|
|
return
|
|
}
|
|
$destAppStacksDir=$destStacks+$subfolder+"/"
|
|
# copy app folder destinations
|
|
copytosubfolder $destHost "${stacksfolder}" "${subfolder}" "${srcStacksDir}" "${destAppStacksDir}"
|
|
# copy traefik folder destinations
|
|
copytosubfolder $destHost "${stacksfolder}" "traefik/rules/" "${srcTraefikRulesDir}" "${destTraefikRulesDir}"
|
|
copytosubfolder $destHost "${stacksfolder}" "traefik/users/" "${srcTraefikUsersDir}" "${destTraefikUsersDir}"
|
|
# copy data folder destinations
|
|
copytosubfolder $destHost "${datafolder}" "${subfolder}/" "${srcDataDir}" "${destDataDir}${subfolder}"
|
|
|
|
}
|
|
|
|
###################################
|
|
# we call main proc from here
|
|
& $Main @Args |