diff --git a/terraform-provider-alicloud/create-vpc/outputs.tf b/terraform-provider-alicloud/create-vpc/outputs.tf new file mode 100644 index 0000000..ad36fb7 --- /dev/null +++ b/terraform-provider-alicloud/create-vpc/outputs.tf @@ -0,0 +1,70 @@ +data "alicloud_vpcs" "terra_vpcs" { + ids =[alicloud_vpc.terra_vpc.id,] + status = "Available" +# name_regex = "^foo" +} + +data "alicloud_vswitches" "terra_subs" { + ids = [alicloud_vswitch.terra_sub.id,] + # name_regex = "${alicloud_vswitch.terra_subs.vswitch_name}" +} + +data "alicloud_security_groups" "terra_sgs" { + ids = [alicloud_security_group.terra_sg.id,] +resource_group_id = alicloud_resource_manager_resource_group.rg.id +depends_on = [ alicloud_security_group.terra_sg ] +} + + +output vpc_name { + description = "Name of created VPC. " + value = "${data.alicloud_vpcs.terra_vpcs.vpcs.0.vpc_name}" +} + +output "vpc_id" { + description = "ID of created VPC. " + value = "${data.alicloud_vpcs.terra_vpcs.vpcs.0.id}" + } + +output "vpc_CIDR" { + description = "cidr block of created VPC. " + value = "${data.alicloud_vpcs.terra_vpcs.vpcs.0.cidr_block}" + } + +output "Subnet_Name" { + description = "Name of created VPC's Subnet. " + value = "${data.alicloud_vswitches.terra_subs.vswitches.0.name}" + } + +output "Subnet_CIDR" { + description = "cidr block of VPC's VSwitch. " + value = "${data.alicloud_vswitches.terra_subs.vswitches.0.cidr_block}" + } + + + +output "vpc_dedicated_security_group_Name" { + description = "Security Group Name. " + value = "${data.alicloud_security_groups.terra_sgs.groups.0.name}" + } + +# Filter the security group rule by group +data "alicloud_security_group_rules" "ingress_rules" { + group_id = "${data.alicloud_security_groups.terra_sgs.groups.0.id}" # or ${var.security_group_id} + nic_type = "internet" + direction = "ingress" + ip_protocol = "tcp" + depends_on = [ alicloud_security_group.terra_sg ] +} + +output "vpc_dedicated_security_ingress_rules" { + description = "Shows ingress rules of the Security group " + value = formatlist("%s: %s" ,data.alicloud_security_group_rules.ingress_rules.rules.*.description,formatlist("%s , CIDR: %s", data.alicloud_security_group_rules.ingress_rules.rules.*.port_range,data.alicloud_security_group_rules.ingress_rules.rules.*.source_cidr_ip)) + } + + + + + + + diff --git a/terraform-provider-alicloud/create-vpc/terraform.tfvars b/terraform-provider-alicloud/create-vpc/terraform.tfvars new file mode 100644 index 0000000..d147500 --- /dev/null +++ b/terraform-provider-alicloud/create-vpc/terraform.tfvars @@ -0,0 +1,7 @@ +# AliCloud Infrastructure Authentication +ali_access_key = "xxxxxxxxxxxxx" # CHANGE ME +ali_secret_key = "xxxxxxxxxxxxx" # CHANGE ME + +# Region +# ali_region = "us-east-1" #"cn-hongkong-b" # CHANGE ME + diff --git a/terraform-provider-alicloud/create-vpc/variables.tf b/terraform-provider-alicloud/create-vpc/variables.tf new file mode 100644 index 0000000..e575f81 --- /dev/null +++ b/terraform-provider-alicloud/create-vpc/variables.tf @@ -0,0 +1,63 @@ +# Aws account region and autehntication +variable "ali_access_key" {} +variable "ali_secret_key" {} + +variable "prefix" { + description = "The prefix used for the resources group in this example" + default = "TerraDemo" +} + +# Ali Cloud Zone + + variable "ali_zone" { + type = map + default = { + us-east-1 = "us-east-1b" + hongkong = "cn-hongkong-b" # Centos 7 + germany = "eu-central-1a" #8.8 + UK = "eu-west-1a" + us-west-1 = "us-west-1a" + } + } + +variable "ali_region" { + default = "us-east-1" # "hongkong" have only # 2C4G free tier 3 months , not 1C1G free tier CPus +} + +# VPC INFO + variable "vpc_name" { + default = "Terravpc" + } + + variable "vpc_cidr" { + default = "192.168.0.0/16" + } + +# SUBNET/VSWITCH INFO + variable "vswitch_name"{ + default = "terrasub" + } + + variable "vswitch_cidr"{ + default = "192.168.10.0/24" + } + variable "map_public_ip_on_launch" { + description = "Indicate if instances launched into the VPC's Subnet will be assigned a public IP address . " + default = true + } + +# IGW INFO + variable "igw_name"{ + default = "terra-igw" + } + +# ROUTE TABLE INFO + variable "rt_name"{ + default = "terra-rt" + } +# ROUTE TABLE INFO + variable "sg_name"{ + default = "terra-sg" + } + + diff --git a/terraform-provider-alicloud/create-vpc/vpc.tf b/terraform-provider-alicloud/create-vpc/vpc.tf new file mode 100644 index 0000000..587a64f --- /dev/null +++ b/terraform-provider-alicloud/create-vpc/vpc.tf @@ -0,0 +1,118 @@ + terraform { + # required_version = OpenTofu # The latest HashiCorp terraform release under MPL is 1.5.5 + required_providers { + alicloud = { + source = "aliyun/alicloud" + version = "1.211.2" + } + } + } +# Provider specific configs +provider "alicloud" { + access_key = var.ali_access_key + secret_key = var.ali_secret_key + region = var.ali_region +} + +################# +# Resorce Group +################# +# alicloud Resource group +resource "alicloud_resource_manager_resource_group" "rg" { + resource_group_name = "${var.prefix}-rg" + display_name = "${var.prefix}-rg" +} + +################# +# VPC +################# +resource "alicloud_vpc" "terra_vpc" { + vpc_name = var.vpc_name + cidr_block = var.vpc_cidr + resource_group_id = alicloud_resource_manager_resource_group.rg.id + } + +################# +# VSWITCH +################# +# ali_vswitch.terra_sub: +resource "alicloud_vswitch" "terra_sub" { + vpc_id = alicloud_vpc.terra_vpc.id + zone_id = var.ali_zone[var.ali_region] + cidr_block = var.vswitch_cidr + vswitch_name = var.vswitch_name + } + +###################### +# Security Group +###################### +# ali_security_group.terra_sg: +resource "alicloud_security_group" "terra_sg" { + name = var.sg_name + description = "Terra security group" + vpc_id = alicloud_vpc.terra_vpc.id + resource_group_id = alicloud_resource_manager_resource_group.rg.id +} + +resource "alicloud_security_group_rule" "allow_http_80" { + type = "ingress" + ip_protocol = "tcp" + description = "allow_http_80" + #nic_type = "internet" # var.nic_type + policy = "accept" + port_range = "80/80" + priority = 1 + security_group_id = alicloud_security_group.terra_sg.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group_rule" "allow_https_443" { + type = "ingress" + ip_protocol = "tcp" + description = "allow_https_443" + #nic_type = "internet" #var.nic_type + policy = "accept" + port_range = "443/443" + priority = 1 + security_group_id = alicloud_security_group.terra_sg.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group_rule" "allow_https_22" { + type = "ingress" + ip_protocol = "tcp" + description = "allow_https_22" + #nic_type = "internet" # var.nic_type + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = alicloud_security_group.terra_sg.id + cidr_ip = "0.0.0.0/0" +} + +################################################ +# Internet Gateway desn't exist in alicloud +############################################### +############################### +# Route Table isn't necessary +############################### +/* ali_route_table.terra_rt: +resource "alicloud_route_table" "terra_rt" { + description = "test-description" + vpc_id = alicloud_vpc.defaultVpc.id + route_table_name = var.name + associate_type = "VSwitch" +} +# add route rules +resource "alicloud_route_entry" "foo" { + route_table_id = alicloud_vpc.foo.route_table_id + destination_cidrblock = "172.11.1.1/32" + nexthop_type = "Instance" + nexthop_id = alicloud_instance.foo.id +} +# ali_route_table_association.terra_rt_sub: +resource "alicloud_route_table_attachment" "foo" { + vswitch_id = alicloud_vswitch.terra_sub.id + route_table_id = alicloud_route_table.terra_rt.id +} +*/ \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.ps b/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.ps new file mode 100644 index 0000000..2cdd807 Binary files /dev/null and b/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.ps differ diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.ps1 b/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.ps1 new file mode 100644 index 0000000..8aa3403 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.ps1 @@ -0,0 +1,32 @@ +#cd C:\Users\azureuser +Set-ExecutionPolicy Unrestricted -Force +New-NetFirewallRule -Display 'EC2 HTTP Inbound' -Dir Inbound -Action Allow -Prot TCP -LocalP @('80', '443') +function down_ngx { + param($url, $filename) +$client = New-Object System.Net.WebClient +$client.DownloadFile( $url, $filename) +} + +down_ngx "http://nginx.org/download/nginx-1.19.2.zip" "nginx-1.19.2.zip" + #-ExecutionPolicy RemoteSigned -File "download.ps1" "http://nginx.org/download/nginx-1.19.2.zip" "nginx-1.19.2.zip" +Expand-Archive -Force '.\nginx-1.19.2.zip' '.\' +Remove-Item -Path nginx-1.19.2.zip +cd nginx-1.19.2 +ren html\index.html "index.original.html" +cd html +echo "" >index.html +echo "Here you are Papy">>index.html +echo "" >>index.html +echo "" >>index.html +echo "" >>index.html +echo "
" >>index.html +echo "

Welcome to The ALIBABA Loco Party :D !!!

" >>index.html +echo "" >>index.html +echo "
" >>index.html +echo "" >>index.html +echo "" >>index.html +cd .. +start nginx.exe \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.txt new file mode 100644 index 0000000..0e385cd --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/Win_userdata.txt @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/centos_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/centos_userdata.txt new file mode 100644 index 0000000..f60a2ac --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/centos_userdata.txt @@ -0,0 +1,35 @@ +#!/bin/sh +sudo echo Script started > /tmp/script.log + +FILE="/tmp/index.html" +sudo /bin/cat <$FILE + +Here you are Papy + + + +
+

Welcome to The ALIBABA Loco Party :D !!!

+ +
+ + +EOF +YUM_REPO="/etc/yum.repos.d/nginx.repo" +sudo /bin/cat <$YUM_REPO +[nginx] +name=nginx repo +baseurl=http://nginx.org/packages/mainline/rhel/7/\$basearch/ +gpgcheck=0 +enabled=1 +EOF + +sudo yum install -y nginx +sudo systemctl start nginx +sudo systemctl enable nginx +sudo systemctl status nginx +sudo cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.original.html +sudo cp $FILE /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/el_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/el_userdata.txt new file mode 100644 index 0000000..8070e22 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/el_userdata.txt @@ -0,0 +1,38 @@ +#!/bin/sh +sudo echo Script started > /tmp/script.log + +FILE="/tmp/index.html" +sudo /bin/cat <$FILE + +Here you are Papy + + + +
+

Welcome to The ALIBABA Loco Party :D !!!

+ +
+ + +EOF +YUM_REPO="/etc/yum.repos.d/nginx.repo" +sudo /bin/cat <$YUM_REPO +[nginx] +name=nginx repo +baseurl=http://nginx.org/packages/mainline/rhel/7/\$basearch/ +gpgcheck=0 +enabled=1 +EOF + +sudo yum install -y nginx +sudo systemctl start nginx +sudo systemctl enable nginx +sudo systemctl status nginx +#sudo firewall-cmd --zone=public --permanent --add-service=http +#sudo firewall-cmd --zone=public --permanent --add-service=https +#sudo firewall-cmd --reload +sudo cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.original.html +sudo cp $FILE /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/olinux_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/olinux_userdata.txt new file mode 100644 index 0000000..195a679 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/olinux_userdata.txt @@ -0,0 +1,38 @@ +#!/bin/sh +sudo echo Script started > /tmp/script.log + +FILE="/tmp/index.html" +sudo /bin/cat <$FILE + +Here you are Papy + + + +
+

Welcome to The ALIBABA Loco Party :D !!!

+ +
+ + +EOF +YUM_REPO="/etc/yum.repos.d/nginx.repo" +sudo /bin/cat <$YUM_REPO +[nginx] +name=nginx repo +baseurl=http://nginx.org/packages/mainline/rhel/7/\$basearch/ +gpgcheck=0 +enabled=1 +EOF + +sudo yum install -y nginx +sudo systemctl start nginx +sudo systemctl enable nginx +sudo systemctl status nginx +sudo firewall-cmd --zone=public --permanent --add-service=http +sudo firewall-cmd --zone=public --permanent --add-service=https +sudo firewall-cmd --reload +sudo cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.original.html +sudo cp $FILE /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/rhel_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/rhel_userdata.txt new file mode 100644 index 0000000..7ca529f --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/rhel_userdata.txt @@ -0,0 +1,39 @@ +#!/bin/sh +sudo echo Script started > /tmp/script.log + +FILE="/tmp/index.html" +sudo /bin/cat <$FILE + +Here you are Papy + + + +
+

Welcome to The ALIBABA Loco Party :D !!!

+ +
+ + +EOF +YUM_REPO="/etc/yum.repos.d/nginx.repo" +sudo /bin/cat <$YUM_REPO +[nginx] +name=nginx repo +baseurl=http://nginx.org/packages/mainline/rhel/7/\$basearch/ +gpgcheck=0 +enabled=1 +EOF + +sudo yum install -y nginx +sudo systemctl start nginx +sudo systemctl enable nginx +sudo systemctl status nginx +sudo firewall-offline-cmd --add-port=80/tcp +sudo firewall-offline-cmd --add-port=443/tcp +sudo /bin/systemctl restart firewalld +#sudo firewall-cmd --reload +sudo cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.original.html +sudo cp $FILE /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/sles_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/sles_userdata.txt new file mode 100644 index 0000000..cecfe3c --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/sles_userdata.txt @@ -0,0 +1,30 @@ +#!/bin/sh +sudo echo Script started > /tmp/script.log + +FILE="/tmp/index.html" +sudo /bin/cat <$FILE + +Here you are Papy + + + +
+

Welcome to The ALIBABALoco Party :D !!!

+ +
+ + +EOF +#cat /etc/os-release +sudo zypper addrepo -G -c 'https://nginx.org/packages/sles/15' nginx +sudo zypper -n install nginx +sudo systemctl start nginx +sudo systemctl enable nginx +sudo systemctl status nginx +#zypper in SuSEfirewall2 + add FW_SERVICES_EXT_TCP="22 80 443" in line 253 +#sudo firewall-cmd --zone=public --permanent --add-service=https +#sudo firewall-cmd --reload +sudo cat $FILE > /usr/share/nginx/html/index.html \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/ubto_userdata.txt b/terraform-provider-alicloud/launch-instance/cloud-init/ubto_userdata.txt new file mode 100644 index 0000000..199b0bf --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/ubto_userdata.txt @@ -0,0 +1,28 @@ +#!/bin/sh +sudo echo Script started > /tmp/script.log + +FILE="/tmp/index.html" +sudo /bin/cat <$FILE + +Here you are Papy + + + +
+

Welcome to The ALIBABA Loco Party :D !!!

+ +
+ + +EOF + +sudo apt --assume-yes install nginx +sudo ufw allow 'Nginx HTTP' +#sudo systemctl start nginx +sudo systemctl enable nginx +sudo systemctl status nginx +# sudo cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.original.html +sudo cat $FILE > /var/www/html/index.html \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/cloud-init/vm.cloud-config b/terraform-provider-alicloud/launch-instance/cloud-init/vm.cloud-config new file mode 100644 index 0000000..5e7fb95 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/cloud-init/vm.cloud-config @@ -0,0 +1,32 @@ +#cloud-config +write_files: +- content: | + + + + + Here you are Papy + + + + +
+

ALIBABA Loco Party Chapter II

+ +
+ + + + owner: centos:centos + path: /home/centos/index.html +runcmd: +- /bin/yum install -y nginx +- /bin/systemctl start nginx +- /bin/firewall-offline-cmd --add-port=80/tcp +- /bin/systemctl restart firewalld +- cp /usr/share/nginx/html/index.html /usr/share/nginx/html/index.original.html +- cat /home/centos/index.html > /usr/share/nginx/html/index.html diff --git a/terraform-provider-alicloud/launch-instance/compute.tf b/terraform-provider-alicloud/launch-instance/compute.tf new file mode 100644 index 0000000..7c1c8c3 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/compute.tf @@ -0,0 +1,112 @@ + terraform { + # required_version = OpenTofu # The latest HashiCorp terraform release under MPL is 1.5.5 + required_providers { + alicloud = { + source = "aliyun/alicloud" + version = "1.211.2" + } + } + } +# Provider specific configs +provider "alicloud" { + access_key = var.ali_access_key + secret_key = var.ali_secret_key + region = var.ali_region +} +###################### +# DATA SOURCE +###################### + + /* +data "alicloud_vswitches" "terrasub" { + name_regex = "${alicloud_vswitch.vswitch.vswitch_name}" + vpc_id = + vswitch_name = + zone_id = +} +*/ +###################### +# INSTANCE +###################### + + data "alicloud_images" "centos7" { + most_recent = true + owners = "system" + name_regex = "^centos_7" +} + +resource "alicloud_key_pair" "key_pair" { + key_pair_name = var.key_name + public_key = file(var.ssh_public_key) # file(~/.ssh/id_rsa_ali.pub) + resource_group_id = alicloud_resource_manager_resource_group.rg.id +} + +resource "alicloud_instance" "terra_inst" { + image_id = var.img_id[var.OS] + instance_type = var.instance_type # "ecs.t5-lc1m1.small" # Free Tier eligible + host_name = var.hostname + availability_zone = var.ali_zone[var.ali_region] + resource_group_id = alicloud_resource_manager_resource_group.rg.id + security_groups = [alicloud_security_group.terra_sg.id] + internet_charge_type = "PayByTraffic" # Set to PayByTraffic for Free Tier eligibility + internet_max_bandwidth_out = 1 # Free Tier eligible / larger than 0 will allocate a public ip address + instance_name = "example-instance" + instance_charge_type = "PostPaid" # Set to Pay-As-You-Go for Free Tier eligibility + stopped_mode = "StopCharging" + key_name = var.key_name + system_disk_name = "root_disk" + system_disk_category = "cloud_efficiency" # Use the free tier system disk + system_disk_size = var.boot_volume_size # Up to 40G for the free tier system disk size + vswitch_id = alicloud_vswitch.terra_sub.id # Associate with a VSwitch + private_ip = var.private_ip # Assign a private IP + user_data = filebase64(var.user_data) +# security_enhancement_strategy = "Active" + +# allocate_public_ip = deprecated from version "1.7.0" see "internet_max_bandwidth_out" +# eip_options { in case Elastic IP Address is needed +# bandwidth = 1 +# internet_charge_type = "PayByTraffic" +# isp = "BGP" +# } +## DATA DISKS +/* + data_disks { + name = "disk1" + size = "20" + category = "cloud_efficiency" + description = "disk1" + delete_with_instance = true # default + } + data_disks { + name = "disk2" + size = "20" + category = "cloud_ssd" + description = "disk2" + encrypted = true + kms_key_id = alicloud_kms_key.key.id + delete_with_instance = false + } + */ +} + +###################### +# VOLUME +###################### +/* +resource "alicloud_ecs_disk" "disk" { + zone_id = var.ali_zone[var.ali_region] OR "instance_id = alicloud_instance.terra_inst.id" + disk_name = "terraform-example" + description = "terraform-example" + category = var.disk_category + size = var.disk_size + delete_with_instance = "true" + count = var.disk_number # +} + +resource "alicloud_ecs_disk_attachment" "instance-attachment" { + count = var.number + disk_id = alicloud_disk.disk.*.id[count.index] + instance_id = alicloud_instance.terra_inst.id +} + +*/ \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/outputs.tf b/terraform-provider-alicloud/launch-instance/outputs.tf new file mode 100644 index 0000000..4be3274 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/outputs.tf @@ -0,0 +1,87 @@ +## VPC OUTPUT +data "alicloud_vpcs" "terra_vpcs" { + ids =[alicloud_vpc.terra_vpc.id,] + status = "Available" +# name_regex = "^foo" +} + +data "alicloud_vswitches" "terra_subs" { + ids = [alicloud_vswitch.terra_sub.id,] + # name_regex = "${alicloud_vswitch.terra_subs.vswitch_name}" +} + +data "alicloud_security_groups" "terra_sgs" { + ids = [alicloud_security_group.terra_sg.id,] +resource_group_id = alicloud_resource_manager_resource_group.rg.id +depends_on = [ alicloud_security_group.terra_sg ] +} + + +output vpc_name { + description = "Name of created VPC. " + value = "${data.alicloud_vpcs.terra_vpcs.vpcs.0.vpc_name}" +} + +output "vpc_id" { + description = "ID of created VPC. " + value = "${data.alicloud_vpcs.terra_vpcs.vpcs.0.id}" + } + +output "vpc_CIDR" { + description = "cidr block of created VPC. " + value = "${data.alicloud_vpcs.terra_vpcs.vpcs.0.cidr_block}" + } + +output "Subnet_Name" { + description = "Name of created VPC's Subnet. " + value = "${data.alicloud_vswitches.terra_subs.vswitches.0.name}" + } + +output "Subnet_CIDR" { + description = "cidr block of VPC's VSwitch. " + value = "${data.alicloud_vswitches.terra_subs.vswitches.0.cidr_block}" + } + + + +output "vpc_dedicated_security_group_Name" { + description = "Security Group Name. " + value = "${data.alicloud_security_groups.terra_sgs.groups.0.name}" + } + +# Filter the security group rule by group +data "alicloud_security_group_rules" "ingress_rules" { + group_id = "${data.alicloud_security_groups.terra_sgs.groups.0.id}" # or ${var.security_group_id} + nic_type = "internet" + direction = "ingress" + ip_protocol = "tcp" + depends_on = [ alicloud_security_group.terra_sg ] +} + +output "vpc_dedicated_security_ingress_rules" { + description = "Shows ingress rules of the Security group " + value = formatlist("%s: %s" ,data.alicloud_security_group_rules.ingress_rules.rules.*.description,formatlist("%s , CIDR: %s", data.alicloud_security_group_rules.ingress_rules.rules.*.port_range,data.alicloud_security_group_rules.ingress_rules.rules.*.source_cidr_ip)) + } +## INSTANCE OUTPUT + output "instance_id" { + description = " id of created instances. " + value = alicloud_instance.terra_inst.id + } + + output "private_ip" { + description = "Private IPs of created instances. " + value = alicloud_instance.terra_inst.primary_ip_address + } + + output "public_ip" { + description = "Public IPs of created instances. " + value = alicloud_instance.terra_inst.public_ip + } + + output "SSH_Connection" { + value = format("ssh connection to instance ${var.instance_name} ==> sudo ssh -i ~/.ssh/id_rsa_ali root@%s",alicloud_instance.terra_inst.public_ip) +} + + + + \ No newline at end of file diff --git a/terraform-provider-alicloud/launch-instance/terraform.tfvars b/terraform-provider-alicloud/launch-instance/terraform.tfvars new file mode 100644 index 0000000..e7b41ea --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/terraform.tfvars @@ -0,0 +1,9 @@ +# AliCloud Infrastructure Authentication +ali_access_key = "xxxxxxxxxxxxx" # CHANGE ME +ali_secret_key = "xxxxxxxxxxxxx" # CHANGE ME + +## ssh_public_key = "~/id_rsa.pub" # CHANGE ME + +## Region +## ali_region = "us-east-1" # "cn-hongkong-b" # CHANGE ME + diff --git a/terraform-provider-alicloud/launch-instance/variables.tf b/terraform-provider-alicloud/launch-instance/variables.tf new file mode 100644 index 0000000..60068e1 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/variables.tf @@ -0,0 +1,143 @@ +# AliCloud account region and autehntication +variable "ali_access_key" {} +variable "ali_secret_key" {} + +variable "prefix" { + description = "The prefix used for the resources group in this example" + default = "TerraDemo" +} + +# Ali Cloud Zone + + variable "ali_zone" { + type = map + default = { + us-east-1 = "us-east-1a" + hongkong = "cn-hongkong-b" # Centos 7 + germany = "eu-central-1a" #8.8 + UK = "eu-west-1a" + us-west-1 = "us-west-1a" + } + } + +variable "ali_region" { + default = "us-east-1" # "hongkong" have only # 2C4G free tier 3 months , not 1C1G free tier CPus +} + +# VPC INFO + variable "vpc_name" { + default = "Terravpc" + } + + variable "vpc_cidr" { + default = "192.168.0.0/16" + } + +# SUBNET/VSWITCH INFO + variable "vswitch_name"{ + default = "terrasub" + } + + variable "vswitch_cidr"{ + default = "192.168.10.0/24" + } + variable "map_public_ip_on_launch" { + description = "Indicate if instances launched into the VPC's Subnet will be assigned a public IP address . " + default = true + } + +# IGW INFO + variable "igw_name"{ + default = "terra-igw" + } + +# ROUTE TABLE INFO + variable "rt_name"{ + default = "terra-rt" + } +# ROUTE TABLE INFO + variable "sg_name"{ + default = "terra-sg" + } + +# COMPUTE INSTANCE INFO + variable hostname { + default = "TerraHost" +} + variable "instance_name" { + default = "TerraCompute" + } + + + variable "instance_type" { + default = "ecs.c5.large" # FREE TIERE for 3 months or ecs.t5-lc1m1.small for 1 year + #shared ecs.n1.tiny ecs.xn4.small + # 2C4G free tier 3 months > 2x ecs.c6.large . 100G .5/mbs (enteprise) + # 1C1G free tier 1 YEAR > 1x ecs.t5-lc1m1.small 40g 1/mbs | burstable only available in APAC regions + # region supporting 1 year Free tier without ID: "cn-hongkong" i.e Zone:cn-hongkong-b + } + variable "img_id" { + type = map + + default = { + CENTOS8 = "centos_8_5_uefi_x64_20G_alibase_20220328.vhd" + CENTOS7 = "centos_7_9_uefi_x64_20G_alibase_20230816.vhd" # Centos 7 + RHEL8 = "m-t4n1vfii5zftauvd5axj" #8.8 + UBUNTU = "ubuntu_22_04_uefi_x64_20G_alibase_20230515.vhd" + ROCKY9 = "rockylinux_9_2_x64_20G_alibase_20230613.vhd" + WINDOWS = "win2022_21H2_x64_dtc_en-us_40G_alibase_20230915.vhd" + SUSE = "sles_12_sp4_x64_20G_alibase_20200319.vhd" + Aliyun = "aliyun_3_x64_20G_qboot_alibase_20230727.vhd" + } + } + + variable "OS" { + description = "the selected ami based OS" + default = "CENTOS7" +} + + +# BOOT INFO + variable "preserve_boot_volume" { + default = false + } + variable "boot_volume_size" { + default = "20" + } +variable "data_diks_size" { + default = "20" + } +# user data +variable "user_data" { + default = "./cloud-init/centos_userdata.txt" # "./cloud-init/vm.cloud-config" + } + +variable "key_name" { + default= "demo_ali_KeyPair" + } + + +variable ssh_public_key { + default = "~/.ssh/id_rsa_ali.pub" + +} +# VNIC INFO + variable "private_ip" { + default = "192.168.10.51" + } + + # EBS +/* +variable "ebs_volume_size" { + type = number + default = 20 # up to 40GB fr free tier + description = "Size of the ebs volume in gigabytes." + } + variable "ebs_device_name" { + type = list(string) + default = ["/dev/xvdb", "/dev/xvdc", "/dev/xvdd", "/dev/xvde", "/dev/xvdf", "/dev/xvdg", "/dev/xvdh", "/dev/xvdi", "/dev/xvdj", "/dev/xvdk", "/dev/xvdl", "/dev/xvdm", "/dev/xvdn", "/dev/xvdo", "/dev/xvdp", "/dev/xvdq", "/dev/xvdr", "/dev/xvds", "/dev/xvdt", "/dev/xvdu", "/dev/xvdv", "/dev/xvdw", "/dev/xvdx", "/dev/xvdy", "/dev/xvdz"] + description = "Name of the EBS device to mount." + } +*/ + + diff --git a/terraform-provider-alicloud/launch-instance/vpc.tf b/terraform-provider-alicloud/launch-instance/vpc.tf new file mode 100644 index 0000000..af7e063 --- /dev/null +++ b/terraform-provider-alicloud/launch-instance/vpc.tf @@ -0,0 +1,102 @@ +################# +# Resorce Group +################# +# alicloud Resource group +resource "alicloud_resource_manager_resource_group" "rg" { + resource_group_name = "${var.prefix}-rg" + display_name = "${var.prefix}-rg" +} + +################# +# VPC +################# +resource "alicloud_vpc" "terra_vpc" { + vpc_name = var.vpc_name + cidr_block = var.vpc_cidr + resource_group_id = alicloud_resource_manager_resource_group.rg.id + } + +################# +# VSWITCH +################# +# ali_vswitch.terra_sub: +resource "alicloud_vswitch" "terra_sub" { + vpc_id = alicloud_vpc.terra_vpc.id + zone_id = var.ali_zone[var.ali_region] + cidr_block = var.vswitch_cidr + vswitch_name = var.vswitch_name + } + +###################### +# Security Group +###################### +# ali_security_group.terra_sg: +resource "alicloud_security_group" "terra_sg" { + name = var.sg_name + description = "Terra security group" + vpc_id = alicloud_vpc.terra_vpc.id + resource_group_id = alicloud_resource_manager_resource_group.rg.id +} + +resource "alicloud_security_group_rule" "allow_http_80" { + type = "ingress" + ip_protocol = "tcp" + description = "allow_http_80" + #nic_type = "internet" # var.nic_type + policy = "accept" + port_range = "80/80" + priority = 1 + security_group_id = alicloud_security_group.terra_sg.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group_rule" "allow_https_443" { + type = "ingress" + ip_protocol = "tcp" + description = "allow_https_443" + #nic_type = "internet" #var.nic_type + policy = "accept" + port_range = "443/443" + priority = 1 + security_group_id = alicloud_security_group.terra_sg.id + cidr_ip = "0.0.0.0/0" +} + +resource "alicloud_security_group_rule" "allow_https_22" { + type = "ingress" + ip_protocol = "tcp" + description = "allow_https_22" + #nic_type = "internet" # var.nic_type + policy = "accept" + port_range = "22/22" + priority = 1 + security_group_id = alicloud_security_group.terra_sg.id + cidr_ip = "0.0.0.0/0" +} + +################################################ +# Internet Gateway desn't exist in alicloud +############################################### +############################### +# Route Table isn't necessary +############################### +/* ali_route_table.terra_rt: +resource "alicloud_route_table" "terra_rt" { + description = "test-description" + vpc_id = alicloud_vpc.defaultVpc.id + route_table_name = var.name + associate_type = "VSwitch" +} +# add route rules +resource "alicloud_route_entry" "foo" { + route_table_id = alicloud_vpc.foo.route_table_id + destination_cidrblock = "172.11.1.1/32" + nexthop_type = "Instance" + nexthop_id = alicloud_instance.foo.id +} +# ali_route_table_association.terra_rt_sub: +resource "alicloud_route_table_attachment" "foo" { + vswitch_id = alicloud_vswitch.terra_sub.id + route_table_id = alicloud_route_table.terra_rt.id +} +*/ \ No newline at end of file