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
data/lib/ufo/help/tasks/build.md
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
## Summarized Example
|
|
2
|
-
|
|
3
|
-
ufo tasks build
|
|
4
|
-
|
|
5
|
-
Builds all the task defintiions. Note all the existing ufo/output generated task defintions are wiped out.
|
|
6
|
-
|
|
7
|
-
## Explanation
|
|
8
|
-
|
|
9
|
-
The command `ufo tasks build` generates the task definitions locally and writes them to the `output/` folder. There are 2 files that it uses in order to produce the raw AWS task definitions files.
|
|
10
|
-
|
|
11
|
-
1. ufo/templates/main.json.erb
|
|
12
|
-
2. ufo/task_definitions.rb
|
|
13
|
-
|
|
14
|
-
Here's an example of each of them:
|
|
15
|
-
|
|
16
|
-
**main.json.erb**:
|
|
17
|
-
|
|
18
|
-
{
|
|
19
|
-
"family": "<%= @family %>",
|
|
20
|
-
"containerDefinitions": [
|
|
21
|
-
{
|
|
22
|
-
"name": "<%= @name %>",
|
|
23
|
-
"image": "<%= @image %>",
|
|
24
|
-
"cpu": <%= @cpu %>,
|
|
25
|
-
<% if @memory %>
|
|
26
|
-
"memory": <%= @memory %>,
|
|
27
|
-
<% end %>
|
|
28
|
-
<% if @memory_reservation %>
|
|
29
|
-
"memoryReservation": <%= @memory_reservation %>,
|
|
30
|
-
<% end %>
|
|
31
|
-
<% if @container_port %>
|
|
32
|
-
"portMappings": [
|
|
33
|
-
{
|
|
34
|
-
"containerPort": "<%= @container_port %>",
|
|
35
|
-
"protocol": "tcp"
|
|
36
|
-
}
|
|
37
|
-
],
|
|
38
|
-
<% end %>
|
|
39
|
-
"command": <%= @command.to_json %>,
|
|
40
|
-
<% if @environment %>
|
|
41
|
-
"environment": <%= @environment.to_json %>,
|
|
42
|
-
<% end %>
|
|
43
|
-
<% if @awslogs_group %>
|
|
44
|
-
"logConfiguration": {
|
|
45
|
-
"logDriver": "awslogs",
|
|
46
|
-
"options": {
|
|
47
|
-
"awslogs-group": "<%= @awslogs_group %>",
|
|
48
|
-
"awslogs-region": "<%= @awslogs_region || 'us-east-1' %>",
|
|
49
|
-
"awslogs-stream-prefix": "<%= @awslogs_stream_prefix %>"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
<% end %>
|
|
53
|
-
"essential": true
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
**task_definitions.rb**:
|
|
59
|
-
|
|
60
|
-
```ruby
|
|
61
|
-
task_definition "demo-web" do
|
|
62
|
-
source "main" # will use ufo/templates/main.json.erb
|
|
63
|
-
variables(
|
|
64
|
-
family: task_definition_name,
|
|
65
|
-
name: "web",
|
|
66
|
-
container_port: helper.dockerfile_port,
|
|
67
|
-
command: ["bin/web"]
|
|
68
|
-
)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
task_definition "demo-worker" do
|
|
72
|
-
source "main" # will use ufo/templates/main.json.erb
|
|
73
|
-
variables(
|
|
74
|
-
family: task_definition_name,
|
|
75
|
-
name: "worker",
|
|
76
|
-
command: ["bin/worker"]
|
|
77
|
-
)
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
task_definition "demo-clock" do
|
|
81
|
-
source "main" # will use ufo/templates/main.json.erb
|
|
82
|
-
variables(
|
|
83
|
-
family: task_definition_name,
|
|
84
|
-
name: "clock",
|
|
85
|
-
command: ["bin/clock"]
|
|
86
|
-
)
|
|
87
|
-
end
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
The shared variables are set in the variables folder:
|
|
91
|
-
|
|
92
|
-
**ufo/variables/base.rb**:
|
|
93
|
-
|
|
94
|
-
```ruby
|
|
95
|
-
@image = helper.full_image_name # includes the git sha tongueroo/demo-ufo:ufo-[sha].
|
|
96
|
-
@cpu = 128
|
|
97
|
-
@memory_reservation = 256
|
|
98
|
-
@environment = helper.env_file(".env")
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
**ufo/variables/production.rb**:
|
|
102
|
-
|
|
103
|
-
```ruby
|
|
104
|
-
@environment = helper.env_vars(%Q{
|
|
105
|
-
RAILS_ENV=production
|
|
106
|
-
SECRET_KEY_BASE=secret
|
|
107
|
-
})
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
Ufo combines the `main.json.erb` template, `task_definitions.rb` definitions, and variables in the `.ufo/variables` folder. It then generates the raw AWS formatted task definition in the `output` folder.
|
|
111
|
-
|
|
112
|
-
To build the task definitions:
|
|
113
|
-
|
|
114
|
-
ufo tasks build
|
|
115
|
-
|
|
116
|
-
You should see output similar to below:
|
|
117
|
-
|
|
118
|
-
$ ufo tasks build
|
|
119
|
-
Building Task Definitions...
|
|
120
|
-
Generating Task Definitions:
|
|
121
|
-
ufo/output/demo-web.json
|
|
122
|
-
ufo/output/demo-worker.json
|
|
123
|
-
ufo/output/demo-clock.json
|
|
124
|
-
Task Definitions built in ufo/output.
|
|
125
|
-
$
|
|
126
|
-
|
|
127
|
-
Let's take a look at one of the generated files: `.ufo/output/demo-web.json`.
|
|
128
|
-
|
|
129
|
-
{
|
|
130
|
-
"family": "demo-web",
|
|
131
|
-
"containerDefinitions": [
|
|
132
|
-
{
|
|
133
|
-
"name": "web",
|
|
134
|
-
"image": "tongueroo/demo-ufo:ufo-2017-06-11T22-22-32-a18aa30",
|
|
135
|
-
"cpu": 128,
|
|
136
|
-
"memoryReservation": 256,
|
|
137
|
-
"portMappings": [
|
|
138
|
-
{
|
|
139
|
-
"containerPort": "3000",
|
|
140
|
-
"protocol": "tcp"
|
|
141
|
-
}
|
|
142
|
-
],
|
|
143
|
-
"command": [
|
|
144
|
-
"bin/web"
|
|
145
|
-
],
|
|
146
|
-
"environment": [
|
|
147
|
-
{
|
|
148
|
-
"name": "RAILS_ENV",
|
|
149
|
-
"value": "staging"
|
|
150
|
-
}
|
|
151
|
-
],
|
|
152
|
-
"essential": true
|
|
153
|
-
}
|
|
154
|
-
]
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
If you need to modify the task definition template to suite your own needs it is super simple, just edit `main.json.erb`. No need to dive deep into internal code that builds up the task definition with some internal structure. It is all there for you to fully control.
|
|
158
|
-
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
The `ufo tasks register` command registers all the generated task definitions in `output/` to AWS ECS. Let's run it:
|
|
2
|
-
|
|
3
|
-
ufo tasks register
|
|
4
|
-
|
|
5
|
-
You should see something similiar to this:
|
|
6
|
-
|
|
7
|
-
demo-clock task definition registered.
|
|
8
|
-
demo-web task definition registered.
|
|
9
|
-
demo-worker task definition registered.
|
|
10
|
-
|
|
11
|
-
You can verify that the task definitions have been registered properly by viewing the AWS ECS Console Task Definitions page. You should see something similar to this:
|
|
12
|
-
|
|
13
|
-
<img src="/img/tutorials/ecs-console-task-definitions.png" class="doc-photo" />
|
|
14
|
-
|
data/lib/ufo/help/tasks.md
DELETED
data/lib/ufo/help.rb
DELETED
data/lib/ufo/init.rb
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
module Ufo
|
|
2
|
-
class Init < Sequence
|
|
3
|
-
include Network::Helper
|
|
4
|
-
|
|
5
|
-
# Ugly, this is how I can get the options from to match with this Thor::Group
|
|
6
|
-
def self.cli_options
|
|
7
|
-
[
|
|
8
|
-
[:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
|
|
9
|
-
[:image, required: true, desc: "Docker image name without the tag. Example: tongueroo/demo-ufo. Configures ufo/settings.yml"],
|
|
10
|
-
[:app, desc: "App name. Preferably one word. Used in the generated ufo/task_definitions.rb. If not specified then the app name is inferred as the folder name."],
|
|
11
|
-
[:launch_type, default: "ec2", desc: "ec2 or fargate."],
|
|
12
|
-
[:template, desc: "Custom template to use."],
|
|
13
|
-
[:template_mode, desc: "Template mode: replace or additive."],
|
|
14
|
-
[:vpc_id, desc: "Vpc id. For settings/network/default.yml."],
|
|
15
|
-
[:ecs_subnets, type: :array, desc: "Subnets for ECS tasks, defaults to --elb-subnets set to. For settings/network/default.yml"],
|
|
16
|
-
[:elb_subnets, type: :array, desc: "Subnets for ELB. For settings/network/default.yml"],
|
|
17
|
-
]
|
|
18
|
-
end
|
|
19
|
-
cli_options.each { |o| class_option(*o) }
|
|
20
|
-
|
|
21
|
-
def setup_template_repo
|
|
22
|
-
return unless @options[:template]&.include?('/')
|
|
23
|
-
|
|
24
|
-
sync_template_repo
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def set_source_path
|
|
28
|
-
return unless @options[:template]
|
|
29
|
-
|
|
30
|
-
custom_template = "#{ENV['HOME']}/.ufo/templates/#{@options[:template]}"
|
|
31
|
-
|
|
32
|
-
if @options[:template_mode] == "replace" # replace the template entirely
|
|
33
|
-
override_source_paths(custom_template)
|
|
34
|
-
else # additive: modify on top of default template
|
|
35
|
-
default_template = File.expand_path("../../template", __FILE__)
|
|
36
|
-
override_source_paths([custom_template, default_template])
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# for specs
|
|
41
|
-
def set_destination_root
|
|
42
|
-
return unless ENV['UFO_ROOT']
|
|
43
|
-
|
|
44
|
-
dest = ENV['UFO_ROOT']
|
|
45
|
-
FileUtils.rm_rf(dest) && FileUtils.mkdir_p(dest)
|
|
46
|
-
self.destination_root = dest
|
|
47
|
-
FileUtils.cd(dest)
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def set_network_options
|
|
51
|
-
configure_network_settings
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def init_files
|
|
55
|
-
# map variables
|
|
56
|
-
@app = options[:app] || inferred_app
|
|
57
|
-
@image = options[:image]
|
|
58
|
-
# copy the files
|
|
59
|
-
puts "Setting up ufo project..."
|
|
60
|
-
exclude_pattern = File.exist?("#{Ufo.root}/Dockerfile") ?
|
|
61
|
-
/(\.git|Dockerfile)/ :
|
|
62
|
-
/(\.git)/
|
|
63
|
-
directory ".", exclude_pattern: exclude_pattern
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def upsert_gitignore
|
|
67
|
-
text =<<-EOL
|
|
68
|
-
.ufo/current
|
|
69
|
-
.ufo/data
|
|
70
|
-
.ufo/log
|
|
71
|
-
.ufo/output
|
|
72
|
-
EOL
|
|
73
|
-
if File.exist?(".gitignore")
|
|
74
|
-
append_to_file ".gitignore", text
|
|
75
|
-
else
|
|
76
|
-
create_file ".gitignore", text
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def upsert_dockerignore
|
|
81
|
-
text = ".ufo\n"
|
|
82
|
-
if File.exist?(".dockerignore")
|
|
83
|
-
append_to_file ".dockerignore", text
|
|
84
|
-
else
|
|
85
|
-
create_file ".dockerignore", text
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def user_message
|
|
90
|
-
puts "Starter ufo files created."
|
|
91
|
-
puts <<-EOL
|
|
92
|
-
Congrats 🎉 You have successfully set up ufo for your project.
|
|
93
|
-
#{"="*64}
|
|
94
|
-
|
|
95
|
-
## Task Definition Customizations
|
|
96
|
-
|
|
97
|
-
If you need to customize the ECS task definition to configure things like memory and cpu allocation. You can do this by adjusting the files the .ufo/variables folder. These variables get applied to the .ufo/templates/main.json.erb task definition json that is passed to the ECS register task definition api.
|
|
98
|
-
|
|
99
|
-
Some additional starter example roles for your apps were set up in in .ufo/task_definitions.rb. Be sure to check it out and adjust it for your needs.
|
|
100
|
-
|
|
101
|
-
## Settings files
|
|
102
|
-
|
|
103
|
-
Additionally, ufo generated starter settings files that allow you to customize more settings.
|
|
104
|
-
|
|
105
|
-
* .ufo/settings.yml: general settings.
|
|
106
|
-
* .ufo/settings/cfn/default.yml: properties of CloudFormation resources that ufo creates.
|
|
107
|
-
* .ufo/settings/network/default.yml: network settings.
|
|
108
|
-
|
|
109
|
-
More more info refer to: http://ufoships.com/docs/settings/
|
|
110
|
-
|
|
111
|
-
To deploy to ECS:
|
|
112
|
-
|
|
113
|
-
ufo current --service #{@app}-web
|
|
114
|
-
ufo ship
|
|
115
|
-
|
|
116
|
-
EOL
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
data/lib/ufo/network/fetch.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# Provides access to default network settings for a vpc: subnets and security_group
|
|
2
|
-
# If no @vpc_id is provided to the initializer then the default vpc is used.
|
|
3
|
-
class Ufo::Network
|
|
4
|
-
class Fetch
|
|
5
|
-
include Ufo::AwsService
|
|
6
|
-
extend Memoist
|
|
7
|
-
|
|
8
|
-
def initialize(vpc_id)
|
|
9
|
-
@vpc_id = vpc_id
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def vpc_id
|
|
13
|
-
return @vpc_id if @vpc_id
|
|
14
|
-
|
|
15
|
-
resp = ec2.describe_vpcs(filters: [
|
|
16
|
-
{name: "isDefault", values: ["true"]}
|
|
17
|
-
])
|
|
18
|
-
default_vpc = resp.vpcs.first
|
|
19
|
-
if default_vpc
|
|
20
|
-
default_vpc.vpc_id
|
|
21
|
-
else
|
|
22
|
-
puts "A default vpc was not found in this AWS account and region.".color(:red)
|
|
23
|
-
puts "Because there is no default vpc, please specify the --vpc-id option. More info: http://ufoships.com/reference/ufo-init/"
|
|
24
|
-
exit 1
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
memoize :vpc_id
|
|
28
|
-
|
|
29
|
-
# all subnets
|
|
30
|
-
def subnet_ids
|
|
31
|
-
resp = ec2.describe_subnets(filters: [
|
|
32
|
-
{name: "vpc-id", values: [vpc_id]}
|
|
33
|
-
])
|
|
34
|
-
resp.subnets.map(&:subnet_id).sort
|
|
35
|
-
end
|
|
36
|
-
memoize :subnet_ids
|
|
37
|
-
|
|
38
|
-
# default security group
|
|
39
|
-
def security_group_id
|
|
40
|
-
resp = ec2.describe_security_groups(filters: [
|
|
41
|
-
{name: "vpc-id", values: [vpc_id]},
|
|
42
|
-
{name: "group-name", values: ["default"]}
|
|
43
|
-
])
|
|
44
|
-
resp.security_groups.first.group_id
|
|
45
|
-
end
|
|
46
|
-
memoize :security_group_id
|
|
47
|
-
end
|
|
48
|
-
end
|
data/lib/ufo/network/helper.rb
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
class Ufo::Network
|
|
2
|
-
module Helper
|
|
3
|
-
private
|
|
4
|
-
# for balancer default profile
|
|
5
|
-
def configure_network_settings
|
|
6
|
-
@options = @options.dup
|
|
7
|
-
return test_network_settings if ENV['TEST']
|
|
8
|
-
|
|
9
|
-
fetch = Fetch.new(@options[:vpc_id])
|
|
10
|
-
@options[:vpc_id] ||= fetch.vpc_id
|
|
11
|
-
@options[:ecs_subnets] ||= fetch.subnet_ids
|
|
12
|
-
@options[:elb_subnets] ||= @options[:ecs_subnets] || fetch.subnet_ids
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# hack for specs
|
|
16
|
-
def test_network_settings
|
|
17
|
-
@options[:vpc_id] = "vpc-111"
|
|
18
|
-
@options[:ecs_subnets] = ["subnet-111", "subnet-222"]
|
|
19
|
-
@options[:elb_subnets] = ["subnet-111", "subnet-222"]
|
|
20
|
-
@options
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
data/lib/ufo/network/init.rb
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
module Ufo
|
|
2
|
-
class Network::Init < Thor::Group
|
|
3
|
-
include Thor::Actions
|
|
4
|
-
include Network::Helper
|
|
5
|
-
|
|
6
|
-
add_runtime_options! # force, pretend, quiet, skip options
|
|
7
|
-
# https://github.com/erikhuda/thor/blob/master/lib/thor/actions.rb#L49
|
|
8
|
-
|
|
9
|
-
# Interesting, when defining the options in this class it screws up the ufo balance -h menu
|
|
10
|
-
Network.cli_options.each do |o|
|
|
11
|
-
class_option *o
|
|
12
|
-
end
|
|
13
|
-
def self.source_paths
|
|
14
|
-
[File.expand_path("../../../template/.ufo/settings/network", __FILE__)]
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def set_network_options
|
|
18
|
-
configure_network_settings
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def starter_files
|
|
22
|
-
filename = @options[:filename] || "default"
|
|
23
|
-
template "default.yml", ".ufo/settings/network/#{filename}.yml"
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
data/lib/ufo/network.rb
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
module Ufo
|
|
2
|
-
class Network < Command
|
|
3
|
-
def self.cli_options
|
|
4
|
-
[
|
|
5
|
-
[:force, type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files."],
|
|
6
|
-
[:ecs_subnets, type: :array, desc: "ECS Subnets"],
|
|
7
|
-
[:elb_subnets, type: :array, desc: "ELB Subnets"],
|
|
8
|
-
[:vpc_id, desc: "Vpc id"],
|
|
9
|
-
[:filename, default: "default", desc: "Name of the settings file to create w/o extension."],
|
|
10
|
-
]
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
cli_options.each { |o| option(*o) }
|
|
14
|
-
|
|
15
|
-
desc "init", "Creates network starter settings file."
|
|
16
|
-
long_desc Help.text("network:init")
|
|
17
|
-
def init
|
|
18
|
-
Init.start
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
data/lib/ufo/ps.rb
DELETED
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
require 'text-table'
|
|
2
|
-
|
|
3
|
-
module Ufo
|
|
4
|
-
class Ps < Base
|
|
5
|
-
delegate :service, to: :info
|
|
6
|
-
|
|
7
|
-
def run
|
|
8
|
-
unless service
|
|
9
|
-
puts no_service_message
|
|
10
|
-
return
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
summary
|
|
14
|
-
|
|
15
|
-
if task_arns.empty?
|
|
16
|
-
puts "There are 0 running tasks."
|
|
17
|
-
return
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
all_task_arns = task_arns.each_slice(100).map do |arns|
|
|
21
|
-
resp = ecs.describe_tasks(tasks: arns, cluster: @cluster)
|
|
22
|
-
resp["tasks"]
|
|
23
|
-
end.flatten
|
|
24
|
-
|
|
25
|
-
display_tasks(all_task_arns)
|
|
26
|
-
display_scale_help
|
|
27
|
-
display_target_group_help
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def summary
|
|
31
|
-
return unless @options[:summary]
|
|
32
|
-
puts "=> Service: #{full_service}"
|
|
33
|
-
puts " Service name: #{service.service_name}"
|
|
34
|
-
puts " Status: #{service.status}"
|
|
35
|
-
puts " Running count: #{service.running_count}"
|
|
36
|
-
puts " Desired count: #{service.desired_count}"
|
|
37
|
-
puts " Launch type: #{service.launch_type}"
|
|
38
|
-
puts " Task definition: #{service.task_definition.split('/').last}"
|
|
39
|
-
elb = info.load_balancer(service)
|
|
40
|
-
if elb
|
|
41
|
-
puts " Elb: #{elb.dns_name}"
|
|
42
|
-
puts " Elb type: #{elb.type}"
|
|
43
|
-
end
|
|
44
|
-
puts " Route53: #{info.route53_dns}" if info.route53_dns
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def display_target_group_help
|
|
48
|
-
events = service["events"][0..4]
|
|
49
|
-
return if events[0].message =~ /has reached a steady state/
|
|
50
|
-
|
|
51
|
-
# The error currently happens to be the 5th element.
|
|
52
|
-
#
|
|
53
|
-
# Example:
|
|
54
|
-
# "(service XXX) (instance i-XXX) (port 32875) is unhealthy in (target-group arn:aws:elasticloadbalancing:us-east-1:111111111111:targetgroup/devel-Targe-1111111111111/1111111111111111) due to (reason Health checks failed with these codes: [400])">]
|
|
55
|
-
error_event = events.find do |e|
|
|
56
|
-
e.message =~ /is unhealthy in/ &&
|
|
57
|
-
e.message =~ /targetgroup/
|
|
58
|
-
end
|
|
59
|
-
return unless error_event
|
|
60
|
-
|
|
61
|
-
puts "There are targets in the target group reporting unhealthy. This can cause containers to cycle. Here's the error:"
|
|
62
|
-
puts error_event.message.color(:red)
|
|
63
|
-
puts "Check out the ECS console events tab for more info."
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# If the running count less than the desired account yet, check the events
|
|
67
|
-
# and show a message with helpful debugging information.
|
|
68
|
-
def display_scale_help
|
|
69
|
-
return if service.running_count >= service.desired_count
|
|
70
|
-
|
|
71
|
-
events = service["events"][0..3] # only check most recent 4 messages
|
|
72
|
-
error_event = events.find do |e|
|
|
73
|
-
e.message =~ /was unable to place a task/
|
|
74
|
-
end
|
|
75
|
-
return unless error_event
|
|
76
|
-
|
|
77
|
-
puts "There is an issue scaling the #{@service.color(:green)} service to #{service.desired_count}. Here's the error:"
|
|
78
|
-
puts error_event.message.color(:red)
|
|
79
|
-
if service.launch_type == "EC2"
|
|
80
|
-
puts "If AutoScaling is set up for the container instances, it can take a little time to add additional instances. You'll see this message until the capacity is added."
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def display_tasks(tasks)
|
|
85
|
-
table = Text::Table.new
|
|
86
|
-
Task.extra_columns = @options[:extra]
|
|
87
|
-
table.head = Task.header
|
|
88
|
-
tasks = tasks.sort_by { |t| t["task_arn"] }
|
|
89
|
-
tasks.each do |t|
|
|
90
|
-
task = Task.new(t)
|
|
91
|
-
table.rows << task.to_a unless task.hide?
|
|
92
|
-
end
|
|
93
|
-
puts table
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def statuses
|
|
97
|
-
status = @options[:status].upcase
|
|
98
|
-
valid_statuses = %w[RUNNING PENDING STOPPED]
|
|
99
|
-
all_statuses = valid_statuses + ["ALL"]
|
|
100
|
-
unless all_statuses.include?(status)
|
|
101
|
-
puts "Invalid status filter provided. Please provided one of the following:"
|
|
102
|
-
puts all_statuses.map(&:downcase).join(", ")
|
|
103
|
-
exit 1
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
status == "ALL" ? valid_statuses : [status]
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
def task_arns
|
|
110
|
-
threads, results = [], {}
|
|
111
|
-
statuses.each do |status|
|
|
112
|
-
threads << Thread.new do
|
|
113
|
-
options = {
|
|
114
|
-
service_name: service.service_name,
|
|
115
|
-
cluster: @cluster,
|
|
116
|
-
desired_status: status,
|
|
117
|
-
}
|
|
118
|
-
# Limit display of too many stopped tasks
|
|
119
|
-
options[:max_results] = 20 if status == "STOPPED"
|
|
120
|
-
resp = ecs.list_tasks(options)
|
|
121
|
-
results[status] = resp.task_arns
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
threads.map(&:join)
|
|
125
|
-
results.values.flatten.uniq
|
|
126
|
-
end
|
|
127
|
-
memoize :task_arns
|
|
128
|
-
end
|
|
129
|
-
end
|
data/lib/ufo/scale.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
module Ufo
|
|
2
|
-
class Scale < Base
|
|
3
|
-
delegate :service, to: :info
|
|
4
|
-
|
|
5
|
-
def initialize(service, count, options={})
|
|
6
|
-
super(service, options)
|
|
7
|
-
@count = count
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def update
|
|
11
|
-
unless service_exists?
|
|
12
|
-
puts "Unable to find the #{@service.color(:green)} service on the #{@cluster.color(:green)} cluster."
|
|
13
|
-
puts "Are you sure you are trying to scale the right service on the right cluster?"
|
|
14
|
-
exit
|
|
15
|
-
end
|
|
16
|
-
ecs.update_service(
|
|
17
|
-
service: service.service_name,
|
|
18
|
-
cluster: @cluster,
|
|
19
|
-
desired_count: @count
|
|
20
|
-
)
|
|
21
|
-
puts "Scale #{full_service.color(:green)} service in #{@cluster.color(:green)} to #{@count}" unless @options[:mute]
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def service_exists?
|
|
25
|
-
!!service
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
data/lib/ufo/setting/profile.rb
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
class Ufo::Setting
|
|
2
|
-
class Profile
|
|
3
|
-
extend Memoist
|
|
4
|
-
|
|
5
|
-
def initialize(type, profile=nil)
|
|
6
|
-
@type = type.to_s # cfn or network
|
|
7
|
-
@profile = profile
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def data
|
|
11
|
-
names = [
|
|
12
|
-
@profile, # user specified
|
|
13
|
-
Ufo.env, # conventional based on env
|
|
14
|
-
"default", # fallback to default
|
|
15
|
-
"base", # finally fallback to base
|
|
16
|
-
].compact.uniq
|
|
17
|
-
paths = names.map { |name| "#{Ufo.root}/.ufo/settings/#{@type}/#{name}.yml" }
|
|
18
|
-
found = paths.find { |p| File.exist?(p) }
|
|
19
|
-
unless found
|
|
20
|
-
puts "#{@type.camelize} profile not found. Please double check that it exists. Checked paths: #{paths}"
|
|
21
|
-
exit 1
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
text = RenderMePretty.result(found)
|
|
25
|
-
specific_data = yaml_load(text)
|
|
26
|
-
|
|
27
|
-
base = "#{Ufo.root}/.ufo/settings/#{@type}/base.yml"
|
|
28
|
-
base_data = if File.exist?(base)
|
|
29
|
-
text = RenderMePretty.result(base)
|
|
30
|
-
yaml_load(text)
|
|
31
|
-
else
|
|
32
|
-
{}
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
base_data.deep_merge(specific_data)
|
|
36
|
-
end
|
|
37
|
-
memoize :data
|
|
38
|
-
|
|
39
|
-
def yaml_load(text)
|
|
40
|
-
result = YAML.load(text) # yaml file can contain nothing but comments
|
|
41
|
-
result.is_a?(Hash) ? result.deep_symbolize_keys : {}
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
class Ufo::Setting
|
|
2
|
-
class SecurityGroups
|
|
3
|
-
include Ufo::Settings
|
|
4
|
-
extend Memoist
|
|
5
|
-
|
|
6
|
-
def initialize(service, type)
|
|
7
|
-
@service, @type = service, type
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def load
|
|
11
|
-
groups = network[@type] # IE: network[:ecs_security_groups] or network[:elb_security_groups]
|
|
12
|
-
return [] unless groups
|
|
13
|
-
|
|
14
|
-
case groups
|
|
15
|
-
when Array # same security groups used for all services
|
|
16
|
-
groups
|
|
17
|
-
when Hash # service specific security groups
|
|
18
|
-
groups[@service.to_sym] || []
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|