# Infrastructure as Code (IaC) - means to automate the deployment and mgmt of infrastructure such as networks, storage, VMs, and other IT services - reduces effort compared to manual tasks and lends itself to scalability and consistency - files with instructions for infrastructure config - often written in json (javascript object notation) or yaml (YAML aint markup language) - important to use version control like with SW code - common tools - Chef - chef server only runs on UNIX systems; chef client works on UNIX and WIN - master-agent systems - Ruby domain specific language (DSL) - Puppet: OS config mgmt tool for WIN and LINUX - puppet server UNIX only; puppet agent/client UNIX or WIN - master-agent - Ruby, DSL , Puppet DSL cookbooks - Ansible: - leverage SSH and WinRM - ansible server UNIX only; ansible client UNIX or WIN - agentless (master only) - python or YAML playbooks - Terraform (from HashiCorp) - can be used for on-prem or cloud - `terraform -init` to initialize terraform ![[images/terraform-test.png]] - `terraform plan` as a dry run of plans (including terraform-test) - `terraform apply` to run plans (including terraform-test) - creates `test.txt` - AWS cloud formation templates - Azure ARM (azure resource mgr) templates # SW development concepts - CI/CD - continuous delivery: automates build, etsing, and preparion of code but requires manual deployment to production - continuous deployment: automates build, testing, preparation, and deployment of code - Jenkins is an OS automation server (written in Java) that automates CI/CD and supports version control tools such as Git - waterfall model - spiral model - agile model - fits best with CI/CD