terraform create subnet in each az


Then use the variable concept. Terraform has one keywordnamed route. When building basic AWS network infrastructure for your application, many a times you need to create public and private subnets in each availability zone depending upon number of availability zones in the region. Academic theme for If youre not using all four, remove it from the mapping. subnets vnet terraform Join Edureka Meetup community for 100+ Free Webinars each month. Ideally, the ALB would have a network mapping in each availability zone for fault tolerance. (26) - NGINX SSL/TLS, Caching, and Session, Quick Preview - Setting up web servers with Nginx, configure environments, and deploy an App, Ansible: Playbook for Tomcat 9 on Ubuntu 18.04 systemd with AWS, AWS : Creating an ec2 instance & adding keys to authorized_keys, AWS : creating an ELB & registers an EC2 instance from the ELB, Deploying Wordpress micro-services with Docker containers on Vagrant box via Ansible, Configuration - Manage Jenkins - security setup, Git/GitHub plugins, SSH keys configuration, and Fork/Clone, Build configuration for GitHub Java application with Maven, Build Action for GitHub Java application with Maven - Console Output, Updating Maven, Commit to changes to GitHub & new test results - Build Failure, Commit to changes to GitHub & new test results - Successful Build, Jenkins on EC2 - creating an EC2 account, ssh to EC2, and install Apache server, Jenkins on EC2 - setting up Jenkins account, plugins, and Configure System (JAVA_HOME, MAVEN_HOME, notification email), Jenkins on EC2 - Creating a Maven project, Jenkins on EC2 - Configuring GitHub Hook and Notification service to Jenkins server for any changes to the repository, Jenkins on EC2 - Line Coverage with JaCoCo plugin, Jenkins Build Pipeline & Dependency Graph Plugins, Pipeline Jenkinsfile with Classic / Blue Ocean, Puppet with Amazon AWS I - Puppet accounts, Puppet with Amazon AWS II (ssh & puppetmaster/puppet install), Puppet with Amazon AWS III - Puppet running Hello World, Puppet with Amazon AWS on CentOS 7 (I) - Master setup on EC2, Puppet with Amazon AWS on CentOS 7 (II) - Configuring a Puppet Master Server with Passenger and Apache, Puppet master /agent ubuntu 14.04 install on EC2 nodes. Hugo. vpc endpoint terraform creating using creation bucket However, this provides one approach to solving the problem if that isnt an option. Hopefully this solution will help others in a similar position who need to filter the raw output of a data source so that it is more easily consumed by another resource. There are arguably better ways to architect this, such as adding a unique tag to only one subnet in an AZ. I ran this terraform in Mumai region and I got my vpc and subnets created in this region. The route tables associated with our public subnet (including custom route tables) must have a route to the internet gateway. READ MORE, Hi, I think it makes it very clear what is going on with the infrastructure, and is fairly manageable. Ill also be updating my AWS Openshift module to use this pattern. We can assign CIDR to our VPC and Subnets, In availability zone, we provided the value from the starting index of. You should either supply one NAT Gateway ID for each AZ in `var.availability_zones` or leave the map empty. Design: Web Master, Introduction to Terraform with AWS elb & nginx, Terraform Tutorial - terraform format(tf) and interpolation(variables), Terraform Tutorial - creating multiple instances (count, list type and element() function), Terraform 12 Tutorial - Loops with count, for_each, and for, Terraform Tutorial - State (terraform.tfstate) & terraform import, Terraform Tutorial - Creating AWS S3 bucket / SQS queue resources and notifying bucket event to queue, Terraform Tutorial - VPC, Subnets, RouteTable, ELB, Security Group, and Apache server I, Terraform Tutorial - VPC, Subnets, RouteTable, ELB, Security Group, and Apache server II, Terraform Tutorial - Docker nginx container with ALB and dynamic autoscaling, Terraform Tutorial - AWS ECS using Fargate : Part I, HashiCorp Vault and Consul on AWS with Terraform, AWS IAM user, group, role, and policies - part 1, AWS IAM user, group, role, and policies - part 2, Delegate Access Across AWS Accounts Using IAM Roles, Samples of Continuous Integration (CI) / Continuous Delivery (CD) - Use cases, Artifact repository and repository management. How to create one key in AWS using terraform? ca-central-1 (Canada Central) - 2 availability zones, hence 6 subnets us-west-2 (Oregon) - 4 availability zones, forcing maximum of 6 subnets (2 per type of subnet) In total, we will have six subnets in our VPC (not including the default one that comes with the VPC). You can find the script in the READ MORE, Hi@akhtar, So, we may want to run terraform init in the newly created directory to get proper plugins. First, we can easily build a variable number of subnets by using the count field on the aws_subnet resource: By using the Terraform Interpolation Syntax, and in particular the count, keys, values and element functions, we can grab the subnet name and CIDR block from the variables. If you wish the number of subnets to be similar across all environments (and regions) - keep on reading. Since we use local values, we only need to change the variables.tf file, no need to touch vpc.tf file. And of course, we only need to change the variables.tf file. This trick provides granularity to manage local.var_name. The resulting data structure is a list of subnet IDs, one per AZ: This is now in a format that can be passed as a list of subnets to other resources, such as the aws_lb that I was originally trying to create. To view or add a comment, sign in, This is an informative article. We also did it with the subnets, why oh why?. Terraforms for loop reminds me of Pythons list comprehension, which means - create a new list with a for loop. cidr_ab to the rescue! An internet gateway must be attached to the VPC. Did you like this tutorial? Note: Please create bucket before passing to this command in same region. Dynamically populating sounds like a loop, and in Terraform we got the for loop. Luckily the for loop has a built-in keyword if, which still reminds me of Pythons list comprehension :), Syntax of for loop with condition: [for item in list: do_something_on(item) if expression]. One question which may be raised is why I am not using the cidrsubnet function to automatically calculate the CIDR blocks for the subnets. When you run your Terraform code it will use your AWS profile to authenticate with AWS. After someday another client asking me to deploy on the Oregon region. Rule of thumb - We need the lowest common number of availability zones that are available in all the regions we intend to use. Map of AZ names to NAT Gateway IDs that are used as default routes when creating private subnets. I want to get information from the terminal, Hi@akhtar, I was using the Terraform VPC module to create a new VPC with public and private subnets. It will automatically count the azs and create subnets for you. It allows READ MORE, Hi@akhtar, Below is my Terraform template. I am going with very simplest approach defining all components in different files which is easy to differentiate and easy to understand. Now we will define file vpc.tf which will contain a vpc and public and private subnets. For example: If all the regions that youre using have the same amount of availability zones - then the above solution is perfect.

Update - 17-Oct-2019 changelog: Terraform released a new function named cidrsubnets, this function creates a list of cidr-subnets. Lets start with provider first, as it is specific to aws, we will define our provider as aws. https://github.com/maneet8/subnetperazterraform. After a bit of experimentation Ive come up with a solution which I think really works nicely. To create a local list private_subnets with the relevant cidr_ab per environment, use the following: Reminder: To concatenate an expression and text: ${expression} my text. Privacy: Your email address will only be used for sending these notifications. Hardcoding subnets per environment can be a significant overhead. A subnet pattern (prefix) is: a.b.c.d/xx , so this will cover the a.b part of all subnets per environment. So, for this Purpose you can use terraform and its property of count to create subnet per availability zone. Thats really all there is to it. In my case, these subnets were provisioned with the VPC module, but that isnt relevant to the problem: the VPC and subnets could be provisioned in any manner. Click here to know about the data_source_of_availability_zone, Now create tf file for creating VPC and Subnets resources-. Note: Use AWS Global Infrastructure to find out the number of availability zones per region. Email me at this address if a comment is added after mine: Email me if a comment is added after mine. When building Terraform modules, it is a common requirement to want to allow the client to be able to choose which region resources are created in, and which availability zones are used. We will now initialize three more variables, subnet_max per subnet. How to add a route for IGW in AWS using Terraform code? Well done . So two variables changed here one is subnet and another one in AZ. "PMP","PMI", "PMI-ACP" and "PMBOK" are registered marks of the Project Management Institute, Inc. You can see a sample Terraform module which uses this pattern at: github.com/dwmkerr/terraform-aws-vpc-example. If anyone has a better solution to this problem, then please get in touch! The aws_subnets data source supports the use of advanced filters that correspond to the underlying AWS API. This solution avoids having to know in advance how many availability zones well support. Worst case scenario - weve used a local value even though we havent manipulated it. We define the required variables very explicitly, with descriptions and a variable type to avoid confusion: Now that we have defined the variables, we can set up the VPC: There are a few things of interest here. Articles on the craft of software development.

Interest in Technical stuff, Photography and Driving. Learn on the go with our new app. Up to this point, we've been working under a folder (terraform), however, we'll make a new folder (terraform/VPC-LoadBalancer). Git management technique when there are multiple customers and need multiple customization? By cloning you can just directly run the project by just passing region and bucket name to run.bash. Previous article: How to customize your Ansible logs, Obtain a list of all subnets in each availability zone for a given VPC, Filter those subnets such that there is only one per availability zone, Ensure that created resources ignore changes to the provided subnets, as the ordering is non-determinstic, Obtain a list of all availabilty zones using the, It must be in the availabilty zone being processed in the current loop iteration. Sponsor Open Source development activities and free contents for everyone. Unfortunately, thats not true when it comes to ca-central-1 (Canada Central) which has only two availability zones. Learn more about bidirectional Unicode characters. And then you can run this with below command. NAT gateway for the private subnet and IGW for the public subnet. BogoToBogo Whenever we decide to deploy on the Virginia region, then it will assign to region and AZ terraform code. You need to set aws provider name READ MORE, Hey @nmentityvibes, you seem to be using READ MORE, It can work if you try toput READ MORE, Consider this - In 'extended' Git-Flow, (Git-Multi-Flow, READ MORE, When you use docker-compose down, all the READ MORE, Hi@akhtar, This is useful, but I am only interested in the ids list within these maps, and I only want one element from each. You can get this code on github. To demonstrate, Ive set up a module which deploys a cluster of web servers. The reason is purely one of preference - I prefer to explicitly specify the CIDR blocks and use various patterns to set conventions. It created 3 private and 3 public subnets in each availability zone. My next article will be about Terraform Cloud and Terraforms Workspaces. If you want to have a set of subnets per availability zone, without caring for how many subnets are created per region, you can stop here. ), File sharing between host and container (docker run -d -p -v), Linking containers and volume for datastore, Dockerfile - Build Docker images automatically I - FROM, MAINTAINER, and build context, Dockerfile - Build Docker images automatically II - revisiting FROM, MAINTAINER, build context, and caching, Dockerfile - Build Docker images automatically III - RUN, Dockerfile - Build Docker images automatically IV - CMD, Dockerfile - Build Docker images automatically V - WORKDIR, ENV, ADD, and ENTRYPOINT, Docker - Prometheus and Grafana with Docker-compose, Docker - Deploying a Java EE JBoss/WildFly Application on AWS Elastic Beanstalk Using Docker Containers, Docker : NodeJS with GCP Kubernetes Engine, Docker : Jenkins Multibranch Pipeline with Jenkinsfile and Github, Docker - ELK : ElasticSearch, Logstash, and Kibana, Docker - ELK 7.6 : Elasticsearch on Centos 7, Docker - ELK 7.6 : Kibana on Centos 7 Part 1, Docker - ELK 7.6 : Kibana on Centos 7 Part 2, Docker - ELK 7.6 : Elastic Stack with Docker Compose, Docker - Deploy Elastic Cloud on Kubernetes (ECK) via Elasticsearch operator on minikube, Docker - Deploy Elastic Stack via Helm on minikube, Docker Compose - A gentle introduction with WordPress, MEAN Stack app on Docker containers : micro services, Docker Compose - Hashicorp's Vault and Consul Part A (install vault, unsealing, static secrets, and policies), Docker Compose - Hashicorp's Vault and Consul Part B (EaaS, dynamic secrets, leases, and revocation), Docker Compose - Hashicorp's Vault and Consul Part C (Consul), Docker Compose with two containers - Flask REST API service container and an Apache server container, Docker compose : Nginx reverse proxy with multiple containers, Docker & Kubernetes : Envoy - Getting started, Docker & Kubernetes : Envoy - Front Proxy, Docker & Kubernetes : Ambassador - Envoy API Gateway on Kubernetes, Docker - Run a React app in a docker II (snapshot app with nginx), Docker - NodeJS and MySQL app with React in a docker, Docker - Step by Step NodeJS and MySQL app with React - I, Apache Hadoop CDH 5.8 Install with QuickStarts Docker, Docker Compose - Deploying WordPress to AWS, Docker - WordPress Deploy to ECS with Docker-Compose (ECS-CLI EC2 type), Docker - AWS ECS service discovery with Flask and Redis, Docker & Kubernetes 2 : minikube Django with Postgres - persistent volume, Docker & Kubernetes 3 : minikube Django with Redis and Celery, Docker & Kubernetes 4 : Django with RDS via AWS Kops, Docker & Kubernetes : Ingress controller on AWS with Kops, Docker & Kubernetes : HashiCorp's Vault and Consul on minikube, Docker & Kubernetes : HashiCorp's Vault and Consul - Auto-unseal using Transit Secrets Engine, Docker & Kubernetes : Persistent Volumes & Persistent Volumes Claims - hostPath and annotations, Docker & Kubernetes : Persistent Volumes - Dynamic volume provisioning, Docker & Kubernetes : Assign a Kubernetes Pod to a particular node in a Kubernetes cluster, Docker & Kubernetes : Configure a Pod to Use a ConfigMap, Docker & Kubernetes : Run a React app in a minikube, Docker & Kubernetes : Minikube install on AWS EC2, Docker & Kubernetes : Cassandra with a StatefulSet, Docker & Kubernetes : Terraform and AWS EKS, Docker & Kubernetes : Pods and Service definitions, Docker & Kubernetes : Headless service and discovering pods, Docker & Kubernetes : Service IP and the Service Type, Docker & Kubernetes : Kubernetes DNS with Pods and Services, Docker & Kubernetes - Scaling and Updating application, Docker & Kubernetes : Horizontal pod autoscaler on minikubes, Docker & Kubernetes : NodePort vs LoadBalancer vs Ingress, Docker & Kubernetes : Load Testing with Locust on GCP Kubernetes, Docker & Kubernetes : From a monolithic app to micro services on GCP Kubernetes, Docker & Kubernetes : Deployments to GKE (Rolling update, Canary and Blue-green deployments), Docker & Kubernetes : Slack Chat Bot with NodeJS on GCP Kubernetes, Docker & Kubernetes : Continuous Delivery with Jenkins Multibranch Pipeline for Dev, Canary, and Production Environments on GCP Kubernetes, Docker & Kubernetes - MongoDB with StatefulSets on GCP Kubernetes Engine, Docker & Kubernetes : Nginx Ingress Controller on minikube, Docker & Kubernetes : Nginx Ingress Controller for Dashboard service on Minikube, Docker & Kubernetes : Nginx Ingress Controller on GCP Kubernetes, Docker & Kubernetes : Kubernetes Ingress with AWS ALB Ingress Controller in EKS, Docker & Kubernetes : MongoDB / MongoExpress on Minikube, Docker & Kubernetes : Setting up a private cluster on GCP Kubernetes, Docker & Kubernetes : Kubernetes Namespaces (default, kube-public, kube-system) and switching namespaces (kubens), Docker & Kubernetes : StatefulSets on minikube, Docker & Kubernetes Service Account, RBAC, and IAM, Docker & Kubernetes - Kubernetes Service Account, RBAC, IAM with EKS ALB, Part 1, Docker & Kubernetes : My first Helm deploy, Docker & Kubernetes : Readiness and Liveness Probes, Docker & Kubernetes : Helm chart repository with Github pages, Docker & Kubernetes : Deploying WordPress and MariaDB with Ingress to Minikube using Helm Chart, Docker & Kubernetes : Deploying WordPress and MariaDB to AWS using Helm 2 Chart, Docker & Kubernetes : Deploying WordPress and MariaDB to AWS using Helm 3 Chart, Docker & Kubernetes : Helm Chart for Node/Express and MySQL with Ingress, Docker & Kubernetes : Docker_Helm_Chart_Node_Expess_MySQL_Ingress.php, Docker & Kubernetes: Deploy Prometheus and Grafana using Helm and Prometheus Operator - Monitoring Kubernetes node resources out of the box, Docker & Kubernetes : Istio (service mesh) sidecar proxy on GCP Kubernetes, Docker & Kubernetes : Deploying .NET Core app to Kubernetes Engine and configuring its traffic managed by Istio (Part I), Docker & Kubernetes : Deploying .NET Core app to Kubernetes Engine and configuring its traffic managed by Istio (Part II - Prometheus, Grafana, pin a service, split traffic, and inject faults), Docker & Kubernetes : Helm Package Manager with MySQL on GCP Kubernetes Engine, Docker & Kubernetes : Deploying Memcached on Kubernetes Engine, Docker & Kubernetes : EKS Control Plane (API server) Metrics with Prometheus, Docker & Kubernetes : Spinnaker on EKS with Halyard, Docker & Kubernetes : Continuous Delivery Pipelines with Spinnaker and Kubernetes Engine, Docker & Kubernetes: Multi-node Local Kubernetes cluster - Kubeadm-dind(docker-in-docker), Docker & Kubernetes: Multi-node Local Kubernetes cluster - Kubeadm-kind(k8s-in-docker), Docker & Kubernetes : nodeSelector, nodeAffinity, taints/tolerations, pod affinity and anti-affinity - Assigning Pods to Nodes, Docker & Kubernetes : ArgoCD App of Apps with Heml on Kubernetes, Docker & Kubernetes : ArgoCD on Kubernetes cluster, Elasticsearch with Redis broker and Logstash Shipper and Indexer, VirtualBox & Vagrant install on Ubuntu 14.04, Hadoop 2.6 - Installing on Ubuntu 14.04 (Single-Node Cluster), Hadoop 2.6.5 - Installing on Ubuntu 16.04 (Single-Node Cluster), CDH5.3 Install on four EC2 instances (1 Name node and 3 Datanodes) using Cloudera Manager 5, QuickStart VMs for CDH 5.3 II - Testing with wordcount, QuickStart VMs for CDH 5.3 II - Hive DB query, Zookeeper & Kafka - single node single broker, Zookeeper & Kafka - Single node and multiple brokers, Apache Hadoop Tutorial I with CDH - Overview, Apache Hadoop Tutorial II with CDH - MapReduce Word Count, Apache Hadoop Tutorial III with CDH - MapReduce Word Count 2, Apache Hive 2.1.0 install on Ubuntu 16.04, Creating HBase table with HBase shell and HUE, Apache Hadoop : Hue 3.11 install on Ubuntu 16.04, HBase - Map, Persistent, Sparse, Sorted, Distributed and Multidimensional, Flume with CDH5: a single-node Flume deployment (telnet example), Apache Hadoop (CDH 5) Flume with VirtualBox : syslog example via NettyAvroRpcClient, Apache Hadoop : Creating Wordcount Java Project with Eclipse Part 1, Apache Hadoop : Creating Wordcount Java Project with Eclipse Part 2, Apache Hadoop : Creating Card Java Project with Eclipse using Cloudera VM UnoExample for CDH5 - local run, Apache Hadoop : Creating Wordcount Maven Project with Eclipse, Wordcount MapReduce with Oozie workflow with Hue browser - CDH 5.3 Hadoop cluster using VirtualBox and QuickStart VM, Spark 1.2 using VirtualBox and QuickStart VM - wordcount, Spark Programming Model : Resilient Distributed Dataset (RDD) with CDH, Apache Spark 2.0.2 with PySpark (Spark Python API) Shell, Apache Spark 2.0.2 tutorial with PySpark : RDD, Apache Spark 2.0.0 tutorial with PySpark : Analyzing Neuroimaging Data with Thunder, Apache Spark Streaming with Kafka and Cassandra, Apache Spark 1.2 with PySpark (Spark Python API) Wordcount using CDH5, Apache Drill with ZooKeeper install on Ubuntu 16.04 - Embedded & Distributed, Apache Drill - Query File System, JSON, and Parquet, Setting up multiple server instances on a Linux host, ELK : Elasticsearch with Redis broker and Logstash Shipper and Indexer, GCP: Deploying a containerized web application via Kubernetes, GCP: Django Deploy via Kubernetes I (local), GCP: Django Deploy via Kubernetes II (GKE), AWS : Creating a snapshot (cloning an image), AWS : Attaching Amazon EBS volume to an instance, AWS : Adding swap space to an attached volume via mkswap and swapon, AWS : Creating an EC2 instance and attaching Amazon EBS volume to the instance using Python boto module with User data, AWS : Creating an instance to a new region by copying an AMI, AWS : S3 (Simple Storage Service) 2 - Creating and Deleting a Bucket, AWS : S3 (Simple Storage Service) 3 - Bucket Versioning, AWS : S3 (Simple Storage Service) 4 - Uploading a large file, AWS : S3 (Simple Storage Service) 5 - Uploading folders/files recursively, AWS : S3 (Simple Storage Service) 6 - Bucket Policy for File/Folder View/Download, AWS : S3 (Simple Storage Service) 7 - How to Copy or Move Objects from one region to another, AWS : S3 (Simple Storage Service) 8 - Archiving S3 Data to Glacier, AWS : Creating a CloudFront distribution with an Amazon S3 origin, WAF (Web Application Firewall) with preconfigured CloudFormation template and Web ACL for CloudFront distribution, AWS : CloudWatch & Logs with Lambda Function / S3, AWS : Lambda Serverless Computing with EC2, CloudWatch Alarm, SNS, AWS : ECS with cloudformation and json task definition, AWS : AWS Application Load Balancer (ALB) and ECS with Flask app, AWS : Load Balancing with HAProxy (High Availability Proxy), AWS : AWS & OpenSSL : Creating / Installing a Server SSL Certificate, AWS : VPC (Virtual Private Cloud) 1 - netmask, subnets, default gateway, and CIDR, AWS : VPC (Virtual Private Cloud) 2 - VPC Wizard, AWS : VPC (Virtual Private Cloud) 3 - VPC Wizard with NAT, AWS : DevOps / Sys Admin Q & A (VI) - AWS VPC setup (public/private subnets with NAT), AWS : OpenVPN Protocols : PPTP, L2TP/IPsec, and OpenVPN, AWS : Setting up Autoscaling Alarms and Notifications via CLI and Cloudformation, AWS : Adding a SSH User Account on Linux Instance, AWS : Windows Servers - Remote Desktop Connections using RDP, AWS : Scheduled stopping and starting an instance - python & cron, AWS : Detecting stopped instance and sending an alert email using Mandrill smtp, AWS : Elastic Beanstalk Inplace/Rolling Blue/Green Deploy, AWS : Identity and Access Management (IAM) Roles for Amazon EC2, AWS : Identity and Access Management (IAM) Policies, sts AssumeRole, and delegate access across AWS accounts, AWS : Identity and Access Management (IAM) sts assume role via aws cli2, AWS : Creating IAM Roles and associating them with EC2 Instances in CloudFormation, AWS Identity and Access Management (IAM) Roles, SSO(Single Sign On), SAML(Security Assertion Markup Language), IdP(identity provider), STS(Security Token Service), and ADFS(Active Directory Federation Services), AWS : Amazon Route 53 - DNS (Domain Name Server) setup, AWS : Amazon Route 53 - subdomain setup and virtual host on Nginx, AWS Amazon Route 53 : Private Hosted Zone, AWS : SNS (Simple Notification Service) example with ELB and CloudWatch, AWS : SQS (Simple Queue Service) with NodeJS and AWS SDK, AWS : CloudFormation - templates, change sets, and CLI, AWS : CloudFormation Bootstrap UserData/Metadata, AWS : CloudFormation - Creating an ASG with rolling update, AWS : Cloudformation Cross-stack reference, AWS : Network Load Balancer (NLB) with Autoscaling group (ASG), AWS CodeDeploy : Deploy an Application from GitHub, AWS Node.js Lambda Function & API Gateway, AWS API Gateway endpoint invoking Lambda function, AWS API Gateway invoking Lambda function with Terraform, AWS API Gateway invoking Lambda function with Terraform - Lambda Container, Kinesis Data Firehose with Lambda and ElasticSearch, Amazon DynamoDB with Lambda and CloudWatch, Loading DynamoDB stream to AWS Elasticsearch service with Lambda, AWS : RDS Connecting to a DB Instance Running the SQL Server Database Engine, AWS : RDS Importing and Exporting SQL Server Data, AWS : RDS PostgreSQL 2 - Creating/Deleting a Table, AWS RDS : Cross-Region Read Replicas for MySQL and Snapshots for PostgreSQL, AWS : Restoring Postgres on EC2 instance from S3 backup, How to Enable Multiple RDP Sessions in Windows 2012 Server, How to install and configure FTP server on IIS 8 in Windows 2012 Server, How to Run Exe as a Service on Windows 2012 Server, One page express tutorial for GIT and GitHub, Undoing Things : File Checkout & Unstaging, Soft Reset - (git reset --soft ), Hard Reset - (git reset --hard ), GIT on Ubuntu and OS X - Focused on Branching, Setting up a remote repository / pushing local project and cloning the remote repo, Git/GitHub via SourceTree II : Branching & Merging, Git/GitHub via SourceTree III : Git Work Flow.