Skip to content

Commit 8dd51d0

Browse files
authored
Create datasync.sh
1 parent 4209b26 commit 8dd51d0

File tree

1 file changed

+111
-0
lines changed

1 file changed

+111
-0
lines changed

src/bash/datasync.sh

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
#!/bin/bash
2+
# Script to convert HyperV datasync image to Azure
3+
# Runs on Amazon Linux 2
4+
5+
set -e
6+
7+
while getopts ":l:r:v:" opt; do
8+
case $opt in
9+
l) location="$OPTARG"
10+
;;
11+
r) resource_group="$OPTARG"
12+
;;
13+
v) vm_name="$OPTARG"
14+
;;
15+
\?) echo "Invalid option -$OPTARG" >&3
16+
exit 1
17+
;;
18+
esac
19+
20+
case $OPTARG in
21+
-*) echo "Option $opt needs a valid argument"
22+
exit 1
23+
;;
24+
esac
25+
done
26+
27+
if [ $# -ne 6 ]; then
28+
echo "Missing -l or -r or -v"
29+
exit 1
30+
fi
31+
32+
echo -e "\033[0;33mArgument location is $location\033[0m"
33+
echo -e "\033[0;33mArgument resource_group is $resource_group\033[0m"
34+
echo -e "\033[0;33mArgument vm_name is $vm_name\033[0m"
35+
36+
AZCOPY_VERSION=v10
37+
38+
function download_and_install_dependencies () {
39+
echo -e "[azure-cli]
40+
name=Azure CLI
41+
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
42+
enabled=1
43+
gpgcheck=1
44+
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | tee /etc/yum.repos.d/azure-cli.repo > /dev/null
45+
yum -y -q install qemu-img jq unzip azure-cli
46+
curl -Ls https://aka.ms/downloadazcopy-$AZCOPY_VERSION-linux -o /tmp/azcopy.tar.gz
47+
tar xzf /tmp/azcopy.tar.gz --directory /tmp
48+
cp /tmp/azcopy_linux_amd64*/azcopy /usr/local/bin/azcopy
49+
chmod +x /usr/local/bin/azcopy
50+
}
51+
52+
function download_datasync(){
53+
echo "Downloading datasync agent for Hyper-V"
54+
curl -s https://d8vjazrbkazun.cloudfront.net/AWS-DataSync-Agent-HyperV.zip -o /tmp/datasync.zip
55+
}
56+
57+
function convert_datasync(){
58+
unzip /tmp/datasync.zip -d /tmp
59+
vhdxdisk=$(find aws-*)
60+
rawdisk=$(echo $vhdxdisk | sed 's/vhdx/raw/')
61+
vhddisk=$(echo $vhdxdisk | sed 's/vhdx/vhd/')
62+
63+
qemu-img convert -f vhdx -O raw $vhdxdisk $rawdisk
64+
65+
MB=$((1024*1024))
66+
size=$(qemu-img info -f raw --output json "$rawdisk" | jq -r '.["virtual-size"]')
67+
rounded_size=$(((($size+$MB-1)/$MB)*$MB))
68+
echo "Rounded Size = $rounded_size"
69+
qemu-img resize $rawdisk $rounded_size
70+
qemu-img convert -f raw -o subformat=fixed,force_size -O vpc $rawdisk $vhddisk
71+
72+
rm $rawdisk
73+
disk_name=$(echo $vhddisk | sed 's/\.xfs\.gpt\.vhd//')
74+
upload_size=$(qemu-img info --output json "$vhddisk" | jq -r '.["virtual-size"]')
75+
}
76+
77+
function check_resource_group(){
78+
group_exists=$(az group exists --resource-group $resource_group)
79+
if [ $group_exists = "false" ]; then
80+
az group create --location $location --resource-group $resource_group --only-show-errors
81+
fi
82+
}
83+
84+
function upload_to_azure(){
85+
az login --use-device-code
86+
check_resource_group
87+
az disk create -n $disk_name -g $resource_group -l $location --os-type Linux --upload-type Upload --upload-size-bytes $upload_size --sku standard_lrs --output none --only-show-errors
88+
sas_uri=$(az disk grant-access -n $disk_name -g $resource_group --access-level Write --duration-in-seconds 86400 | jq -r '.accessSas')
89+
azcopy copy $vhddisk $sas_uri --blob-type PageBlob
90+
az disk revoke-access -n $disk_name -g $resource_group
91+
}
92+
93+
function create_azure_vm(){
94+
az vm create -g $resource_group -l $location --name $vm_name --size Standard_E4as_v4 --os-type linux --attach-os-disk $disk_name --public-ip-address "" --only-show-errors
95+
}
96+
97+
function cleanup(){
98+
rm -f /tmp/datasync.zip
99+
rm -rf /tmp/aws-datasync-*
100+
rm -rf /tmp/azcopy*
101+
}
102+
103+
pushd /tmp
104+
cleanup
105+
download_and_install_dependencies
106+
download_datasync
107+
convert_datasync
108+
upload_to_azure
109+
create_azure_vm
110+
cleanup
111+
popd

0 commit comments

Comments
 (0)