Skip to content

Rewrite atmos in Go#56

Merged
aknysh merged 19 commits intomasterfrom
main-go
Sep 28, 2021
Merged

Rewrite atmos in Go#56
aknysh merged 19 commits intomasterfrom
main-go

Conversation

@aknysh
Copy link
Member

@aknysh aknysh commented Sep 24, 2021

what

  • Rewrite atmos in Go
  • Add more generic CLI config in YAML
  • Allow running CLI commands from any folder
  • Allow using stack folders (add examples of this)
  • Allow using component folders (add examples of this)
  • Improve examples
  • Build atmos binary for all operating systems and architectures

why

  • Go is a general purpose language and it's better suited for long-time maintenance of the CLI
  • Component and stack folders will allow to better organize the project and config structures
  • Add examples that can be run and tested without any additional steps

GoReleaser

image

commands to test the example

go run atmos version
go run atmos terraform plan test/test-component-override -s tenant1/ue2/dev
go run atmos terraform plan test/test-component-override -s=tenant1-ue2-dev
go run atmos terraform plan test/test-component-override -s tenant1/ue2/dev --stacks-dir=./examples/complete/stacks
go run atmos terraform validate test/test-component-override -s tenant1/ue2/dev
go run atmos terraform output test/test-component-override -s tenant1/ue2/dev
go run atmos terraform graph test/test-component-override -s tenant1/ue2/dev
go run atmos terraform show test/test-component-override -s tenant1/ue2/dev
go run atmos helmfile diff infra/infra-server -s tenant1/ue2/dev
go run atmos --config-dir ./examples/complete/stacks --terraform-dir ./examples/complete/components/terraform terraform workspace test/test-component-override --stack=tenant1/ue2/dev
go run atmos --config-dir=./examples/complete/stacks --terraform-dir=./examples/complete/components/terraform terraform workspace test/test-component-override --stack tenant1/ue2/dev
go run atmos terraform workspace test/test-component-override --stack=tenant1/ue2/dev --config-dir ./examples/complete/stacks --terraform-dir ./examples/complete/components/terraform
go run atmos terraform varfile test/test-component-override -s tenant1/ue2/dev
go run atmos terraform varfile test/test-component-override -s tenant1/ue2/dev -f ./varfile.json
go run atmos --config-dir ./examples/complete/stacks --terraform-dir ./examples/complete/components/terraform terraform write varfile test/test-component-override --stack=tenant1/ue2/dev
go run atmos terraform write varfile test/test-component-override --stack=tenant1/ue2/dev --config-dir ./examples/complete/stacks --terraform-dir ./examples/complete/components/terraform 
go run atmos --config-dir ./examples/complete/stacks terraform write varfile test/test-component-override --stack=tenant1/ue2/dev --terraform-dir ./examples/complete/components/terraform 
go run atmos describe component test/test-component-override -s tenant1/ue2/dev
go run atmos describe component test/test-component-override -s tenant1-ue2-dev
go run atmos describe component infra/infra-server -s tenant1/ue2/dev
go run atmos describe component infra/infra-server -s tenant1-ue2-dev

test

atmos terraform plan test/test-component -s tenant1/ue2/dev


Processing and merging configurations in the following order: system dir, home dir, current dir, ENV vars
No config found in /usr/local/etc/atmos/atmos.yaml
No config found in /Users/andriyknysh/.atmos/atmos.yaml
Found config in /Users/andriyknysh/Documents/Projects/Go/src/github.com/cloudposse/atmos/atmos.yaml
Processed config /Users/andriyknysh/Documents/Projects/Go/src/github.com/cloudposse/atmos/atmos.yaml

Stack 'tenant1/ue2/dev' is a directory, it matches the stack config file tenant1/ue2/dev.yaml

Final CLI configuration:
components:
  terraform:
    base_path: ./examples/complete/components/terraform
    apply_auto_approve: false
  helmfile:
    base_path: ./examples/complete/components/helmfile
    kubeconfig_path: /dev/shm
    helm_aws_profile_pattern: '{namespace}-{tenant}-gbl-{stage}-helm'
    cluster_name_pattern: '{namespace}-{tenant}-{environment}-{stage}-eks-cluster'
stacks:
  base_path: ./examples/complete/stacks
  included_paths:
  - '**/*'
  excluded_paths:
  - globals/**/*
  - catalog/**/*
  - '**/*globals*'
  name_pattern: '{tenant}-{environment}-{stage}'


Found the config file for the provided stack:
- tenant1/ue2/dev.yaml

Variables for component 'test/test-component' in stack 'tenant1/ue2/dev':
enabled: true
environment: ue2
namespace: eg
region: us-east-2
service_1_name: service-1
service_2_name: service-2
stage: dev
tenant: tenant1

Writing variables to file:
./examples/complete/components/terraform/test/test-component/tenant1-ue2-dev-test-component.terraform.tfvars.json

Command info:
Terraform binary: terraform
Terraform command: plan
Arguments and flags: []
Component: test/test-component
Stack: tenant1/ue2/dev
Working dir: ./examples/complete/components/terraform/test-component


Executing command:
/usr/local/bin/terraform init

Initializing modules...

Initializing the backend...

Initializing provider plugins...

Terraform has been successfully initialized!

Executing command:
/usr/local/bin/terraform workspace select tenant1-ue2-dev


Executing command:
/usr/local/bin/terraform plan -var-file tenant1-ue2-dev-test-component.terraform.tfvars.json -out tenant1-ue2-dev-test-component.planfile


Changes to Outputs:
  + service_1_id = "eg-ue2-dev-service-1"
  + service_2_id = "eg-ue2-dev-service-2"

aknysh and others added 7 commits September 24, 2021 17:45
* Refactor to use `Go`

* Refactor to use `Go`. Add `cobra` commands

* Refactor to use `Go`. Add `cobra` commands

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Updates

* Component folders (#52)

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Add component folders

* Update GoReleaser
@aknysh aknysh self-assigned this Sep 24, 2021
@aknysh aknysh requested review from a team as code owners September 24, 2021 23:42
@aknysh aknysh requested review from Makeshift and brcnblc September 24, 2021 23:42
@aknysh aknysh requested a review from osterman September 27, 2021 21:18
@aknysh aknysh merged commit a4ef3eb into master Sep 28, 2021
@aknysh aknysh deleted the main-go branch September 28, 2021 21:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants