# 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