mirror of
https://github.com/docker/compose.git
synced 2025-07-09 23:04:26 +02:00
Introduct option to re-use LoadBalancer
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
parent
a44ee2a4ed
commit
dd48cc4599
@ -76,7 +76,19 @@ func ComposeCommand(clusteropts *clusterOptions) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type upOptions struct {
|
||||||
|
loadBalancerArn string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o upOptions) LoadBalancerArn() *string {
|
||||||
|
if o.loadBalancerArn == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &o.loadBalancerArn
|
||||||
|
}
|
||||||
|
|
||||||
func UpCommand(clusteropts *clusterOptions, projectOpts *compose.ProjectOptions) *cobra.Command {
|
func UpCommand(clusteropts *clusterOptions, projectOpts *compose.ProjectOptions) *cobra.Command {
|
||||||
|
opts := upOptions{}
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "up",
|
Use: "up",
|
||||||
RunE: compose.WithProject(projectOpts, func(project *compose.Project, args []string) error {
|
RunE: compose.WithProject(projectOpts, func(project *compose.Project, args []string) error {
|
||||||
@ -84,22 +96,30 @@ func UpCommand(clusteropts *clusterOptions, projectOpts *compose.ProjectOptions)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return client.ComposeUp(project)
|
return client.ComposeUp(project, opts.LoadBalancerArn())
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
cmd.Flags().StringVar(&opts.loadBalancerArn, "load-balancer", "", "")
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func DownCommand(clusteropts *clusterOptions, opts *compose.ProjectOptions) *cobra.Command {
|
type downOptions struct {
|
||||||
|
KeepLoadBalancer bool
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func DownCommand(clusteropts *clusterOptions, projectOpts *compose.ProjectOptions) *cobra.Command {
|
||||||
|
opts := downOptions{}
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "down",
|
Use: "down",
|
||||||
RunE: compose.WithProject(opts, func(project *compose.Project, args []string) error {
|
RunE: compose.WithProject(projectOpts, func(project *compose.Project, args []string) error {
|
||||||
client, err := amazon.NewClient(clusteropts.profile, clusteropts.cluster, clusteropts.region)
|
client, err := amazon.NewClient(clusteropts.profile, clusteropts.cluster, clusteropts.region)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return client.ComposeDown(project)
|
return client.ComposeDown(project, opts.KeepLoadBalancer)
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
cmd.Flags().BoolVar(&opts.KeepLoadBalancer, "keep-load-balancer", false, "Keep Load Balancer for further use")
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
@ -8,8 +8,8 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *client) ComposeDown(project *compose.Project) error {
|
func (c *client) ComposeDown(project *compose.Project, keepLoadBalancer bool) error {
|
||||||
err := c.DeleteLoadBalancer(project)
|
err := c.DeleteLoadBalancer(project, keepLoadBalancer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ func (c client) CreateLoadBalancer(project *compose.Project, subnets []*string)
|
|||||||
return alb.LoadBalancers[0].LoadBalancerArn, nil
|
return alb.LoadBalancers[0].LoadBalancerArn, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c client) DeleteLoadBalancer(project *compose.Project) error {
|
func (c client) DeleteLoadBalancer(project *compose.Project, keepLoadBalancer bool) error {
|
||||||
logrus.Debug("Delete Load Balancer")
|
logrus.Debug("Delete Load Balancer")
|
||||||
// FIXME We can tag LoadBalancer but not search by tag ?
|
// FIXME We can tag LoadBalancer but not search by tag ?
|
||||||
loadBalancer, err := c.ELB.DescribeLoadBalancers(&elbv2.DescribeLoadBalancersInput{
|
loadBalancer, err := c.ELB.DescribeLoadBalancers(&elbv2.DescribeLoadBalancersInput{
|
||||||
@ -52,7 +52,9 @@ func (c client) DeleteLoadBalancer(project *compose.Project) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.ELB.DeleteLoadBalancer(&elbv2.DeleteLoadBalancerInput{LoadBalancerArn: arn})
|
if !keepLoadBalancer {
|
||||||
|
_, err = c.ELB.DeleteLoadBalancer(&elbv2.DeleteLoadBalancerInput{LoadBalancerArn: arn})
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (c *client) ComposeUp(project *compose.Project) error {
|
func (c *client) ComposeUp(project *compose.Project, loadBalancerArn *string) error {
|
||||||
type mapping struct {
|
type mapping struct {
|
||||||
service *types.ServiceConfig
|
service *types.ServiceConfig
|
||||||
task *ecs.RegisterTaskDefinitionInput
|
task *ecs.RegisterTaskDefinitionInput
|
||||||
@ -41,9 +41,11 @@ func (c *client) ComposeUp(project *compose.Project) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
loadBalancer, err := c.CreateLoadBalancer(project, subnets)
|
if loadBalancerArn == nil {
|
||||||
if err != nil {
|
loadBalancerArn, err = c.CreateLoadBalancer(project, subnets)
|
||||||
return err
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logGroup, err := c.GetOrCreateLogGroup(project)
|
logGroup, err := c.GetOrCreateLogGroup(project)
|
||||||
@ -65,7 +67,7 @@ func (c *client) ComposeUp(project *compose.Project) error {
|
|||||||
TargetGroupArn: targetgroup,
|
TargetGroupArn: targetgroup,
|
||||||
})
|
})
|
||||||
|
|
||||||
err = c.CreateListener(port, loadBalancer, targetgroup)
|
err = c.CreateListener(port, loadBalancerArn, targetgroup)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package compose
|
package compose
|
||||||
|
|
||||||
type API interface {
|
type API interface {
|
||||||
ComposeUp(project *Project) error
|
ComposeUp(project *Project, loadBalancerArn *string) error
|
||||||
ComposeDown(project *Project) error
|
ComposeDown(project *Project, keepLoadBalancer bool) error
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user