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
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Ufo::Docker
|
|
2
|
+
class State
|
|
3
|
+
include Ufo::Utils::Logging
|
|
4
|
+
include Ufo::Utils::Pretty
|
|
5
|
+
|
|
6
|
+
def initialize(docker_image, options={})
|
|
7
|
+
@docker_image, @options = docker_image, options
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def update
|
|
11
|
+
data = current_data
|
|
12
|
+
data[Ufo.env] ||= {}
|
|
13
|
+
data[Ufo.env]["base_image"] = @docker_image
|
|
14
|
+
pretty_path = state_path.sub("#{Ufo.root}/", "")
|
|
15
|
+
FileUtils.mkdir_p(File.dirname(state_path))
|
|
16
|
+
IO.write(state_path, YAML.dump(data))
|
|
17
|
+
logger.info "The #{pretty_path} base_image has been updated with the latest base image:".color(:green)
|
|
18
|
+
logger.info " #{@docker_image}".color(:green)
|
|
19
|
+
reminder_message
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def current_data
|
|
23
|
+
File.exist?(state_path) ? YAML.load_file(state_path) : {}
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def state_path
|
|
27
|
+
path = "#{Ufo.root}/.ufo/state"
|
|
28
|
+
if ENV['UFO_APP'] # env var activates app path
|
|
29
|
+
path = "#{Ufo.root}/.ufo/state/#{Ufo.app}"
|
|
30
|
+
end
|
|
31
|
+
"#{path}/data.yml"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def reminder_message
|
|
35
|
+
return unless Ufo.config.state.reminder
|
|
36
|
+
repo = ENV['UFO_CENTRAL_REPO']
|
|
37
|
+
return unless repo
|
|
38
|
+
logger.info "It looks like you're using a central deployer pattern".color(:yellow)
|
|
39
|
+
logger.info <<~EOL
|
|
40
|
+
Remember to commit the state file:
|
|
41
|
+
|
|
42
|
+
state file: #{pretty_path(state_path)}
|
|
43
|
+
repo: #{repo}
|
|
44
|
+
|
|
45
|
+
EOL
|
|
46
|
+
|
|
47
|
+
unless ENV['UFO_APP']
|
|
48
|
+
logger.info "WARN: It also doesnt look like UFO_ENV is set".color(:yellow)
|
|
49
|
+
logger.info "UFO_ENV should be set when you're using ufo in a central manner"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
logger.info <<~EOL
|
|
53
|
+
You can disable these reminder messages with:
|
|
54
|
+
|
|
55
|
+
.ufo/config.rb
|
|
56
|
+
|
|
57
|
+
Ufo.configure do |config|
|
|
58
|
+
config.state.reminder = false
|
|
59
|
+
end
|
|
60
|
+
EOL
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
data/lib/ufo/ecr/auth.rb
CHANGED
|
@@ -17,11 +17,12 @@ This class manipulates the ~/.docker/config.json file which is an internal docke
|
|
|
17
17
|
=end
|
|
18
18
|
module Ufo
|
|
19
19
|
class Ecr::Auth
|
|
20
|
-
include
|
|
20
|
+
include Ufo::AwsServices
|
|
21
|
+
include Ufo::Utils::Logging
|
|
21
22
|
|
|
22
|
-
def initialize(
|
|
23
|
-
@
|
|
24
|
-
@repo_domain = "#{
|
|
23
|
+
def initialize(docker_image)
|
|
24
|
+
@docker_image = docker_image
|
|
25
|
+
@repo_domain = "#{docker_image.split('/').first}"
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
def update
|
|
@@ -32,16 +33,16 @@ module Ufo
|
|
|
32
33
|
username, password = Base64.decode64(auth_token).split(':')
|
|
33
34
|
|
|
34
35
|
command = "docker login -u #{username} --password-stdin #{@repo_domain}"
|
|
35
|
-
|
|
36
|
+
logger.debug "=> #{command}".color(:green)
|
|
36
37
|
*, status = Open3.capture3(command, stdin_data: password)
|
|
37
38
|
unless status.success?
|
|
38
|
-
|
|
39
|
+
logger.error "ERROR: The docker failed to login.".color(:red)
|
|
39
40
|
exit 1
|
|
40
41
|
end
|
|
41
42
|
end
|
|
42
43
|
|
|
43
44
|
def ecr_image?
|
|
44
|
-
!!(@
|
|
45
|
+
!!(@docker_image =~ /\.amazonaws\.com/)
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
def fetch_auth_token
|
data/lib/ufo/ecr/cleaner.rb
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
require "json"
|
|
2
2
|
|
|
3
|
-
# Can test:
|
|
4
|
-
#
|
|
5
|
-
# ufo ship app-web --cluster prod --noop
|
|
6
3
|
module Ufo
|
|
7
4
|
class Ecr::Cleaner
|
|
8
|
-
include
|
|
9
|
-
include
|
|
5
|
+
include Ufo::AwsServices
|
|
6
|
+
include Ufo::Utils::Execute
|
|
7
|
+
include Ufo::Utils::Logging
|
|
10
8
|
|
|
11
9
|
def initialize(docker_image_name, options={})
|
|
12
10
|
# docker_image_name does not containg the tag
|
|
13
11
|
# Example: 123456789.dkr.ecr.us-east-1.amazonaws.com/image
|
|
14
12
|
@docker_image_name = docker_image_name
|
|
15
13
|
@options = options
|
|
16
|
-
@keep = options[:ecr_keep] ||
|
|
14
|
+
@keep = options[:ecr_keep] || Ufo.config.docker.ecr_keep
|
|
17
15
|
@tag_prefix = options[:tag_prefix] || "ufo"
|
|
18
16
|
end
|
|
19
17
|
|
|
20
18
|
def cleanup
|
|
21
|
-
return false unless ecr_image?
|
|
22
19
|
return false unless @keep
|
|
20
|
+
return false unless ecr_image?
|
|
23
21
|
update_auth_token
|
|
24
22
|
image_tags = fetch_image_tags
|
|
25
23
|
delete_tags = image_tags[@keep..-1] # ordered by most recent images first
|
|
@@ -36,16 +34,14 @@ module Ufo
|
|
|
36
34
|
|
|
37
35
|
def delete_images(tags)
|
|
38
36
|
return if tags.nil? || tags.empty?
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
puts tag_list
|
|
44
|
-
end
|
|
37
|
+
logger.info "Keeping #{@keep} most recent ECR images."
|
|
38
|
+
logger.info "Deleting these ECR images:"
|
|
39
|
+
tag_list = tags.map { |t| " #{repo_name}:#{t}" }
|
|
40
|
+
logger.info tag_list
|
|
45
41
|
image_ids = tags.map { |tag| {image_tag: tag} }
|
|
46
42
|
ecr.batch_delete_image(
|
|
47
43
|
repository_name: repo_name,
|
|
48
|
-
image_ids: image_ids)
|
|
44
|
+
image_ids: image_ids)
|
|
49
45
|
end
|
|
50
46
|
|
|
51
47
|
def update_auth_token
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
# Include all modules within the relative folder. IE: for dsl/syntax/mod/*
|
|
3
|
+
#
|
|
4
|
+
# include Common
|
|
5
|
+
# include Provider
|
|
6
|
+
# # etc
|
|
7
|
+
#
|
|
8
|
+
# Caller lines are different for OSes:
|
|
9
|
+
#
|
|
10
|
+
# windows: "C:/Ruby31-x64/lib/ruby/gems/3.1.0/gems/lono-1.1.1/lib/lono/builder.rb:34:in `build'"
|
|
11
|
+
# linux: "/home/ec2-user/.rvm/gems/ruby-3.0.3/gems/lono-1.1.1/lib/lono/compiler/dsl/syntax/mod.rb:4:in `<module:Mod>'"
|
|
12
|
+
#
|
|
13
|
+
def include_modules(dir)
|
|
14
|
+
caller_line = caller[0]
|
|
15
|
+
parts = caller_line.split(':')
|
|
16
|
+
calling_file = caller_line.match(/^[a-zA-Z]:/) ? parts[1] : parts[0]
|
|
17
|
+
parent_dir = File.dirname(calling_file)
|
|
18
|
+
|
|
19
|
+
full_dir = "#{parent_dir}/#{dir}"
|
|
20
|
+
paths = Dir.glob("#{full_dir}/**/*.rb")
|
|
21
|
+
if paths.empty?
|
|
22
|
+
raise "Empty include_modules full_dir: #{full_dir}"
|
|
23
|
+
end
|
|
24
|
+
paths.each do |path|
|
|
25
|
+
regexp = Regexp.new(".*/lib/")
|
|
26
|
+
mod = path.sub(regexp, '').sub('.rb','').camelize
|
|
27
|
+
c = mod.constantize
|
|
28
|
+
include c if c.class == Module
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
data/lib/ufo/ext.rb
ADDED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
module Ufo::
|
|
1
|
+
module Ufo::IamRole
|
|
2
2
|
class DSL
|
|
3
|
+
include DslEvaluator
|
|
4
|
+
|
|
3
5
|
def initialize(path)
|
|
4
6
|
@path = path # IE: .ufo/iam_roles/task_role.rb
|
|
5
7
|
end
|
|
6
8
|
|
|
7
9
|
def evaluate
|
|
8
|
-
|
|
10
|
+
evaluate_file(@path)
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
def iam_policy(policy_name, statements)
|
|
@@ -17,5 +19,9 @@ module Ufo::Role
|
|
|
17
19
|
role_type = File.basename(@path).sub('.rb','') # task_role or execution_role
|
|
18
20
|
Registry.register_managed_policy(role_type, policies)
|
|
19
21
|
end
|
|
22
|
+
|
|
23
|
+
def aws
|
|
24
|
+
AwsData.new
|
|
25
|
+
end
|
|
20
26
|
end
|
|
21
27
|
end
|
data/lib/ufo/info.rb
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module Ufo
|
|
2
|
-
class Info < Base
|
|
2
|
+
class Info < Ufo::CLI::Base
|
|
3
|
+
include Ufo::AwsServices
|
|
4
|
+
|
|
3
5
|
def run
|
|
4
6
|
unless service
|
|
5
7
|
puts no_service_message
|
|
@@ -7,12 +9,15 @@ module Ufo
|
|
|
7
9
|
end
|
|
8
10
|
puts "Resources:"
|
|
9
11
|
stack_resources.each do |r|
|
|
10
|
-
# pp r
|
|
11
12
|
puts "#{r.logical_resource_id} - #{r.resource_type}:".color(:green)
|
|
12
13
|
puts " #{r.physical_resource_id}"
|
|
13
14
|
end
|
|
14
15
|
end
|
|
15
16
|
|
|
17
|
+
def no_service_message
|
|
18
|
+
"No stack #{@stack_name.color(:green)} found"
|
|
19
|
+
end
|
|
20
|
+
|
|
16
21
|
# Passing in service so method can be used else where.
|
|
17
22
|
def load_balancer(service)
|
|
18
23
|
load_balancer = service.load_balancers.first
|
|
@@ -33,24 +38,37 @@ module Ufo
|
|
|
33
38
|
return unless stack
|
|
34
39
|
|
|
35
40
|
service = stack_resources.find { |r| r.resource_type == "AWS::ECS::Service" }
|
|
41
|
+
return unless service # stack is still creating
|
|
36
42
|
arn = service.physical_resource_id
|
|
37
43
|
resp = ecs.describe_services(services: [arn], cluster: @cluster)
|
|
38
44
|
resp.services.first
|
|
39
45
|
end
|
|
40
46
|
memoize :service
|
|
41
47
|
|
|
48
|
+
def service?
|
|
49
|
+
!!service
|
|
50
|
+
end
|
|
51
|
+
|
|
42
52
|
def stack
|
|
43
53
|
find_stack(@stack_name)
|
|
44
54
|
end
|
|
45
55
|
memoize :stack
|
|
46
56
|
|
|
47
|
-
def
|
|
57
|
+
def url
|
|
48
58
|
return unless stack
|
|
49
59
|
|
|
50
60
|
output = stack.outputs.find do |o|
|
|
51
61
|
o.output_key == "Route53Dns"
|
|
52
62
|
end
|
|
53
|
-
output.output_value if output
|
|
63
|
+
dns_name = output.output_value if output
|
|
64
|
+
return unless dns_name
|
|
65
|
+
|
|
66
|
+
ssl = stack_resources.detect.find do |r|
|
|
67
|
+
r.logical_resource_id == "ListenerSsl"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
protocol = ssl ? 'https' : 'http'
|
|
71
|
+
"#{protocol}://#{dns_name}"
|
|
54
72
|
end
|
|
55
73
|
|
|
56
74
|
def stack_resources
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
require "aws_data"
|
|
2
|
+
|
|
3
|
+
# Layers example
|
|
4
|
+
#
|
|
5
|
+
# .ufo/vars.rb
|
|
6
|
+
# .ufo/vars/base.rb
|
|
7
|
+
# .ufo/vars/dev.rb
|
|
8
|
+
# .ufo/vars/prod.rb
|
|
9
|
+
# .ufo/vars/app1.rb
|
|
10
|
+
# .ufo/vars/app1/base.rb
|
|
11
|
+
# .ufo/vars/app1/dev.rb
|
|
12
|
+
# .ufo/vars/app1/prod.rb
|
|
13
|
+
#
|
|
14
|
+
module Ufo::Layering
|
|
15
|
+
class Layer
|
|
16
|
+
extend Memoist
|
|
17
|
+
include Ufo::Layering
|
|
18
|
+
include Ufo::Utils::Logging
|
|
19
|
+
include Ufo::Utils::Pretty
|
|
20
|
+
|
|
21
|
+
def initialize(task_definition)
|
|
22
|
+
@task_definition = task_definition
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def paths
|
|
26
|
+
core = full_layers(".ufo/vars")
|
|
27
|
+
app = full_layers(".ufo/vars/#{Ufo.app}")
|
|
28
|
+
paths = core + app
|
|
29
|
+
add_ext!(paths)
|
|
30
|
+
paths.map! { |p| "#{Ufo.root}/#{p}" }
|
|
31
|
+
show_layers(paths)
|
|
32
|
+
paths
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def full_layering
|
|
36
|
+
# layers defined in Lono::Layering module
|
|
37
|
+
all = layers.map { |layer| layer.sub(/\/$/,'') } # strip trailing slash
|
|
38
|
+
all.inject([]) do |sum, layer|
|
|
39
|
+
sum += layer_levels(layer) unless layer.nil?
|
|
40
|
+
sum
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# interface method
|
|
45
|
+
def main_layers
|
|
46
|
+
['']
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# adds prefix and to each layer pair that has base and Ufo.env. IE:
|
|
50
|
+
#
|
|
51
|
+
# "#{prefix}/base"
|
|
52
|
+
# "#{prefix}/#{Ufo.env}"
|
|
53
|
+
#
|
|
54
|
+
def layer_levels(prefix=nil)
|
|
55
|
+
levels = ["base", Ufo.env]
|
|
56
|
+
levels.map! do |i|
|
|
57
|
+
# base layer has prefix of '', reject with blank so it doesnt produce '//'
|
|
58
|
+
[prefix, i].reject(&:blank?).join('/')
|
|
59
|
+
end
|
|
60
|
+
levels.unshift(prefix) # unless prefix.blank? # IE: params/us-west-2.txt
|
|
61
|
+
levels
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def add_ext!(paths)
|
|
65
|
+
ext = "rb"
|
|
66
|
+
paths.map! do |path|
|
|
67
|
+
path = path.sub(/\/$/,'') if path.ends_with?('/')
|
|
68
|
+
"#{path}.rb"
|
|
69
|
+
end
|
|
70
|
+
paths
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def full_layers(dir)
|
|
74
|
+
layers = full_layering.map do |layer|
|
|
75
|
+
"#{dir}/#{layer}"
|
|
76
|
+
end
|
|
77
|
+
role_layers = full_layering.map do |layer|
|
|
78
|
+
"#{dir}/#{@task_definition.role}/#{layer}" # Note: layer can be '' will clean up
|
|
79
|
+
end
|
|
80
|
+
layers += role_layers
|
|
81
|
+
layers.map { |l| l.gsub('//','/') } # cleanup // if layer is ''
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
@@shown_layers = false
|
|
85
|
+
def show_layers(paths)
|
|
86
|
+
return if @@shown_layers
|
|
87
|
+
logger.info "Vars Layers:" if ENV['UFO_SHOW_ALL_LAYERS']
|
|
88
|
+
paths.each do |path|
|
|
89
|
+
show_layer = File.exist?(path) && logger.level <= Logger::DEBUG
|
|
90
|
+
logger.info " #{pretty_path(path)}" if show_layer || ENV['UFO_SHOW_ALL_LAYERS']
|
|
91
|
+
end
|
|
92
|
+
@@shown_layers = true
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
data/lib/ufo/layering.rb
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "active_support/lazy_load_hooks"
|
|
2
|
+
|
|
3
|
+
module Ufo
|
|
4
|
+
module Layering
|
|
5
|
+
def layers
|
|
6
|
+
pre_layers + main_layers + post_layers
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def main_layers
|
|
10
|
+
super
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def pre_layers
|
|
14
|
+
[]
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def post_layers
|
|
18
|
+
[]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
ActiveSupport.run_load_hooks(:ufo_layering, Ufo::Layering)
|
data/lib/ufo/log_group.rb
CHANGED
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
# Use to automatically create the CloudWatch group.
|
|
2
2
|
# For some reason creating ECS does do this by default.
|
|
3
3
|
module Ufo
|
|
4
|
-
class LogGroup
|
|
5
|
-
include
|
|
6
|
-
|
|
7
|
-
def initialize(task_definition, options)
|
|
8
|
-
@task_definition, @options = task_definition, options
|
|
9
|
-
end
|
|
4
|
+
class LogGroup < Ufo::CLI::Base
|
|
5
|
+
include Ufo::AwsServices
|
|
10
6
|
|
|
11
7
|
def create
|
|
12
|
-
|
|
8
|
+
logger.debug "Ensuring log group for #{@task_definition.name.color(:green)} task definition exists"
|
|
13
9
|
return if @options[:noop]
|
|
14
10
|
return if @options[:rollback] # dont need to create log group because previously deployed
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
check_task_definition_exists!
|
|
17
13
|
task_def = JSON.load(IO.read(task_def_path))
|
|
18
14
|
task_def["containerDefinitions"].each do |container_def|
|
|
19
15
|
begin
|
|
20
16
|
log_group_name = container_def["logConfiguration"]["options"]["awslogs-group"]
|
|
21
|
-
|
|
17
|
+
logger.debug "Log group name: #{log_group_name}"
|
|
22
18
|
rescue NoMethodError
|
|
23
19
|
# silence when the logConfiguration is not specified
|
|
24
20
|
end
|
|
@@ -34,7 +30,19 @@ module Ufo
|
|
|
34
30
|
end
|
|
35
31
|
|
|
36
32
|
def task_def_path
|
|
37
|
-
"#{Ufo.root}/.ufo/output
|
|
33
|
+
"#{Ufo.root}/.ufo/output/task_definition.json"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def check_task_definition_exists!
|
|
37
|
+
return if File.exist?(task_def_path)
|
|
38
|
+
logger.error "ERROR: Unable to find the task definition at #{task_def_path}.".color(:red)
|
|
39
|
+
logger.error <<~EOL
|
|
40
|
+
Please double check that it was built correctly with:
|
|
41
|
+
|
|
42
|
+
ufo build
|
|
43
|
+
|
|
44
|
+
EOL
|
|
45
|
+
exit 1
|
|
38
46
|
end
|
|
39
47
|
end
|
|
40
48
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
class Ufo::Logger
|
|
2
|
+
class Formatter < ::Logger::Formatter
|
|
3
|
+
def call(severity, time, progname, msg)
|
|
4
|
+
# careful changing the format. All::Summary uses a regexp on this format to remove the timestamp
|
|
5
|
+
"[#{format_datetime(time)} ##{Process.pid} #{progname}]: #{msg}"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
private
|
|
9
|
+
def format_datetime(time)
|
|
10
|
+
time.strftime("%Y-%m-%dT%H:%M:%S")
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
data/lib/ufo/logger.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'logger'
|
|
2
|
+
|
|
3
|
+
module Ufo
|
|
4
|
+
class Logger < ::Logger
|
|
5
|
+
def initialize(*args)
|
|
6
|
+
super
|
|
7
|
+
self.formatter = Formatter.new
|
|
8
|
+
self.level = ENV['UFO_LOG_LEVEL'] || :info # note: only respected when config.logger not set in config/app.rb
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def format_message(severity, datetime, progname, msg)
|
|
12
|
+
line = if @logdev.dev == $stdout || @logdev.dev == $stderr || @logdev.dev.is_a?(StringIO)
|
|
13
|
+
msg # super simple format if stdout
|
|
14
|
+
else
|
|
15
|
+
super # use the configured formatter
|
|
16
|
+
end
|
|
17
|
+
line =~ /\n$/ ? line : "#{line}\n"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Used to allow output to always go to stdout
|
|
21
|
+
def stdout(msg, newline: true)
|
|
22
|
+
if newline
|
|
23
|
+
puts msg
|
|
24
|
+
else
|
|
25
|
+
print msg
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
public :print
|
|
30
|
+
public :printf
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/ufo/names.rb
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
module Ufo
|
|
2
|
+
class Names
|
|
3
|
+
extend Memoist
|
|
4
|
+
|
|
5
|
+
attr_reader :role
|
|
6
|
+
def initialize
|
|
7
|
+
@role = Ufo.role
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def cluster
|
|
11
|
+
expansion(Ufo.config.ecs.cluster) # IE: :ENV => dev
|
|
12
|
+
end
|
|
13
|
+
memoize :cluster
|
|
14
|
+
|
|
15
|
+
def stack
|
|
16
|
+
name = expansion(Ufo.config.names.stack) # IE: :APP-:ROLE-:ENV => demo-web-dev
|
|
17
|
+
[name, Ufo.extra].compact.join('-')
|
|
18
|
+
end
|
|
19
|
+
memoize :stack
|
|
20
|
+
|
|
21
|
+
def task_definition
|
|
22
|
+
expansion(Ufo.config.names.task_definition) # IE: :APP-:ROLE-:ENV => demo-web-dev
|
|
23
|
+
end
|
|
24
|
+
memoize :task_definition
|
|
25
|
+
|
|
26
|
+
def expansion(string, options={})
|
|
27
|
+
return string unless string.is_a?(String) # in case of nil
|
|
28
|
+
|
|
29
|
+
string = string.dup
|
|
30
|
+
vars = string.scan(/:\w+/) # => [":APP", ":ROLE", :ENV"]
|
|
31
|
+
vars.each do |var|
|
|
32
|
+
string.gsub!(var, var_value(var))
|
|
33
|
+
end
|
|
34
|
+
string = strip(string)
|
|
35
|
+
dashes = options[:dasherize].nil? ? true : options[:dasherize]
|
|
36
|
+
string = string.dasherize if dashes
|
|
37
|
+
string
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def var_value(unexpanded)
|
|
41
|
+
name = unexpanded.sub(':','').downcase
|
|
42
|
+
if respond_to?(name)
|
|
43
|
+
send(name).to_s # pass value straight through
|
|
44
|
+
else
|
|
45
|
+
unexpanded
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def strip(string)
|
|
50
|
+
string.sub(/^-+/,'').sub(/-+$/,'') # remove leading and trailing -
|
|
51
|
+
.gsub(%r{-+},'-') # remove double dashes are more. IE: -- => -
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def app
|
|
55
|
+
Ufo.app
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def env
|
|
59
|
+
Ufo.env
|
|
60
|
+
end
|
|
61
|
+
alias_method :ufo_env, :env
|
|
62
|
+
|
|
63
|
+
delegate :region, to: :aws
|
|
64
|
+
def aws
|
|
65
|
+
AwsData.new
|
|
66
|
+
end
|
|
67
|
+
memoize :aws
|
|
68
|
+
end
|
|
69
|
+
end
|
data/lib/ufo/param.rb
CHANGED
|
@@ -18,7 +18,8 @@ module Ufo
|
|
|
18
18
|
memoize :data
|
|
19
19
|
|
|
20
20
|
def template_scope
|
|
21
|
-
|
|
21
|
+
self # TODO: add access to helpers like network
|
|
22
|
+
# @template_scope ||= Ufo::TemplateScope.new(Ufo::DSL::Helper.new, nil)
|
|
22
23
|
end
|
|
23
24
|
end
|
|
24
25
|
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
class Ufo::TaskDefinition
|
|
2
|
+
module Context
|
|
3
|
+
include DslEvaluator
|
|
4
|
+
include Helpers
|
|
5
|
+
|
|
6
|
+
def load_context
|
|
7
|
+
load_variables
|
|
8
|
+
load_custom_helpers
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def load_variables
|
|
12
|
+
layers = Ufo::Layering::Layer.new(@task_definition).paths
|
|
13
|
+
layers.each do |layer|
|
|
14
|
+
evaluate_file(layer)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def load_custom_helpers
|
|
19
|
+
load_helper_files("#{Ufo.root}/.ufo/helpers")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Load custom project helper methods
|
|
23
|
+
def load_helper_files(dir)
|
|
24
|
+
paths = Dir.glob("#{dir}/**/*.rb")
|
|
25
|
+
paths.sort_by! { |p| p.size } # so namespaces are loaded first
|
|
26
|
+
paths.each do |path|
|
|
27
|
+
next unless File.file?(path)
|
|
28
|
+
|
|
29
|
+
filename = path.sub(%r{.*/helpers/},'').sub('.rb','')
|
|
30
|
+
module_name = filename.camelize
|
|
31
|
+
|
|
32
|
+
# Prepend a period so require works when UFO_ROOT is set to a relative path without a period.
|
|
33
|
+
# Example: UFO_ROOT=tmp/ufo_project
|
|
34
|
+
first_char = path[0..0]
|
|
35
|
+
path = "./#{path}" unless %w[. /].include?(first_char)
|
|
36
|
+
|
|
37
|
+
# Examples:
|
|
38
|
+
# path: .ufo/helpers/custom_helper.rb
|
|
39
|
+
# module_name: CustomHelper
|
|
40
|
+
require path
|
|
41
|
+
self.class.send :include, module_name.constantize
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
class Ufo::TaskDefinition::Erb
|
|
2
|
+
class Base < Ufo::CLI::Base
|
|
3
|
+
def initialize(options={})
|
|
4
|
+
super
|
|
5
|
+
@path = options[:path]
|
|
6
|
+
@task_definition = options[:task_definition]
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def print_code(text)
|
|
10
|
+
lines = text.split("\n")
|
|
11
|
+
lpad = lines.size.to_s.size
|
|
12
|
+
lines.each_with_index do |line,n|
|
|
13
|
+
printf("%#{lpad}d %s\n", n+1, line)
|
|
14
|
+
end
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|