Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev v1.0.17 #290

Merged
merged 14 commits into from
Sep 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,7 @@ nfs_protocol_gateway_nics_num = 2
nfs_protocol_gateway_disk_size = 48
nfs_protocol_gateway_fe_cores_num = 1
nfs_protocol_gateway_instance_iam_profile_arn = ""
nfs_protocol_gateway_instance_ami_id = "<YOUR AMI_ID>"
```

<br>In order to create stateless clients, need to set variable:
Expand Down Expand Up @@ -544,6 +545,7 @@ s3_protocol_gateway_instance_type = "c5.2xlarge"
s3_protocol_gateway_disk_size = 48
s3_protocol_gateway_fe_cores_num = 1
s3_protocol_gateway_instance_iam_profile_arn = "<YOUR ARN>"
s3_protocol_gateway_instance_ami_id = "<YOUR AMI_ID>"
```

## SMB Protocol Gateways
Expand All @@ -567,6 +569,7 @@ smb_protocol_gateway_fe_cores_num = 1
smb_protocol_gateway_instance_iam_profile_arn = ""
smb_cluster_name = ""
smb_domain_name = ""
smb_protocol_gateway_instance_ami_id = "<YOUR AMI_ID>"
```

<br>In order to create stateless clients, need to set variable:
Expand Down Expand Up @@ -866,7 +869,7 @@ The `helper_commands` part in the output provides lambda call that can be used t
| <a name="input_debug_down_backends_removal_timeout"></a> [debug\_down\_backends\_removal\_timeout](#input\_debug\_down\_backends\_removal\_timeout) | Don't change this value without consulting weka support team. Timeout for removing down backends. Valid time units are ns, us (or µs), ms, s, m, h. | `string` | `"3h"` | no |
| <a name="input_dynamodb_hash_key_name"></a> [dynamodb\_hash\_key\_name](#input\_dynamodb\_hash\_key\_name) | DynamoDB hash key name (optional configuration, will use 'Key' by default). This key will be used if dynamodb table will be created automatically, by not setting `dynamodb_table_name` param. In case `dynamodb_table_name` parameter is set, `dynamodb_hash_key_name` should match the key that should be used by us within pre-created table | `string` | `"Key"` | no |
| <a name="input_dynamodb_table_name"></a> [dynamodb\_table\_name](#input\_dynamodb\_table\_name) | DynamoDB table name, if not supplied a new table will be created | `string` | `""` | no |
| <a name="input_ebs_encrypted"></a> [ebs\_encrypted](#input\_ebs\_encrypted) | Enables EBS encryption on the volume | `bool` | `false` | no |
| <a name="input_ebs_encrypted"></a> [ebs\_encrypted](#input\_ebs\_encrypted) | Enables EBS encryption on the volume | `bool` | `true` | no |
| <a name="input_ebs_kms_key_id"></a> [ebs\_kms\_key\_id](#input\_ebs\_kms\_key\_id) | The ARN of the AWS Key Management Service | `string` | `null` | no |
| <a name="input_enable_key_pair"></a> [enable\_key\_pair](#input\_enable\_key\_pair) | create / use key pair for instance template | `bool` | `true` | no |
| <a name="input_enable_lambda_vpc_config"></a> [enable\_lambda\_vpc\_config](#input\_enable\_lambda\_vpc\_config) | Config lambda to run inside vpc | `bool` | `false` | no |
Expand All @@ -883,12 +886,13 @@ The `helper_commands` part in the output provides lambda call that can be used t
| <a name="input_lambdas_custom_s3_bucket"></a> [lambdas\_custom\_s3\_bucket](#input\_lambdas\_custom\_s3\_bucket) | S3 bucket name for lambdas | `string` | `null` | no |
| <a name="input_lambdas_custom_s3_key"></a> [lambdas\_custom\_s3\_key](#input\_lambdas\_custom\_s3\_key) | S3 key for lambdas | `string` | `null` | no |
| <a name="input_lambdas_dist"></a> [lambdas\_dist](#input\_lambdas\_dist) | Lambdas code dist | `string` | `"release"` | no |
| <a name="input_lambdas_version"></a> [lambdas\_version](#input\_lambdas\_version) | Lambdas code version (hash) | `string` | `"a1a9b4a0ee20b5728e5293be08f5ce88"` | no |
| <a name="input_lambdas_version"></a> [lambdas\_version](#input\_lambdas\_version) | Lambdas code version (hash) | `string` | `"23b310b040a6ea53217b8d7ef8d1d275"` | no |
| <a name="input_metadata_http_tokens"></a> [metadata\_http\_tokens](#input\_metadata\_http\_tokens) | Whether or not the metadata service requires session tokens, also referred to as Instance Metadata Service Version 2 (IMDSv2) | `string` | `"required"` | no |
| <a name="input_nat_public_subnet_cidr"></a> [nat\_public\_subnet\_cidr](#input\_nat\_public\_subnet\_cidr) | CIDR block for public subnet | `string` | `"10.0.2.0/24"` | no |
| <a name="input_nfs_capacity_reservation_id"></a> [nfs\_capacity\_reservation\_id](#input\_nfs\_capacity\_reservation\_id) | The ID of the capacity reservation in which to run the nfs clients | `string` | `null` | no |
| <a name="input_nfs_interface_group_name"></a> [nfs\_interface\_group\_name](#input\_nfs\_interface\_group\_name) | Interface group name. | `string` | `"weka-ig"` | no |
| <a name="input_nfs_protocol_gateway_fe_cores_num"></a> [nfs\_protocol\_gateway\_fe\_cores\_num](#input\_nfs\_protocol\_gateway\_fe\_cores\_num) | The protocol gateways' NICs number. | `number` | `1` | no |
| <a name="input_nfs_protocol_gateway_instance_ami_id"></a> [nfs\_protocol\_gateway\_instance\_ami\_id](#input\_nfs\_protocol\_gateway\_instance\_ami\_id) | AMI ID to use, Amazon Linux 2 is the supported OS. | `string` | `null` | no |
| <a name="input_nfs_protocol_gateway_instance_iam_profile_arn"></a> [nfs\_protocol\_gateway\_instance\_iam\_profile\_arn](#input\_nfs\_protocol\_gateway\_instance\_iam\_profile\_arn) | The protocol gateway instance IAM profile ARN | `string` | `""` | no |
| <a name="input_nfs_protocol_gateway_instance_type"></a> [nfs\_protocol\_gateway\_instance\_type](#input\_nfs\_protocol\_gateway\_instance\_type) | The protocol gateways' virtual machine type (sku) to deploy. | `string` | `"c5n.2xlarge"` | no |
| <a name="input_nfs_protocol_gateway_secondary_ips_per_nic"></a> [nfs\_protocol\_gateway\_secondary\_ips\_per\_nic](#input\_nfs\_protocol\_gateway\_secondary\_ips\_per\_nic) | Number of secondary IPs per single NIC per protocol gateway virtual machine. | `number` | `3` | no |
Expand All @@ -901,6 +905,7 @@ The `helper_commands` part in the output provides lambda call that can be used t
| <a name="input_proxy_url"></a> [proxy\_url](#input\_proxy\_url) | Weka proxy url | `string` | `""` | no |
| <a name="input_s3_capacity_reservation_id"></a> [s3\_capacity\_reservation\_id](#input\_s3\_capacity\_reservation\_id) | The ID of the capacity reservation in which to run the s3 clients | `string` | `null` | no |
| <a name="input_s3_protocol_gateway_fe_cores_num"></a> [s3\_protocol\_gateway\_fe\_cores\_num](#input\_s3\_protocol\_gateway\_fe\_cores\_num) | S3 protocol gateways' NICs number. | `number` | `1` | no |
| <a name="input_s3_protocol_gateway_instance_ami_id"></a> [s3\_protocol\_gateway\_instance\_ami\_id](#input\_s3\_protocol\_gateway\_instance\_ami\_id) | AMI ID to use, Amazon Linux 2 is the supported OS. | `string` | `null` | no |
| <a name="input_s3_protocol_gateway_instance_iam_profile_arn"></a> [s3\_protocol\_gateway\_instance\_iam\_profile\_arn](#input\_s3\_protocol\_gateway\_instance\_iam\_profile\_arn) | The protocol gateway instance IAM profile ARN | `string` | `""` | no |
| <a name="input_s3_protocol_gateway_instance_type"></a> [s3\_protocol\_gateway\_instance\_type](#input\_s3\_protocol\_gateway\_instance\_type) | The protocol gateways' virtual machine type (sku) to deploy. | `string` | `"c5n.2xlarge"` | no |
| <a name="input_s3_protocol_gateway_weka_volume_size"></a> [s3\_protocol\_gateway\_weka\_volume\_size](#input\_s3\_protocol\_gateway\_weka\_volume\_size) | The protocol gateways' default disk size. | `number` | `48` | no |
Expand All @@ -916,6 +921,7 @@ The `helper_commands` part in the output provides lambda call that can be used t
| <a name="input_smb_cluster_name"></a> [smb\_cluster\_name](#input\_smb\_cluster\_name) | The name of the SMB setup. | `string` | `"Weka-SMB"` | no |
| <a name="input_smb_domain_name"></a> [smb\_domain\_name](#input\_smb\_domain\_name) | The domain to join the SMB cluster to. | `string` | `""` | no |
| <a name="input_smb_protocol_gateway_fe_cores_num"></a> [smb\_protocol\_gateway\_fe\_cores\_num](#input\_smb\_protocol\_gateway\_fe\_cores\_num) | The protocol gateways' NICs number. | `number` | `1` | no |
| <a name="input_smb_protocol_gateway_instance_ami_id"></a> [smb\_protocol\_gateway\_instance\_ami\_id](#input\_smb\_protocol\_gateway\_instance\_ami\_id) | AMI ID to use, Amazon Linux 2 is the supported OS. | `string` | `null` | no |
| <a name="input_smb_protocol_gateway_instance_iam_profile_arn"></a> [smb\_protocol\_gateway\_instance\_iam\_profile\_arn](#input\_smb\_protocol\_gateway\_instance\_iam\_profile\_arn) | The protocol gateway instance IAM profile ARN | `string` | `""` | no |
| <a name="input_smb_protocol_gateway_instance_type"></a> [smb\_protocol\_gateway\_instance\_type](#input\_smb\_protocol\_gateway\_instance\_type) | The protocol gateways' virtual machine type (sku) to deploy. | `string` | `"c5n.2xlarge"` | no |
| <a name="input_smb_protocol_gateway_secondary_ips_per_nic"></a> [smb\_protocol\_gateway\_secondary\_ips\_per\_nic](#input\_smb\_protocol\_gateway\_secondary\_ips\_per\_nic) | Number of secondary IPs per single NIC per protocol gateway virtual machine. | `number` | `0` | no |
Expand Down
4 changes: 3 additions & 1 deletion clients.tf
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module "clients" {
count = var.clients_number > 0 ? 1 : 0
# in case the clients number is 0 and the instance_iam_profile_arn is empty, we will run the module just to create the IAM role
count = var.clients_number > 0 || var.instance_iam_profile_arn == "" ? 1 : 0
source = "./modules/clients"
subnet_id = local.subnet_ids[0]
clients_name = "${var.prefix}-${var.cluster_name}-client"
Expand Down Expand Up @@ -27,5 +28,6 @@ module "clients" {
custom_data = var.clients_custom_data
arch = var.client_arch
capacity_reservation_id = var.client_capacity_reservation_id
metadata_http_tokens = var.metadata_http_tokens
depends_on = [aws_autoscaling_group.autoscaling_group, module.network]
}
7 changes: 6 additions & 1 deletion lambdas/aws_functions_def/functions_def.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,12 @@ func (d *AWSFuncDef) GetFunctionCmdDefinition(name functions_def.FunctionName) s
funcDefTemplate := `
function %s {
local json_data=$1
res=$(aws lambda invoke --region %s --function-name %s --payload "$json_data" output)
aws_version=$(aws --version)
cli_binary_format=""
if [[ "$aws_version" == aws-cli/2* ]]; then
cli_binary_format="--cli-binary-format raw-in-base64-out"
fi
res=$(aws lambda invoke --region %s --function-name %s $cli_binary_format --payload "$json_data" output)
printf "%%b" "$(cat output | sed 's/^"//' | sed 's/"$//' | sed 's/\\\"/"/g')"
}
`
Expand Down
2 changes: 1 addition & 1 deletion lambdas/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/aws/aws-sdk-go v1.45.16
github.com/lithammer/dedent v1.1.0
github.com/rs/zerolog v1.31.0
github.com/weka/go-cloud-lib v0.0.0-20240827193000-1baaa0474e06
github.com/weka/go-cloud-lib v0.0.0-20240910075226-391a1c2f5a2d
golang.org/x/sync v0.3.0
)

Expand Down
4 changes: 2 additions & 2 deletions lambdas/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWR
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/weka/go-cloud-lib v0.0.0-20240827193000-1baaa0474e06 h1:BtrJb2A9XEgUkQ7q8FhPXAt8t3uPAydxJoqCvttKo64=
github.com/weka/go-cloud-lib v0.0.0-20240827193000-1baaa0474e06/go.mod h1:FCQuk2bLvtDHe2Kjsu0oInJP1VOVsuxqPGHGMmVIPMg=
github.com/weka/go-cloud-lib v0.0.0-20240910075226-391a1c2f5a2d h1:vKMrn42PDwWo6IxB8TFZBxG/g4khLLaZ87KVw5g69wc=
github.com/weka/go-cloud-lib v0.0.0-20240910075226-391a1c2f5a2d/go.mod h1:FCQuk2bLvtDHe2Kjsu0oInJP1VOVsuxqPGHGMmVIPMg=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
Expand Down
10 changes: 6 additions & 4 deletions main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,12 @@ resource "local_file" "private_key" {
}

resource "aws_placement_group" "placement_group" {
count = var.use_placement_group && var.placement_group_name == null ? 1 : 0
name = "${var.prefix}-${var.cluster_name}-placement-group"
strategy = "cluster"
tags = var.tags_map
count = var.use_placement_group && var.placement_group_name == null ? 1 : 0
name = "${var.prefix}-${var.cluster_name}-placement-group"
strategy = "cluster"
tags = merge(var.tags_map, {
CreationDate = timestamp()
})
depends_on = [module.network]
}

Expand Down
3 changes: 2 additions & 1 deletion modules/clients/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,13 @@ No modules.
| <a name="input_clients_number"></a> [clients\_number](#input\_clients\_number) | The number of virtual machines to deploy. | `number` | `2` | no |
| <a name="input_clients_use_dpdk"></a> [clients\_use\_dpdk](#input\_clients\_use\_dpdk) | Install weka cluster with DPDK | `bool` | `true` | no |
| <a name="input_custom_data"></a> [custom\_data](#input\_custom\_data) | Custom data to pass to the instances | `string` | `""` | no |
| <a name="input_ebs_encrypted"></a> [ebs\_encrypted](#input\_ebs\_encrypted) | Enables EBS encryption on the volume | `bool` | `false` | no |
| <a name="input_ebs_encrypted"></a> [ebs\_encrypted](#input\_ebs\_encrypted) | Enables EBS encryption on the volume | `bool` | `true` | no |
| <a name="input_ebs_kms_key_id"></a> [ebs\_kms\_key\_id](#input\_ebs\_kms\_key\_id) | The ARN of the AWS Key Management Service | `string` | `""` | no |
| <a name="input_frontend_container_cores_num"></a> [frontend\_container\_cores\_num](#input\_frontend\_container\_cores\_num) | Number of frontend cores to use on client instances, this number will reflect on number of NICs attached to instance, as each weka core requires dedicated NIC | `number` | `1` | no |
| <a name="input_instance_iam_profile_arn"></a> [instance\_iam\_profile\_arn](#input\_instance\_iam\_profile\_arn) | Instance IAM profile ARN | `string` | n/a | yes |
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | The virtual machine type (sku) to deploy | `string` | n/a | yes |
| <a name="input_key_pair_name"></a> [key\_pair\_name](#input\_key\_pair\_name) | Ssh key pair name to pass to the instances. | `string` | n/a | yes |
| <a name="input_metadata_http_tokens"></a> [metadata\_http\_tokens](#input\_metadata\_http\_tokens) | Whether or not the metadata service requires session tokens, also referred to as Instance Metadata Service Version 2 (IMDSv2) | `string` | `"required"` | no |
| <a name="input_placement_group_name"></a> [placement\_group\_name](#input\_placement\_group\_name) | Placement group name | `string` | `null` | no |
| <a name="input_proxy_url"></a> [proxy\_url](#input\_proxy\_url) | Weka proxy url | `string` | `""` | no |
| <a name="input_sg_ids"></a> [sg\_ids](#input\_sg\_ids) | Security group ids | `list(string)` | `[]` | no |
Expand Down
2 changes: 1 addition & 1 deletion modules/clients/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ region=${region}
subnet_id=${subnet_id}
additional_nics_num=${additional_nics_num}

instance_type=$(curl -s http://169.254.169.254/latest/meta-data/instance-type)
instance_type=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/instance-type)
max_network_cards=$(aws ec2 describe-instance-types --region $region --instance-types $instance_type --query "InstanceTypes[0].NetworkInfo.MaximumNetworkCards" --output text)

counter=0
Expand Down
28 changes: 17 additions & 11 deletions modules/clients/main.tf
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
data "aws_region" "current" {}

data "aws_caller_identity" "current" {}
data "aws_caller_identity" "current" {
count = var.clients_number > 0 ? 1 : 0
}

data "aws_subnet" "selected" {
id = var.subnet_id
count = var.clients_number > 0 ? 1 : 0
id = var.subnet_id
}

data "aws_ami" "selected" {
count = var.client_instance_ami_id == null ? 1 : 0
count = var.client_instance_ami_id == null && var.clients_number > 0 ? 1 : 0
most_recent = true
owners = ["amazon"]

Expand Down Expand Up @@ -49,13 +52,16 @@ locals {
}

resource "aws_placement_group" "this" {
count = var.use_placement_group && var.placement_group_name == null ? 1 : 0
count = var.use_placement_group && var.placement_group_name == null && var.clients_number > 0 ? 1 : 0
name = "${var.clients_name}-placement-group"
strategy = "cluster"
tags = var.tags_map
tags = merge(var.tags_map, {
CreationDate = timestamp()
})
}

resource "aws_launch_template" "this" {
count = var.clients_number > 0 ? 1 : 0
name = "${var.clients_name}-launch-template"
disable_api_termination = false
ebs_optimized = true
Expand Down Expand Up @@ -86,7 +92,7 @@ resource "aws_launch_template" "this" {

metadata_options {
http_endpoint = "enabled"
http_tokens = "optional" #required
http_tokens = var.metadata_http_tokens
http_put_response_hop_limit = 1
instance_metadata_tags = "enabled"
}
Expand All @@ -104,7 +110,7 @@ resource "aws_launch_template" "this" {
}

placement {
availability_zone = data.aws_subnet.selected.availability_zone
availability_zone = data.aws_subnet.selected[0].availability_zone
group_name = var.use_placement_group ? var.placement_group_name == null ? aws_placement_group.this[0].name : var.placement_group_name : null
}

Expand All @@ -121,7 +127,7 @@ resource "aws_launch_template" "this" {
tags = merge(var.tags_map, {
Name = var.clients_name
weka_hostgroup_type = "client"
user = data.aws_caller_identity.current.user_id
user = data.aws_caller_identity.current[0].user_id
})
}
}
Expand All @@ -133,7 +139,7 @@ resource "aws_launch_template" "this" {
resource "aws_instance" "this" {
count = var.use_autoscaling_group ? 0 : var.clients_number
launch_template {
id = aws_launch_template.this.id
id = aws_launch_template.this[0].id
}

lifecycle {
Expand All @@ -155,8 +161,8 @@ resource "aws_autoscaling_group" "autoscaling_group" {
protect_from_scale_in = true

launch_template {
id = aws_launch_template.this.id
version = aws_launch_template.this.latest_version
id = aws_launch_template.this[0].id
version = aws_launch_template.this[0].latest_version
}

lifecycle {
Expand Down
14 changes: 7 additions & 7 deletions modules/clients/mount_wekafs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,18 @@ weka local stop && weka local rm -f --all

FRONTEND_CONTAINER_CORES_NUM="${frontend_container_cores_num}"
NICS_NUM=$((FRONTEND_CONTAINER_CORES_NUM+1))
first_interface=$(ip -o link show | awk -F ': ' '!/docker0/ && !/^lo/ {print $2}' | sort | head -n 1)
interface_str=$(echo $first_interface | awk '{gsub(/[0-9]/,"",$1); print $1}')
first_interface_number=$(echo $first_interface | awk '{gsub(/[^0-9]/,"",$1); print $1}')
first_interface_ip=$(ip addr show $first_interface | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
first_interface_name=$(ls /sys/class/net | grep -vE 'docker|veth|lo' | head -n 1)
interfaces_base_name=$(echo $first_interface_name | awk '{gsub(/[0-9]/,"",$1); print $1}')
first_interface_number=$(echo $first_interface_name | grep -o '[0-9]*$')
first_interface_ip=$(ip addr show $first_interface_name | grep -oP '(?<=inet\s)\d+(\.\d+){3}')

function getNetStrForDpdk() {
i=$1
j=$2

interface_name=$3
net=""
for ((i; i<$j; i++)); do
net="$net -o net=$interface_str$i"
net="$net -o net=$interface_name$i"
done
}

Expand All @@ -105,7 +105,7 @@ function retry {
echo "$(date -u): Retry mount client"
mount_command="mount -t wekafs -o net=udp $backend_ip/$FILESYSTEM_NAME $MOUNT_POINT"
if [[ ${clients_use_dpdk} == true ]]; then
getNetStrForDpdk $(($first_interface_number+1)) $(($NICS_NUM+$first_interface_number))
getNetStrForDpdk $(($first_interface_number+1)) $(($NICS_NUM+$first_interface_number)) "$interfaces_base_name"
mount_command="mount -t wekafs $net -o num_cores=$FRONTEND_CONTAINER_CORES_NUM -o mgmt_ip=$first_interface_ip $backend_ip/$FILESYSTEM_NAME $MOUNT_POINT"
fi

Expand Down
Loading