MOTOSHARE 🚗🏍️
Turning Idle Vehicles into Shared Rides & Earnings
From Idle to Income. From Parked to Purpose.
Earn by Sharing, Ride by Renting.
Where Owners Earn, Riders Move.
Owners Earn. Riders Move. Motoshare Connects.
With Motoshare, every parked vehicle finds a purpose.
Owners earn. Renters ride.
🚀 Everyone wins.
terraform init
terraform validate
terraform plan
terraform apply
terraform show
terraform output
terraform destory
Training Material
- https://devopsschool.com/slides/terraform/index.html
- https://www.devopsschool.com/blog/?s=terraform
- Recording
Revision
- What is Terraform?
- Terraform installation
- Terraform Basic Workflow
- Terraform Variables
Variables Labs
variable "instance_count" {
type = number
default = 1
}
resource "aws_instance" "example" {
count = var.instance_count
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
}
variable "instance_name" {
type = string
default = "my-instance"
}
resource "aws_instance" "example-number" {
count = var.instance_count
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
}
variable "security_groups" {
type = list(string)
default = ["sg-0541801a7a059ba17"]
}
resource "aws_instance" "example-list" {
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
vpc_security_group_ids = var.security_groups
}
variable "instance_tags" {
type = map(string)
default = {
Name = "my-instance"
}
}
resource "aws_instance" "example-map" {
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
tags = var.instance_tags
}
variable "create_vm" {
description = "If set to true, it will create vm"
type = bool
}
resource "aws_instance" "example-bool" {
count = var.create_vm ? 1 : 0
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
tags = var.instance_tags
}Code language: PHP (php)
How to set conditions in Terraform?
How to set conditions in Terraform?
https://www.devopsschool.com/blog/terraform-conditioning-example-program
GLOBAL ARGUMENT == Meta Arugumnets OF each Resources
https://www.devopsschool.com/blog/terraform-tutorials-meta-arguments
https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on
resources
arg1=value
arg2=value
arg3=value
count
for_each
depends_on
implicit
explicit
res1 should exec
if some vars are set or
variable "create_instance" {
description = "If set to true, it will create vm"
type = bool
}
resource "aws_instance" "example-expressor" {
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
count = var.create_instance ? 1 : 0
tags = {
Name = "My EC2 Instance"
}
}
variable "instance_type" {
default = "t2.micro"
}
resource "aws_instance" "example-depends-on" {
ami = "ami-053b0d53c279acc90"
instance_type = var.instance_type
tags = {
Name = "My EC2 Instance"
}
}
resource "aws_s3_bucket" "example_bucket" {
depends_on = [aws_instance.example-depends-on]
bucket = "my-unique-bucket-name-dksjdhsakjdhakjhdkj"
acl = "private"
}
Code language: JavaScript (javascript)
How to loop / iterate in Terraform?
- count
- for_each
https://www.devopsschool.com/blog/how-to-do-looping-iterations-in-terraform/
resource "aws_instance" "example" {
count = 2
ami = "ami-053b0d53c279acc90"
instance_type = "t2.micro"
}
variable "repo-name" {
type = map
default = {
"repo1" = "devops1"
"repo2" = "devops2"
"repo3" = "devops3"
}
}
resource "github_repository" "repogithub" {
for_each = var.repo-name
name = "${each.value}-devopsschool-xyz"
}
each.key
each.value
Code language: JavaScript (javascript)
Provisonar
Provisonar
----------------------------
https://developer.hashicorp.com/terraform/language/resources/provisioners/syntax
<blockquote class="wp-embedded-content" data-secret="h4sWKPPe2s"><a href="https://www.devopsschool.com/blog/terraform-provisioners-tutorials-and-complete-guide/">Terraform provisioners Tutorials and Complete Guide</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Terraform provisioners Tutorials and Complete Guide” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/terraform-provisioners-tutorials-and-complete-guide/embed/#?secret=gvq29J2R50#?secret=h4sWKPPe2s" data-secret="h4sWKPPe2s" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<blockquote class="wp-embedded-content" data-secret="7bQgkxl1z9"><a href="https://www.devopsschool.com/blog/terrafrom-example-code-for-remote-exec-provisioner/">Terrafrom – Example Code for remote-exec, local-exec & file provisioner</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Terrafrom – Example Code for remote-exec, local-exec & file provisioner” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/terrafrom-example-code-for-remote-exec-provisioner/embed/#?secret=fLYHgC33x1#?secret=7bQgkxl1z9" data-secret="7bQgkxl1z9" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
file
remote-exec
local-exec
What is User Data and Custom data?
-------------------------------------
Ansible | Chef | Puppet? -----> Configuring servers
resource "aws_instance" "first-ec2" {
ami = "ami-053b0d53c279acc90" # us-west-2
instance_type = "t2.micro"
key_name = "ansiblesunday"
tags = {
Name = "RajeshKumar"
}
connection {
type = "ssh"
user = "ubuntu"
private_key = file("ansiblesunday.pem")
#host = aws_instance.web.public_ip
host = self.public_ip
}
provisioner "local-exec" {
command = "mkdir devopsschool-local"
}
provisioner "remote-exec" {
inline = [
"sudo apt-get update",
"sudo apt-get install apache2 -y",
"sudo systemctl start apache2",
]
}
provisioner "file" {
source = "providers.tf"
destination = "/tmp/providers.tf"
}
}
Code language: HTML, XML (xml)
Module
===========================================
https://www.devopsschool.com/blog/terraform-modules-tutorials-and-complete-guide/
<blockquote class="wp-embedded-content" data-secret="niPm13lnnO"><a href="https://www.devopsschool.com/blog/terraform-modules-explained/">Terraform Modules explained!!!</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Terraform Modules explained!!!” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/terraform-modules-explained/embed/#?secret=qougfaYxrZ#?secret=niPm13lnnO" data-secret="niPm13lnnO" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<blockquote class="wp-embedded-content" data-secret="m2ur3V0kqQ"><a href="https://www.devopsschool.com/blog/decide-factor-to-write-terraform-module-or-not/">Decide factor to write Terraform Module or not?</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“Decide factor to write Terraform Module or not?” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/decide-factor-to-write-terraform-module-or-not/embed/#?secret=SHrOzMh33i#?secret=m2ur3V0kqQ" data-secret="m2ur3V0kqQ" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<blockquote class="wp-embedded-content" data-secret="l7u31C0faC"><a href="https://www.devopsschool.com/blog/how-to-use-one-modules-variable-in-another-module-in-terraform/">How to use one module’s variable in another module in terraform?</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; visibility: hidden;" title="“How to use one module’s variable in another module in terraform?” — DevOpsSchool.com" src="https://www.devopsschool.com/blog/how-to-use-one-modules-variable-in-another-module-in-terraform/embed/#?secret=o1RC97M7zq#?secret=l7u31C0faC" data-secret="l7u31C0faC" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
Dir
contains
main.tf
mod dir1
mod dir2
1.tf
2.tf
3.tf
tfvars
dir2 = app
1.tf
2.tf
3.tf
tfvars
dir3 == db
1.tf
2.tf
3.tf
tfvars
dir4 == vpc
1.tf
2.tf
3.tf
tfvars
==================================
ROOT MODULE
CHILE MODULE
===============================================
Develop your own Module
Use a Module dev by Someone else ------>
VPC
SUBNET
ROUTET
IGW
NATGW
SECGR
VPN
----------------
learn --> Code -> test -> USE It ENV
===========MAIN.TF=========
module "appserver" {
source = "./db"
}
module "dbserver" {
source = "./app"
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
name = "my-rajesh"
cidr = "10.0.0.0/16"
azs = ["us-east-1a", "us-east-1b", "us-east-1c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]
enable_nat_gateway = false
enable_vpn_gateway = false
tags = {
Terraform = "true"
Environment = "dev"
}
}
Code language: JavaScript (javascript)