ufo 5.0.7 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.cody/README.md +19 -0
- data/.cody/acceptance/bin/build.sh +90 -0
- data/.cody/acceptance/buildspec.yml +10 -0
- data/.cody/acceptance/project.rb +11 -0
- data/.cody/acceptance/role.rb +28 -0
- data/.cody/shared/script/install/ufo.sh +40 -0
- data/.cody/shared/script/install.sh +5 -0
- data/.github/workflows/main.yml +28 -0
- data/CHANGELOG.md +4 -1
- data/Gemfile +0 -2
- data/README.md +1 -32
- data/lib/templates/docker/Dockerfile +4 -0
- data/lib/templates/helper/%underscore_name%_helper.rb.tt +6 -0
- data/lib/templates/init/.ufo/config/web/base.rb +6 -0
- data/lib/templates/init/.ufo/config/web/dev.rb +6 -0
- data/lib/templates/init/.ufo/config/web/prod.rb +6 -0
- data/lib/templates/init/.ufo/config.rb.tt +39 -0
- data/lib/templates/init/.ufo/resources/iam_roles/execution_role.rb +23 -0
- data/lib/templates/init/.ufo/resources/iam_roles/task_role.rb +20 -0
- data/lib/templates/init/.ufo/resources/task_definitions/web.yml +29 -0
- data/lib/templates/init/.ufo/vars/base.rb +20 -0
- data/lib/templates/init/.ufo/vars/dev.rb +4 -0
- data/lib/templates/init/.ufo/vars/prod.rb +4 -0
- data/lib/ufo/aws_services.rb +118 -0
- data/lib/ufo/booter.rb +27 -0
- data/lib/ufo/cfn/base.rb +7 -0
- data/lib/ufo/cfn/deploy.rb +54 -0
- data/lib/ufo/{stack → cfn/stack}/builder/base.rb +12 -23
- data/lib/ufo/cfn/stack/builder/conditions.rb +25 -0
- data/lib/ufo/{stack → cfn/stack}/builder/outputs.rb +2 -2
- data/lib/ufo/cfn/stack/builder/parameters.rb +34 -0
- data/lib/ufo/cfn/stack/builder/resources/base.rb +4 -0
- data/lib/ufo/cfn/stack/builder/resources/dns.rb +47 -0
- data/lib/ufo/{stack/builder/resources/ecs.rb → cfn/stack/builder/resources/ecs_service.rb} +11 -10
- data/lib/ufo/cfn/stack/builder/resources/elb.rb +35 -0
- data/lib/ufo/cfn/stack/builder/resources/iam_roles/base.rb +32 -0
- data/lib/ufo/cfn/stack/builder/resources/iam_roles/execution_role.rb +4 -0
- data/lib/ufo/cfn/stack/builder/resources/iam_roles/task_role.rb +4 -0
- data/lib/ufo/cfn/stack/builder/resources/listener.rb +65 -0
- data/lib/ufo/cfn/stack/builder/resources/listener_ssl.rb +44 -0
- data/lib/ufo/cfn/stack/builder/resources/scaling/base.rb +5 -0
- data/lib/ufo/cfn/stack/builder/resources/scaling/policy.rb +27 -0
- data/lib/ufo/cfn/stack/builder/resources/scaling/role.rb +33 -0
- data/lib/ufo/cfn/stack/builder/resources/scaling/target.rb +22 -0
- data/lib/ufo/cfn/stack/builder/resources/security_group/base.rb +4 -0
- data/lib/ufo/{stack → cfn/stack}/builder/resources/security_group/ecs.rb +4 -4
- data/lib/ufo/{stack → cfn/stack}/builder/resources/security_group/ecs_rule.rb +2 -2
- data/lib/ufo/{stack → cfn/stack}/builder/resources/security_group/elb.rb +5 -6
- data/lib/ufo/{stack → cfn/stack}/builder/resources/target_group.rb +4 -4
- data/lib/ufo/{stack → cfn/stack}/builder/resources/task_definition/reconstructor.rb +4 -4
- data/lib/ufo/{stack → cfn/stack}/builder/resources/task_definition.rb +4 -4
- data/lib/ufo/cfn/stack/builder/resources.rb +24 -0
- data/lib/ufo/cfn/stack/builder.rb +30 -0
- data/lib/ufo/{stack → cfn/stack}/custom_properties.rb +21 -5
- data/lib/ufo/cfn/stack/params.rb +51 -0
- data/lib/ufo/{stack → cfn/stack}/status.rb +2 -2
- data/lib/ufo/cfn/stack/template.rb +8 -0
- data/lib/ufo/cfn/stack/vars.rb +110 -0
- data/lib/ufo/cfn/stack/vpc.rb +31 -0
- data/lib/ufo/cfn/stack.rb +175 -0
- data/lib/ufo/cli/base.rb +18 -0
- data/lib/ufo/cli/build.rb +30 -0
- data/lib/ufo/cli/cancel.rb +18 -0
- data/lib/ufo/cli/central/update.rb +80 -0
- data/lib/ufo/cli/central.rb +12 -0
- data/lib/ufo/cli/clean.rb +17 -0
- data/lib/ufo/cli/destroy.rb +31 -0
- data/lib/ufo/{docker.rb → cli/docker.rb} +18 -18
- data/lib/ufo/cli/exec.rb +82 -0
- data/lib/ufo/cli/help/central/update.md +20 -0
- data/lib/ufo/{help → cli/help}/completion.md +0 -0
- data/lib/ufo/{help → cli/help}/completion_script.md +0 -0
- data/lib/ufo/cli/help/destroy.md +9 -0
- data/lib/ufo/cli/help/docker/base.md +39 -0
- data/lib/ufo/{help → cli/help}/docker/build.md +9 -9
- data/lib/ufo/{help → cli/help}/docker/clean.md +8 -8
- data/lib/ufo/{help → cli/help}/docker/compile.md +0 -0
- data/lib/ufo/cli/help/docker/name.md +16 -0
- data/lib/ufo/{help → cli/help}/docker/push.md +0 -0
- data/lib/ufo/cli/help/docker.md +6 -0
- data/lib/ufo/{help → cli/help}/help.md +1 -1
- data/lib/ufo/cli/help/init.md +27 -0
- data/lib/ufo/{help → cli/help}/logs.md +5 -4
- data/lib/ufo/cli/help/ps.md +12 -0
- data/lib/ufo/cli/help/releases.md +15 -0
- data/lib/ufo/cli/help/rollback.md +40 -0
- data/lib/ufo/cli/help/scale.md +7 -0
- data/lib/ufo/cli/help/ship.md +41 -0
- data/lib/ufo/cli/help/stop.md +3 -0
- data/lib/ufo/cli/help.rb +62 -0
- data/lib/ufo/{logs.rb → cli/logs.rb} +13 -6
- data/lib/ufo/cli/new/concerns.rb +16 -0
- data/lib/ufo/cli/new/helper.rb +24 -0
- data/lib/ufo/cli/new/init.rb +68 -0
- data/lib/ufo/{sequence.rb → cli/new/sequence.rb} +26 -4
- data/lib/ufo/cli/new.rb +10 -0
- data/lib/ufo/cli/opts.rb +35 -0
- data/lib/ufo/{ps → cli/ps}/task.rb +22 -29
- data/lib/ufo/cli/ps.rb +190 -0
- data/lib/ufo/{releases.rb → cli/releases.rb} +4 -4
- data/lib/ufo/{rollback.rb → cli/rollback.rb} +24 -12
- data/lib/ufo/cli/scale.rb +76 -0
- data/lib/ufo/cli/ship.rb +28 -0
- data/lib/ufo/cli/status.rb +8 -0
- data/lib/ufo/cli/stop.rb +49 -0
- data/lib/ufo/{tasks.rb → cli/tasks.rb} +2 -2
- data/lib/ufo/{upgrade.rb → cli/upgrade.rb} +2 -2
- data/lib/ufo/cli.rb +82 -172
- data/lib/ufo/command.rb +56 -1
- data/lib/ufo/concerns/autoscaling.rb +11 -0
- data/lib/ufo/concerns/names.rb +9 -0
- data/lib/ufo/concerns.rb +26 -0
- data/lib/ufo/config/inits.rb +13 -0
- data/lib/ufo/config.rb +187 -0
- data/lib/ufo/core.rb +32 -44
- data/lib/ufo/docker/builder.rb +44 -40
- data/lib/ufo/docker/cleaner.rb +9 -12
- data/lib/ufo/docker/compiler.rb +10 -4
- data/lib/ufo/docker/concerns.rb +7 -0
- data/lib/ufo/docker/dockerfile.rb +13 -9
- data/lib/ufo/docker/pusher.rb +13 -25
- data/lib/ufo/docker/state.rb +63 -0
- data/lib/ufo/ecr/auth.rb +8 -7
- data/lib/ufo/ecr/cleaner.rb +10 -14
- data/lib/ufo/ext/core/module.rb +31 -0
- data/lib/ufo/ext/core/nil_class.rb +11 -0
- data/lib/ufo/ext.rb +2 -0
- data/lib/ufo/{role → iam_role}/builder.rb +1 -1
- data/lib/ufo/{role → iam_role}/dsl.rb +8 -2
- data/lib/ufo/{role → iam_role}/registry.rb +1 -1
- data/lib/ufo/info.rb +22 -4
- data/lib/ufo/layering/layer.rb +95 -0
- data/lib/ufo/layering.rb +23 -0
- data/lib/ufo/log_group.rb +18 -10
- data/lib/ufo/logger/formatter.rb +13 -0
- data/lib/ufo/logger.rb +32 -0
- data/lib/ufo/names.rb +69 -0
- data/lib/ufo/param.rb +2 -1
- data/lib/ufo/task_definition/builder.rb +7 -0
- data/lib/ufo/task_definition/context.rb +45 -0
- data/lib/ufo/task_definition/erb/base.rb +18 -0
- data/lib/ufo/task_definition/erb/json.rb +28 -0
- data/lib/ufo/task_definition/erb/yaml.rb +18 -0
- data/lib/ufo/task_definition/erb.rb +78 -0
- data/lib/ufo/task_definition/helpers/aws_data_helper.rb +18 -0
- data/lib/ufo/task_definition/helpers/core.rb +50 -0
- data/lib/ufo/task_definition/helpers/ssm/fetcher.rb +39 -0
- data/lib/ufo/task_definition/helpers/ssm.rb +8 -0
- data/lib/ufo/task_definition/helpers/stack_output.rb +23 -0
- data/lib/ufo/{dsl/helper → task_definition/helpers}/vars.rb +40 -19
- data/lib/ufo/task_definition/helpers/vpc.rb +48 -0
- data/lib/ufo/task_definition/helpers.rb +5 -0
- data/lib/ufo/task_definition.rb +19 -0
- data/lib/ufo/upgrade/upgrade3.rb +1 -1
- data/lib/ufo/upgrade/upgrade4.rb +3 -3
- data/lib/ufo/utils/execute.rb +30 -0
- data/lib/ufo/utils/logging.rb +7 -0
- data/lib/ufo/utils/pretty.rb +18 -0
- data/lib/ufo/utils/squeezer.rb +1 -1
- data/lib/ufo/utils/sure.rb +23 -0
- data/lib/ufo/version.rb +1 -1
- data/lib/ufo/yaml/loader.rb +48 -0
- data/lib/ufo/yaml/validator.rb +51 -0
- data/lib/ufo/yaml.rb +13 -0
- data/lib/ufo.rb +12 -2
- data/spec/spec_helper.rb +4 -26
- data/spec/{lib → ufo}/ecr_auth_spec.rb +0 -0
- data/spec/{lib → ufo}/ecr_cleaner_spec.rb +0 -2
- data/spec/{lib/role → ufo/iam_role}/builder_spec.rb +5 -5
- data/spec/{lib/role → ufo/iam_role}/dsl_spec.rb +3 -3
- data/spec/{lib → ufo}/logs_spec.rb +2 -2
- data/ufo.gemspec +9 -3
- metadata +244 -341
- data/.circleci/bin/commit_docs.sh +0 -26
- data/.circleci/config.yml +0 -78
- data/.gitmodules +0 -0
- data/docs/.gitignore +0 -5
- data/docs/CNAME +0 -1
- data/docs/Gemfile +0 -4
- data/docs/LICENSE +0 -21
- data/docs/README.md +0 -20
- data/docs/_config.yml +0 -75
- data/docs/_docs/aws-ecs-task-execution-role.md +0 -28
- data/docs/_docs/conventions.md +0 -47
- data/docs/_docs/extras/codebuild-iam-role.md +0 -46
- data/docs/_docs/extras/dockerfile-erb.md +0 -60
- data/docs/_docs/extras/ecs-network-mode.md +0 -37
- data/docs/_docs/extras/load-balancer.md +0 -83
- data/docs/_docs/extras/minimal-deploy-iam.md +0 -79
- data/docs/_docs/extras/notification-arns.md +0 -21
- data/docs/_docs/extras/redirection-support.md +0 -27
- data/docs/_docs/extras/route53-support.md +0 -27
- data/docs/_docs/extras/security-groups.md +0 -36
- data/docs/_docs/extras/ssl-support.md +0 -20
- data/docs/_docs/faq.md +0 -100
- data/docs/_docs/fargate.md +0 -5
- data/docs/_docs/helpers.md +0 -24
- data/docs/_docs/iam-roles.md +0 -112
- data/docs/_docs/install.md +0 -25
- data/docs/_docs/more/auto-completion.md +0 -24
- data/docs/_docs/more/automated-cleanup.md +0 -14
- data/docs/_docs/more/customize-cloudformation.md +0 -35
- data/docs/_docs/more/migrations.md +0 -25
- data/docs/_docs/more/run-in-pieces.md +0 -30
- data/docs/_docs/more/single-task.md +0 -25
- data/docs/_docs/more/stuck-cloudformation.md +0 -29
- data/docs/_docs/more/why-cloudformation.md +0 -21
- data/docs/_docs/next-steps.md +0 -16
- data/docs/_docs/quick-start-ec2.md +0 -86
- data/docs/_docs/secrets.md +0 -135
- data/docs/_docs/settings/aws_profile.md +0 -36
- data/docs/_docs/settings/cfn.md +0 -12
- data/docs/_docs/settings/cluster.md +0 -66
- data/docs/_docs/settings/manage-security-groups.md +0 -24
- data/docs/_docs/settings/network.md +0 -45
- data/docs/_docs/settings.md +0 -55
- data/docs/_docs/ssl_errors.md +0 -40
- data/docs/_docs/structure.md +0 -41
- data/docs/_docs/tutorial-ufo-docker-build.md +0 -61
- data/docs/_docs/tutorial-ufo-init.md +0 -86
- data/docs/_docs/tutorial-ufo-ship.md +0 -95
- data/docs/_docs/tutorial-ufo-ships.md +0 -38
- data/docs/_docs/tutorial-ufo-tasks-build.md +0 -177
- data/docs/_docs/tutorial.md +0 -14
- data/docs/_docs/ufo-current.md +0 -49
- data/docs/_docs/ufo-env-extra.md +0 -22
- data/docs/_docs/ufo-env.md +0 -46
- data/docs/_docs/ufo-logs.md +0 -49
- data/docs/_docs/ufo-task-params.md +0 -43
- data/docs/_docs/ufo-tasks-register.md +0 -21
- data/docs/_docs/upgrading/upgrade4.5.md +0 -52
- data/docs/_docs/upgrading/upgrade4.md +0 -48
- data/docs/_docs/upgrading/upgrade5.md +0 -19
- data/docs/_docs/upgrading.md +0 -13
- data/docs/_docs/variables.md +0 -55
- data/docs/_includes/about.html +0 -19
- data/docs/_includes/banner/foot.html +0 -2
- data/docs/_includes/banner/head.html +0 -5
- data/docs/_includes/cfn-customize.md +0 -53
- data/docs/_includes/commands.html +0 -80
- data/docs/_includes/contact.html +0 -17
- data/docs/_includes/contact_disqus.html +0 -16
- data/docs/_includes/contact_static.html +0 -17
- data/docs/_includes/content.html +0 -26
- data/docs/_includes/css/bootstrap.min.css +0 -7
- data/docs/_includes/css/main.css +0 -501
- data/docs/_includes/css/quotes.css +0 -102
- data/docs/_includes/css/syntax.css +0 -65
- data/docs/_includes/css/table.css +0 -53
- data/docs/_includes/css/timeline.css +0 -201
- data/docs/_includes/css/ufo.css +0 -218
- data/docs/_includes/edit-on-github.html +0 -11
- data/docs/_includes/example.html +0 -63
- data/docs/_includes/footer.html +0 -44
- data/docs/_includes/google_analytics.html +0 -10
- data/docs/_includes/head.html +0 -32
- data/docs/_includes/header.html +0 -15
- data/docs/_includes/js.html +0 -32
- data/docs/_includes/js_disqus.html +0 -21
- data/docs/_includes/modals.html +0 -40
- data/docs/_includes/nav.html +0 -27
- data/docs/_includes/prev_next.md +0 -19
- data/docs/_includes/quotes.html +0 -19
- data/docs/_includes/reference.md +0 -5
- data/docs/_includes/repo_push_access.md +0 -11
- data/docs/_includes/subnav.html +0 -78
- data/docs/_includes/summary.html +0 -22
- data/docs/_includes/ufo-ship-options.md +0 -12
- data/docs/_includes/uses.html +0 -19
- data/docs/_layouts/default.html +0 -13
- data/docs/_layouts/style.css +0 -6
- data/docs/_reference/ufo-apps.md +0 -37
- data/docs/_reference/ufo-cancel.md +0 -24
- data/docs/_reference/ufo-completion.md +0 -46
- data/docs/_reference/ufo-completion_script.md +0 -27
- data/docs/_reference/ufo-current.md +0 -93
- data/docs/_reference/ufo-deploy.md +0 -76
- data/docs/_reference/ufo-destroy.md +0 -36
- data/docs/_reference/ufo-docker-base.md +0 -71
- data/docs/_reference/ufo-docker-build.md +0 -91
- data/docs/_reference/ufo-docker-clean.md +0 -44
- data/docs/_reference/ufo-docker-compile.md +0 -19
- data/docs/_reference/ufo-docker-help.md +0 -15
- data/docs/_reference/ufo-docker-name.md +0 -37
- data/docs/_reference/ufo-docker-push.md +0 -49
- data/docs/_reference/ufo-docker.md +0 -38
- data/docs/_reference/ufo-init.md +0 -125
- data/docs/_reference/ufo-logs.md +0 -40
- data/docs/_reference/ufo-network-help.md +0 -15
- data/docs/_reference/ufo-network-init.md +0 -39
- data/docs/_reference/ufo-network.md +0 -26
- data/docs/_reference/ufo-ps.md +0 -56
- data/docs/_reference/ufo-releases.md +0 -40
- data/docs/_reference/ufo-resources.md +0 -44
- data/docs/_reference/ufo-rollback.md +0 -61
- data/docs/_reference/ufo-scale.md +0 -50
- data/docs/_reference/ufo-ship.md +0 -129
- data/docs/_reference/ufo-ships.md +0 -68
- data/docs/_reference/ufo-status.md +0 -23
- data/docs/_reference/ufo-stop.md +0 -31
- data/docs/_reference/ufo-task.md +0 -56
- data/docs/_reference/ufo-tasks-build.md +0 -178
- data/docs/_reference/ufo-tasks-help.md +0 -15
- data/docs/_reference/ufo-tasks-register.md +0 -29
- data/docs/_reference/ufo-tasks.md +0 -35
- data/docs/_reference/ufo-upgrade-help.md +0 -15
- data/docs/_reference/ufo-upgrade-v2to3.md +0 -15
- data/docs/_reference/ufo-upgrade-v33to34.md +0 -15
- data/docs/_reference/ufo-upgrade-v3to4.md +0 -27
- data/docs/_reference/ufo-upgrade-v43to45.md +0 -15
- data/docs/_reference/ufo-upgrade.md +0 -29
- data/docs/_reference/ufo-version.md +0 -23
- data/docs/articles.md +0 -14
- data/docs/bin/web +0 -4
- data/docs/css/font-awesome/css/font-awesome.css +0 -1566
- data/docs/css/font-awesome/css/font-awesome.min.css +0 -4
- data/docs/css/font-awesome/fonts/FontAwesome.otf +0 -0
- data/docs/css/font-awesome/fonts/fontawesome-webfont.eot +0 -0
- data/docs/css/font-awesome/fonts/fontawesome-webfont.svg +0 -504
- data/docs/css/font-awesome/fonts/fontawesome-webfont.ttf +0 -0
- data/docs/css/font-awesome/fonts/fontawesome-webfont.woff +0 -0
- data/docs/docs.md +0 -29
- data/docs/img/docs/cloudformation-resources.png +0 -0
- data/docs/img/logos/boltops-logo-full.png +0 -0
- data/docs/img/logos/boltops-logo.png +0 -0
- data/docs/img/logos/ufo-logo-2.png +0 -0
- data/docs/img/logos/ufo-logo.png +0 -0
- data/docs/img/logos/ufo-site-header.png +0 -0
- data/docs/img/logos/ufo.jpg +0 -0
- data/docs/img/tutorials/ecs-console-task-definitions.png +0 -0
- data/docs/img/tutorials/ecs-console-ufo-ship.png +0 -0
- data/docs/img/tutorials/ecs-console-ufo-ships.png +0 -0
- data/docs/index.html +0 -10
- data/docs/js/bootstrap.js +0 -2114
- data/docs/js/bootstrap.min.js +0 -6
- data/docs/js/cbpAnimatedHeader.js +0 -44
- data/docs/js/cbpAnimatedHeader.min.js +0 -11
- data/docs/js/classie.js +0 -80
- data/docs/js/contact_me.js +0 -70
- data/docs/js/contact_me_static.js +0 -23
- data/docs/js/freelancer.js +0 -37
- data/docs/js/jqBootstrapValidation.js +0 -912
- data/docs/js/jquery-1.11.0.js +0 -4
- data/docs/js/jquery.easing.min.js +0 -44
- data/docs/js/nav.js +0 -53
- data/docs/quick-start.md +0 -133
- data/docs/reference.md +0 -29
- data/docs/style.css +0 -3
- data/docs/utils/ssl-doctor.rb +0 -89
- data/docs/utils/test-aws-api-access.rb +0 -11
- data/docs/utils/update-cert-chains.sh +0 -11
- data/lib/template/.env +0 -3
- data/lib/template/.secrets +0 -5
- data/lib/template/.ufo/iam_roles/execution_role.rb +0 -7
- data/lib/template/.ufo/iam_roles/task_role.rb +0 -21
- data/lib/template/.ufo/params.yml.tt +0 -27
- data/lib/template/.ufo/settings/cfn/default.yml.tt +0 -72
- data/lib/template/.ufo/settings/network/default.yml.tt +0 -26
- data/lib/template/.ufo/settings.yml.tt +0 -26
- data/lib/template/.ufo/task_definitions.rb.tt +0 -61
- data/lib/template/.ufo/templates/fargate.json.erb +0 -39
- data/lib/template/.ufo/templates/main.json.erb +0 -43
- data/lib/template/.ufo/variables/base.rb.tt +0 -19
- data/lib/template/.ufo/variables/development.rb +0 -8
- data/lib/template/.ufo/variables/production.rb +0 -7
- data/lib/template/Dockerfile +0 -15
- data/lib/template/bin/deploy.tt +0 -7
- data/lib/ufo/apps/cfn_map.rb +0 -70
- data/lib/ufo/apps/cluster.rb +0 -24
- data/lib/ufo/apps/service.rb +0 -56
- data/lib/ufo/apps.rb +0 -56
- data/lib/ufo/aws_service.rb +0 -36
- data/lib/ufo/base.rb +0 -35
- data/lib/ufo/cancel.rb +0 -23
- data/lib/ufo/current.rb +0 -104
- data/lib/ufo/default/settings.yml +0 -24
- data/lib/ufo/default/templates/main.json.erb +0 -39
- data/lib/ufo/destroy.rb +0 -41
- data/lib/ufo/docker/variables.rb +0 -26
- data/lib/ufo/dsl/helper.rb +0 -79
- data/lib/ufo/dsl/outputter.rb +0 -43
- data/lib/ufo/dsl/task_definition.rb +0 -108
- data/lib/ufo/dsl.rb +0 -96
- data/lib/ufo/help/apps.md +0 -12
- data/lib/ufo/help/balancer.md +0 -3
- data/lib/ufo/help/completions.md +0 -16
- data/lib/ufo/help/completions_script.md +0 -1
- data/lib/ufo/help/current.md +0 -65
- data/lib/ufo/help/deploy.md +0 -38
- data/lib/ufo/help/destroy.md +0 -9
- data/lib/ufo/help/docker/base.md +0 -49
- data/lib/ufo/help/docker/name.md +0 -16
- data/lib/ufo/help/docker.md +0 -6
- data/lib/ufo/help/init.md +0 -91
- data/lib/ufo/help/network/init.md +0 -13
- data/lib/ufo/help/ps.md +0 -27
- data/lib/ufo/help/releases.md +0 -16
- data/lib/ufo/help/resources.md +0 -20
- data/lib/ufo/help/rollback.md +0 -35
- data/lib/ufo/help/scale.md +0 -26
- data/lib/ufo/help/ship.md +0 -95
- data/lib/ufo/help/ships.md +0 -35
- data/lib/ufo/help/stop.md +0 -7
- data/lib/ufo/help/task.md +0 -27
- data/lib/ufo/help/tasks/build.md +0 -158
- data/lib/ufo/help/tasks/register.md +0 -14
- data/lib/ufo/help/tasks.md +0 -7
- data/lib/ufo/help/upgrade/v3to4.md +0 -3
- data/lib/ufo/help.rb +0 -9
- data/lib/ufo/init.rb +0 -119
- data/lib/ufo/network/fetch.rb +0 -48
- data/lib/ufo/network/helper.rb +0 -23
- data/lib/ufo/network/init.rb +0 -26
- data/lib/ufo/network.rb +0 -21
- data/lib/ufo/ps.rb +0 -129
- data/lib/ufo/scale.rb +0 -28
- data/lib/ufo/setting/profile.rb +0 -44
- data/lib/ufo/setting/security_groups.rb +0 -22
- data/lib/ufo/setting.rb +0 -75
- data/lib/ufo/settings.rb +0 -20
- data/lib/ufo/ship.rb +0 -103
- data/lib/ufo/stack/builder/conditions.rb +0 -23
- data/lib/ufo/stack/builder/parameters.rb +0 -45
- data/lib/ufo/stack/builder/resources/base.rb +0 -4
- data/lib/ufo/stack/builder/resources/dns.rb +0 -17
- data/lib/ufo/stack/builder/resources/elb.rb +0 -45
- data/lib/ufo/stack/builder/resources/listener.rb +0 -42
- data/lib/ufo/stack/builder/resources/listener_ssl.rb +0 -16
- data/lib/ufo/stack/builder/resources/roles/base.rb +0 -22
- data/lib/ufo/stack/builder/resources/roles/execution_role.rb +0 -4
- data/lib/ufo/stack/builder/resources/roles/task_role.rb +0 -4
- data/lib/ufo/stack/builder/resources/security_group/base.rb +0 -4
- data/lib/ufo/stack/builder/resources.rb +0 -20
- data/lib/ufo/stack/builder.rb +0 -26
- data/lib/ufo/stack/context.rb +0 -253
- data/lib/ufo/stack/helper.rb +0 -55
- data/lib/ufo/stack/template_body.rb +0 -13
- data/lib/ufo/stack.rb +0 -213
- data/lib/ufo/status.rb +0 -56
- data/lib/ufo/stop.rb +0 -49
- data/lib/ufo/task.rb +0 -225
- data/lib/ufo/tasks/builder.rb +0 -40
- data/lib/ufo/tasks/register.rb +0 -90
- data/lib/ufo/template_scope.rb +0 -57
- data/lib/ufo/util.rb +0 -69
- data/spec/lib/apps_spec.rb +0 -20
- data/spec/lib/builder_spec.rb +0 -23
- data/spec/lib/cli_spec.rb +0 -73
- data/spec/lib/completion_spec.rb +0 -18
- data/spec/lib/ps_spec.rb +0 -14
- data/spec/lib/register_spec.rb +0 -49
- data/spec/lib/setting_spec.rb +0 -18
- data/spec/lib/ship_spec.rb +0 -46
- data/spec/lib/stack/status_spec.rb +0 -76
- data/spec/lib/stop_spec.rb +0 -13
- data/spec/lib/task_spec.rb +0 -54
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1f7705c4016b08dd205ad9209ee255b6cd3411fea731183b6c859b28cf900990
|
|
4
|
+
data.tar.gz: 4eb918b33c3a87ed71fbc64e3a0dbac8766a02ccbf15d7e35b863a26f7fd78a3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c65f585f02f1a54afa5c3c2c0a36378e219b8490eec8321d1dd18f9cec4026108f39e11215d0ec964b1842dbca8ade66d4f7e0b256c41386f86eb0db60f931b2
|
|
7
|
+
data.tar.gz: 16226423b75d58394e9e92dcd4562629e9defc5ed46a2acad4e0f049deca9e0c525e2ddaec984eaac616edebe996c1e8e154f3ea3fbb73ae8dfd108bd68958cf
|
data/.cody/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
CodeBuild is used to run **acceptance-level tests**.
|
|
4
|
+
|
|
5
|
+
## Deploy Project
|
|
6
|
+
|
|
7
|
+
To update the CodeBuild project that handles deployment:
|
|
8
|
+
|
|
9
|
+
cody deploy ufo -t acceptance
|
|
10
|
+
|
|
11
|
+
## Start Build
|
|
12
|
+
|
|
13
|
+
To start a CodeBuild build:
|
|
14
|
+
|
|
15
|
+
cody start ufo -t acceptance
|
|
16
|
+
|
|
17
|
+
To specify a branch:
|
|
18
|
+
|
|
19
|
+
cody start ufo -t acceptance -b feature
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
final_status=0
|
|
4
|
+
function capture_status {
|
|
5
|
+
if [ "$?" -ne "0" ] && [ $final_status -ne 1 ] ; then
|
|
6
|
+
final_status=1
|
|
7
|
+
fi
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
set -eu
|
|
11
|
+
# will build from /tmp because terraspace/Gemfile may interfere
|
|
12
|
+
cd /tmp
|
|
13
|
+
export PATH=~/bin:$PATH # ~/bin/ufo wrapper
|
|
14
|
+
|
|
15
|
+
# Create empty folder for project
|
|
16
|
+
mkdir demo
|
|
17
|
+
cd demo
|
|
18
|
+
|
|
19
|
+
# Create ECR repo - it might already exist
|
|
20
|
+
aws ecr create-repository --repository-name test/demo || true
|
|
21
|
+
REPO=$(aws ecr describe-repositories --repository-name test/demo | jq -r '.repositories[].repositoryUri')
|
|
22
|
+
|
|
23
|
+
# DockerHub
|
|
24
|
+
# toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating
|
|
25
|
+
docker login --username $DOCKER_USER --password $DOCKER_PASS
|
|
26
|
+
TOKEN=$(curl -s --user "$DOCKER_USER:$DOCKER_PASS" "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
|
|
27
|
+
echo "Current rate limit:"
|
|
28
|
+
curl -s --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest
|
|
29
|
+
|
|
30
|
+
set -x
|
|
31
|
+
|
|
32
|
+
# Generate .ufo files/structure
|
|
33
|
+
ufo init --app testapp --repo $REPO
|
|
34
|
+
|
|
35
|
+
# Review generated files
|
|
36
|
+
cat Dockerfile
|
|
37
|
+
cat .ufo/config.rb
|
|
38
|
+
cat .ufo/resources/task_definitions/web.yml
|
|
39
|
+
cat .ufo/vars/base.rb
|
|
40
|
+
cat .ufo/vars/dev.rb
|
|
41
|
+
|
|
42
|
+
# Deploy
|
|
43
|
+
ufo ship -y
|
|
44
|
+
# Check
|
|
45
|
+
ufo ps
|
|
46
|
+
ENDPOINT=$(ufo ps 2>&1 | grep ELB | sed 's/.*ELB: //')
|
|
47
|
+
curl -s $ENDPOINT | grep title # should be success. IE: exit 0
|
|
48
|
+
|
|
49
|
+
# Change
|
|
50
|
+
cat << EOF > .ufo/vars/dev.rb
|
|
51
|
+
@cpu = 512
|
|
52
|
+
@memory = 512
|
|
53
|
+
EOF
|
|
54
|
+
|
|
55
|
+
cat << EOF > .ufo/config/web/dev.rb
|
|
56
|
+
Ufo.configure do |config|
|
|
57
|
+
config.autoscaling.max_capacity = 3
|
|
58
|
+
end
|
|
59
|
+
EOF
|
|
60
|
+
|
|
61
|
+
# Update
|
|
62
|
+
ufo clean -y # dont have to but good to test ufo clean
|
|
63
|
+
ufo ship -y
|
|
64
|
+
# Check
|
|
65
|
+
ufo ps # see full output for debugging
|
|
66
|
+
ufo ps 2>&1 | grep 'Max: 3' # should be success. IE: exit 0
|
|
67
|
+
# grab task id - json output goes to stdout
|
|
68
|
+
TASK=$(ufo ps --format json | jq -r '.[0].Task')
|
|
69
|
+
echo "TASK $TASK"
|
|
70
|
+
|
|
71
|
+
# TODO: create fargate spot cluster
|
|
72
|
+
CLUSTER=dev
|
|
73
|
+
# Just show for now. Might have to add wait logic to confirm new settings
|
|
74
|
+
aws ecs describe-tasks --cluster $CLUSTER --tasks $TASK \
|
|
75
|
+
| jq '.tasks[].containers[] | {cpu: .cpu, memory: .memory}'
|
|
76
|
+
|
|
77
|
+
# Destroy
|
|
78
|
+
ufo destroy -y
|
|
79
|
+
# Check
|
|
80
|
+
ufo ps
|
|
81
|
+
ufo ps 2>&1 | grep No | grep found # should be success. IE: exit 0
|
|
82
|
+
|
|
83
|
+
## Also test different roles like worker
|
|
84
|
+
|
|
85
|
+
export UFO_ROLE=worker
|
|
86
|
+
ufo ship -y
|
|
87
|
+
ufo ps # see full output for debugging
|
|
88
|
+
ufo ps 2>&1 | grep Stack | grep worker # should be success. IE: exit 0
|
|
89
|
+
ufo destroy -y
|
|
90
|
+
ufo ps 2>&1 | grep No | grep found # should be success. IE: exit 0
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
github_url("https://github.com/boltops-tools/ufo")
|
|
2
|
+
linux_image("aws/codebuild/amazonlinux2-x86_64-standard:3.0")
|
|
3
|
+
environment_variables(
|
|
4
|
+
DOCKER_USER: "ssm:/codebuild/ufo/DOCKER_USER",
|
|
5
|
+
DOCKER_PASS: "ssm:/codebuild/ufo/DOCKER_PASS",
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
# triggers(
|
|
9
|
+
# webhook: true,
|
|
10
|
+
# filter_groups: [[{type: "EVENT", pattern: "PUSH"}]]
|
|
11
|
+
# )
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
iam_policy(
|
|
2
|
+
"application-autoscaling",
|
|
3
|
+
"cloudformation",
|
|
4
|
+
"ec2",
|
|
5
|
+
"ecr",
|
|
6
|
+
"ecs",
|
|
7
|
+
"elasticloadbalancing",
|
|
8
|
+
"elasticloadbalancingv2",
|
|
9
|
+
"iam", # to create .ufo/resources/iam_roles
|
|
10
|
+
"logs",
|
|
11
|
+
"route53",
|
|
12
|
+
"ssm", # for codebuild to pull in ssm parameter
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
iam_policy(
|
|
16
|
+
Action: [
|
|
17
|
+
"iam:PassRole",
|
|
18
|
+
],
|
|
19
|
+
Effect: "Allow",
|
|
20
|
+
Resource: "*",
|
|
21
|
+
Condition: {
|
|
22
|
+
StringLike: {
|
|
23
|
+
"iam:PassedToService": [
|
|
24
|
+
"ecs-tasks.amazonaws.com"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -eux
|
|
4
|
+
|
|
5
|
+
export PATH=~/bin:$PATH
|
|
6
|
+
|
|
7
|
+
cat << 'EOF' > ~/.gemrc
|
|
8
|
+
---
|
|
9
|
+
:backtrace: false
|
|
10
|
+
:bulk_threshold: 1000
|
|
11
|
+
:sources:
|
|
12
|
+
- https://rubygems.org
|
|
13
|
+
:update_sources: true
|
|
14
|
+
:verbose: true
|
|
15
|
+
benchmark: false
|
|
16
|
+
install: "--no-ri --no-rdoc --no-document"
|
|
17
|
+
update: "--no-ri --no-rdoc --no-document"
|
|
18
|
+
EOF
|
|
19
|
+
|
|
20
|
+
gem install bundler # upgrade bundler
|
|
21
|
+
|
|
22
|
+
# In original ufo source and install ufo
|
|
23
|
+
cd $CODEBUILD_SRC_DIR # ufo folder - in case code is added later above this that uses cd
|
|
24
|
+
bundle install
|
|
25
|
+
bundle exec rake install
|
|
26
|
+
|
|
27
|
+
mkdir -p ~/bin
|
|
28
|
+
cat << EOF > ~/bin/ufo
|
|
29
|
+
#!/bin/bash
|
|
30
|
+
# If there's a Gemfile, assume we're in a ufo project with a Gemfile for ufo
|
|
31
|
+
if [ -f Gemfile ]; then
|
|
32
|
+
exec bundle exec $CODEBUILD_SRC_DIR/exe/ufo "\$@"
|
|
33
|
+
else
|
|
34
|
+
exec $CODEBUILD_SRC_DIR/exe/ufo "\$@"
|
|
35
|
+
fi
|
|
36
|
+
EOF
|
|
37
|
+
|
|
38
|
+
cat ~/bin/ufo
|
|
39
|
+
|
|
40
|
+
chmod a+x ~/bin/ufo
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
name: Ruby
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
- v6
|
|
8
|
+
|
|
9
|
+
pull_request:
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
name: Ruby ${{ matrix.ruby }}
|
|
15
|
+
strategy:
|
|
16
|
+
matrix:
|
|
17
|
+
ruby:
|
|
18
|
+
- '3.0.3'
|
|
19
|
+
|
|
20
|
+
steps:
|
|
21
|
+
- uses: actions/checkout@v2
|
|
22
|
+
- name: Set up Ruby
|
|
23
|
+
uses: ruby/setup-ruby@v1
|
|
24
|
+
with:
|
|
25
|
+
ruby-version: ${{ matrix.ruby }}
|
|
26
|
+
bundler-cache: true
|
|
27
|
+
- name: Run the default task
|
|
28
|
+
run: bundle exec rspec
|
data/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
|
5
5
|
|
|
6
|
+
## [6.0.0] - 2022-03-05
|
|
7
|
+
- [#125](https://github.com/tongueroo/ufo/pull/125) v6: major ufo upgrades and new structure
|
|
8
|
+
|
|
6
9
|
## [5.0.7] - 2021-12-18
|
|
7
10
|
- [#123](https://github.com/tongueroo/ufo/pull/123) fix activesupport require
|
|
8
11
|
|
|
@@ -433,7 +436,7 @@ This project *tries* to adhere to [Semantic Versioning](http://semver.org/), eve
|
|
|
433
436
|
|
|
434
437
|
## [0.1.1]
|
|
435
438
|
|
|
436
|
-
- rename `ufo docker
|
|
439
|
+
- rename `ufo docker docker_image` to `ufo docker image_name`
|
|
437
440
|
|
|
438
441
|
## [0.1.0]
|
|
439
442
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
|
|
5
5
|
# UFO: ECS Deploy Tool
|
|
6
6
|
|
|
7
|
-
[](https://circleci.com/gh/tongueroo/ufo)
|
|
8
7
|
[](https://gitter.im/tongueroo/ufo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
|
9
8
|
[](https://boltops.com?utm_source=badge&utm_medium=badge&utm_campaign=ufo)
|
|
10
9
|
|
|
@@ -12,13 +11,7 @@
|
|
|
12
11
|
|
|
13
12
|
Please **watch/star** this repo to help grow and support the project.
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
1. Builds a docker image.
|
|
18
|
-
2. Generates and registers the ECS template definition.
|
|
19
|
-
3. Deploys the ECS template definition to the ECS service.
|
|
20
|
-
|
|
21
|
-
Ufo deploys a task definition that is written in a templating language that is easily and fully controllable.
|
|
14
|
+
UFO provides convenient tooling to make it easier and more fun to work with ECS. UFO tries to bring a heroku-like experience to ECS.
|
|
22
15
|
|
|
23
16
|
See [ufoships.com](http://ufoships.com) for full documentation.
|
|
24
17
|
|
|
@@ -32,30 +25,6 @@ If you are upgrading, please refer to the [Upgrading docs](https://ufoships.com/
|
|
|
32
25
|
|
|
33
26
|
Full installation instructions are at [Install Ufo](http://ufoships.com/docs/install/).
|
|
34
27
|
|
|
35
|
-
## Quick Start
|
|
36
|
-
|
|
37
|
-
To quickly demonstrate how simple it is to use ufo we will use an example app from [tongueroo/demo-ufo](https://github.com/tongueroo/demo-ufo). The app is a barebones sinatra app. Here are the steps:
|
|
38
|
-
|
|
39
|
-
gem install ufo
|
|
40
|
-
git clone https://github.com/tongueroo/demo-ufo.git demo
|
|
41
|
-
cd demo
|
|
42
|
-
ufo init --image=tongueroo/demo-ufo
|
|
43
|
-
ufo ship demo-web
|
|
44
|
-
|
|
45
|
-
Congratulations, you have successfully used ufo to deploy to an ECS service.
|
|
46
|
-
|
|
47
|
-
## Load Balancer Support
|
|
48
|
-
|
|
49
|
-
Ufo can also create a load balancer as part of creating the ECS service if you wish. Underneath the hood, ufo uses CloudFormation to create the load balancer. More information can be found at the [load balancer support docs](https://ufoships.com/docs/extras/load-balancer/).
|
|
50
|
-
|
|
51
|
-
## Articles
|
|
52
|
-
|
|
53
|
-
* [UFO How to Create Unlimited Extra Environments](https://blog.boltops.com/2018/07/12/ufo-how-to-create-unlimited-extra-environments)
|
|
54
|
-
* [UFO and ECS Fargate Introduction Tutorial](https://blog.boltops.com/2018/07/11/ufo-and-ecs-fargate-introduction-tutorial)
|
|
55
|
-
* [UFO ECS Deployment Tool Introduction](https://blog.boltops.com/2018/07/06/ufo-ecs-deployment-tool-introduction)
|
|
56
|
-
* [UFO Version 4 Release: Load Balancer Support](https://blog.boltops.com/2018/07/05/ufo-version-4-release)
|
|
57
|
-
* [UFO Ship on AWS ECS Presentation](http://www.slideshare.net/tongueroo/ufo-ship-for-aws-ecs-70885296)
|
|
58
|
-
|
|
59
28
|
## Contributing
|
|
60
29
|
|
|
61
30
|
Bug reports and pull requests are welcome on GitHub at [https://github.com/tongueroo/ufo/issues](https://github.com/tongueroo/ufo/issues).
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Ufo.configure do |config|
|
|
2
|
+
config.logger.level = "info" # IE: info or debug
|
|
3
|
+
config.app = "<%= @app %>" # UFO_APP takes higher precedence if set
|
|
4
|
+
config.docker.repo = "<%= @repo %>"
|
|
5
|
+
# config.ecs.cluster = ":ENV" # :ENV pattern is replaced with UFO_ENV. Default is UFO_ENV=dev
|
|
6
|
+
|
|
7
|
+
# See VPC Docs: https://ufoships.com/docs/config/vpc/
|
|
8
|
+
# When not set, it's assumed that the ECS cluster using default vpc and default subnets.
|
|
9
|
+
# Notice the ability to use `stack_output` helpers to set the values.
|
|
10
|
+
# config.vpc.id = stack_output("vpc-:ENV.Vpc")
|
|
11
|
+
# config.vpc.subnets.ecs = stack_output("vpc-:ENV.PrivateAppSubnets").split(',')
|
|
12
|
+
# config.vpc.subnets.elb = stack_output("vpc-:ENV.PublicSubnets").split(',')
|
|
13
|
+
|
|
14
|
+
# See AutoScaling Docs: https://ufoships.com/docs/features/autoscaling/
|
|
15
|
+
# config.autoscaling.enabled = true
|
|
16
|
+
# config.autoscaling.min_capacity = 2
|
|
17
|
+
# config.autoscaling.max_capacity = 3
|
|
18
|
+
# config.autoscaling.target_value = 50.0
|
|
19
|
+
|
|
20
|
+
# See Route DNS Docs: https://ufoships.com/docs/features/dns-route53-support/
|
|
21
|
+
# config.dns.domain = "domain.com"
|
|
22
|
+
|
|
23
|
+
# See ufo exec Docs: https://ufoships.com/docs/intro/ufo-exec/
|
|
24
|
+
# bash is default but may not be available your Docker image
|
|
25
|
+
# Configure to /bin/sh if needed
|
|
26
|
+
# config.ecs.default_execute_command = "/bin/bash"
|
|
27
|
+
|
|
28
|
+
# See: https://ufoships.com/docs/config/reference/
|
|
29
|
+
# config.ps.summary = false # false to turn off the summary at top of ufo ps output
|
|
30
|
+
# config.ps.format = "table" # Examples: csv table tab json
|
|
31
|
+
|
|
32
|
+
# See: https://ufoships.com/docs/config/reference/
|
|
33
|
+
# Note: the `-` (minus sign) in front rejects the pattern
|
|
34
|
+
# config.logs.filter_pattern = '- "HealthChecker"'
|
|
35
|
+
|
|
36
|
+
# See: https://ufoships.com/docs/config/reference/
|
|
37
|
+
# You may want to set to false if your docker build and push process takes a while
|
|
38
|
+
# config.ship.docker.quiet = false # default is true.
|
|
39
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Example starter execution role.
|
|
2
|
+
# IAM Role permissions that EC2 Instance or host needs.
|
|
3
|
+
#
|
|
4
|
+
# Docs: https://ufoships.com/docs/iam-roles/
|
|
5
|
+
#
|
|
6
|
+
# Starter IAM permissions for secrets, ssm, and minimal ecr and cloudwatch permissions
|
|
7
|
+
iam_policy("SsmParameterStore",
|
|
8
|
+
Action: [
|
|
9
|
+
"ssm:GetParameters",
|
|
10
|
+
],
|
|
11
|
+
Effect: "Allow",
|
|
12
|
+
Resource: "*"
|
|
13
|
+
)
|
|
14
|
+
iam_policy("SecretsManager",
|
|
15
|
+
Action: [
|
|
16
|
+
"secretsmanager:GetSecretValue",
|
|
17
|
+
],
|
|
18
|
+
Effect: "Allow",
|
|
19
|
+
Resource: "*"
|
|
20
|
+
)
|
|
21
|
+
# AmazonECSTaskExecutionRolePolicy includes use cases. Minimal ecr and logs permissions.
|
|
22
|
+
# See: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html
|
|
23
|
+
managed_iam_policy("service-role/AmazonECSTaskExecutionRolePolicy")
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Example starter execution role.
|
|
2
|
+
# IAM Role permissions that the ECS Task or container needs.
|
|
3
|
+
#
|
|
4
|
+
# Docs: https://ufoships.com/docs/intro/task-iam/
|
|
5
|
+
#
|
|
6
|
+
# For `ufo exec` of `aws ecs execute-command`
|
|
7
|
+
# See: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-exec.html#ecs-exec-enabling-and-using
|
|
8
|
+
iam_policy("EcsExecuteCommand",
|
|
9
|
+
Action: [
|
|
10
|
+
"ssmmessages:CreateControlChannel",
|
|
11
|
+
"ssmmessages:CreateDataChannel",
|
|
12
|
+
"ssmmessages:OpenControlChannel",
|
|
13
|
+
"ssmmessages:OpenDataChannel",
|
|
14
|
+
],
|
|
15
|
+
Effect: "Allow",
|
|
16
|
+
Resource: "*",
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Managed policies examples:
|
|
20
|
+
# managed_iam_policy("AmazonSSMReadOnlyAccess")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
family: <%= @family %>
|
|
3
|
+
# "bridge" is default because "awsvpc" requires specific instance types and
|
|
4
|
+
# ECS tasks to run on private subnets.
|
|
5
|
+
# Note: However, bridge mode requires user to open up EC2 instances ports: 49153-65535
|
|
6
|
+
networkMode: bridge
|
|
7
|
+
containerDefinitions:
|
|
8
|
+
- name: <%= @name %>
|
|
9
|
+
image: <%= @image %>
|
|
10
|
+
cpu: <%= @cpu %>
|
|
11
|
+
memory: <%= @memory %>
|
|
12
|
+
memoryReservation: <%= @memory_reservation %>
|
|
13
|
+
<% if @container_port -%>
|
|
14
|
+
portMappings:
|
|
15
|
+
- containerPort: <%= @container_port %>
|
|
16
|
+
protocol: tcp
|
|
17
|
+
<% end -%>
|
|
18
|
+
command: <%= @command.to_json %>
|
|
19
|
+
environment: <%= @environment.to_json if @environment %>
|
|
20
|
+
secrets: <%= @secrets.to_json if @secrets %>
|
|
21
|
+
<% if @awslogs_group -%>
|
|
22
|
+
logConfiguration:
|
|
23
|
+
logDriver: awslogs
|
|
24
|
+
options:
|
|
25
|
+
awslogs-group: "<%= @awslogs_group %>"
|
|
26
|
+
awslogs-region: "<%= @awslogs_region || 'us-east-1' %>"
|
|
27
|
+
awslogs-stream-prefix: "<%= @awslogs_stream_prefix %>"
|
|
28
|
+
<% end -%>
|
|
29
|
+
essential: true
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Example .ufo/vars/base.rb
|
|
2
|
+
# Ufo docs
|
|
3
|
+
# Variables: http://ufoships.com/docs/variables/
|
|
4
|
+
# Helpers: http://ufoships.com/docs/helpers/
|
|
5
|
+
|
|
6
|
+
@family = family # Also: task_definition_name
|
|
7
|
+
@name = role # IE: web worker clock
|
|
8
|
+
@image = docker_image # includes the git sha org/repo:ufo-[sha].
|
|
9
|
+
# Docs: https://ufoships.com/docs/helpers/builtin/secrets/
|
|
10
|
+
# @environment = env_file(".env")
|
|
11
|
+
# @secrets = secrets_file(".secrets")
|
|
12
|
+
@cpu = 256
|
|
13
|
+
@memory = 256
|
|
14
|
+
@memory_reservation = 256
|
|
15
|
+
|
|
16
|
+
@awslogs_group = ["ecs/#{Ufo.app}", Ufo.env, Ufo.extra].compact.join('-')
|
|
17
|
+
@awslogs_stream_prefix = role
|
|
18
|
+
@awslogs_region = aws_region
|
|
19
|
+
|
|
20
|
+
@container_port = dockerfile_port # parsed from Dockerfile
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require "aws-sdk-applicationautoscaling"
|
|
2
|
+
require "aws-sdk-cloudformation"
|
|
3
|
+
require "aws-sdk-cloudwatchlogs"
|
|
4
|
+
require "aws-sdk-ec2"
|
|
5
|
+
require "aws-sdk-ecr"
|
|
6
|
+
require "aws-sdk-ecs"
|
|
7
|
+
require "aws-sdk-elasticloadbalancingv2"
|
|
8
|
+
require "aws-sdk-ssm"
|
|
9
|
+
|
|
10
|
+
require "aws_mfa_secure/ext/aws" # add MFA support
|
|
11
|
+
require "cfn_status"
|
|
12
|
+
|
|
13
|
+
module Ufo
|
|
14
|
+
module AwsServices
|
|
15
|
+
extend Memoist
|
|
16
|
+
|
|
17
|
+
def applicationautoscaling
|
|
18
|
+
Aws::ApplicationAutoScaling::Client.new(aws_options)
|
|
19
|
+
end
|
|
20
|
+
memoize :applicationautoscaling
|
|
21
|
+
|
|
22
|
+
def cloudformation
|
|
23
|
+
Aws::CloudFormation::Client.new(aws_options)
|
|
24
|
+
end
|
|
25
|
+
memoize :cloudformation
|
|
26
|
+
|
|
27
|
+
def cloudwatchlogs
|
|
28
|
+
Aws::CloudWatchLogs::Client.new(aws_options)
|
|
29
|
+
end
|
|
30
|
+
memoize :cloudwatchlogs
|
|
31
|
+
|
|
32
|
+
def ec2
|
|
33
|
+
Aws::EC2::Client.new(aws_options)
|
|
34
|
+
end
|
|
35
|
+
memoize :ec2
|
|
36
|
+
|
|
37
|
+
def ecr
|
|
38
|
+
Aws::ECR::Client.new(aws_options)
|
|
39
|
+
end
|
|
40
|
+
memoize :ecr
|
|
41
|
+
|
|
42
|
+
def ecs
|
|
43
|
+
Aws::ECS::Client.new(aws_options)
|
|
44
|
+
end
|
|
45
|
+
memoize :ecs
|
|
46
|
+
|
|
47
|
+
def elb
|
|
48
|
+
Aws::ElasticLoadBalancingV2::Client.new(aws_options)
|
|
49
|
+
end
|
|
50
|
+
memoize :elb
|
|
51
|
+
|
|
52
|
+
def ssm_client
|
|
53
|
+
Aws::SSM::Client.new
|
|
54
|
+
end
|
|
55
|
+
memoize :ssm_client
|
|
56
|
+
|
|
57
|
+
# Override the AWS retry settings with AWS clients.
|
|
58
|
+
#
|
|
59
|
+
# The aws-sdk-core has exponential backup with this formula:
|
|
60
|
+
#
|
|
61
|
+
# 2 ** c.retries * c.config.retry_base_delay
|
|
62
|
+
#
|
|
63
|
+
# Source:
|
|
64
|
+
# https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-core/lib/aws-sdk-core/plugins/retry_errors.rb
|
|
65
|
+
#
|
|
66
|
+
# So the max delay will be 2 ** 7 * 0.6 = 76.8s
|
|
67
|
+
#
|
|
68
|
+
# Only scoping this to deploy because dont want to affect people's application that use the aws sdk.
|
|
69
|
+
#
|
|
70
|
+
# There is also additional rate backoff logic elsewhere, since this is only scoped to deploys.
|
|
71
|
+
#
|
|
72
|
+
# Useful links:
|
|
73
|
+
# https://github.com/aws/aws-sdk-ruby/blob/master/gems/aws-sdk-core/lib/aws-sdk-core/plugins/retry_errors.rb
|
|
74
|
+
# https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
|
|
75
|
+
#
|
|
76
|
+
def aws_options
|
|
77
|
+
options = {
|
|
78
|
+
retry_limit: 7, # default: 3
|
|
79
|
+
retry_base_delay: 0.6, # default: 0.3
|
|
80
|
+
}
|
|
81
|
+
options.merge!(
|
|
82
|
+
log_level: :debug,
|
|
83
|
+
logger: Logger.new($stdout),
|
|
84
|
+
) if ENV['UFO_DEBUG_AWS_SDK']
|
|
85
|
+
options
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def find_stack(stack_name)
|
|
89
|
+
resp = cloudformation.describe_stacks(stack_name: stack_name)
|
|
90
|
+
resp.stacks.first
|
|
91
|
+
rescue Aws::CloudFormation::Errors::ValidationError => e
|
|
92
|
+
# example: Stack with id demo-web does not exist
|
|
93
|
+
if e.message =~ /Stack with/ && e.message =~ /does not exist/
|
|
94
|
+
nil
|
|
95
|
+
else
|
|
96
|
+
raise
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def task_definition_arns(family, max_items=10)
|
|
101
|
+
resp = ecs.list_task_definitions(
|
|
102
|
+
family_prefix: family,
|
|
103
|
+
sort: "DESC",
|
|
104
|
+
)
|
|
105
|
+
arns = resp.task_definition_arns
|
|
106
|
+
arns = arns.select do |arn|
|
|
107
|
+
task_definition = arn.split('/').last.split(':').first
|
|
108
|
+
task_definition == family
|
|
109
|
+
end
|
|
110
|
+
arns[0..max_items]
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def status
|
|
114
|
+
CfnStatus.new(@stack_name) # NOTE: @stack_name must be set in the including Class
|
|
115
|
+
end
|
|
116
|
+
memoize :status
|
|
117
|
+
end
|
|
118
|
+
end
|
data/lib/ufo/booter.rb
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Ufo
|
|
2
|
+
module Booter
|
|
3
|
+
def boot
|
|
4
|
+
run_hooks
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
# Special boot hooks run super early.
|
|
8
|
+
# Useful for setting env vars and other early things.
|
|
9
|
+
#
|
|
10
|
+
# .ufo/boot.rb
|
|
11
|
+
# .ufo/boot/dev.rb
|
|
12
|
+
#
|
|
13
|
+
def run_hooks
|
|
14
|
+
run_hook
|
|
15
|
+
run_hook(Ufo.env)
|
|
16
|
+
Ufo::Config::Inits.run_all
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def run_hook(env=nil)
|
|
20
|
+
name = env ? "boot/#{env}" : "boot"
|
|
21
|
+
path = "#{Ufo.root}/.ufo/#{name}.rb" # IE: .ufo/boot/dev.rb
|
|
22
|
+
require path if File.exist?(path)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
extend self
|
|
26
|
+
end
|
|
27
|
+
end
|