Beispiel #1
0
func containerDef(family *string, containerPort *int64, hostPort *int64, image *string, cpu *int64, memory *int64, essential bool, links []*string) *ecs.ContainerDefinition {
	portMapping := &ecs.PortMapping{
		ContainerPort: containerPort,
		HostPort:      hostPort,
		Protocol:      aws.String("tcp"),
	}
	mountPoint := &ecs.MountPoint{
		ContainerPath: aws.String("/var/www/" + (*family) + "-vol"),
		SourceVolume:  aws.String(*family + "-vol"),
		ReadOnly:      aws.Bool(false),
	}
	c := ecs.ContainerDefinition{}

	c.Name = aws.String(*family + "-app")
	c.Image = image
	c.Cpu = cpu
	c.Memory = memory
	c.Essential = aws.Bool(essential)
	c.Links = links
	if *hostPort != 0 {
		c.PortMappings = []*ecs.PortMapping{portMapping}
	}
	c.MountPoints = []*ecs.MountPoint{mountPoint}
	return &c
}
Beispiel #2
0
//
// Called by createTask() above. Given a filename, parse the JSON file and create a ContainerDefinition
// struct that can be passed to the SDK to create the task definition.
//
func makeTaskDefinition(taskFile string) (ecs.ContainerDefinition, string) {
	var taskJSON TaskDefn
	// Do it the easy way and read in the whole file. A JSON file's not going to be very large.
	fileBytes, err := ioutil.ReadFile(taskFile)
	CheckError(fmt.Sprintf("Error reading task file %s", taskFile), err)
	err = json.Unmarshal(fileBytes, &taskJSON)
	CheckError(fmt.Sprintf("Error reading task file %s", taskFile), err)
	// TODO: Support more than one if it's ever needed.
	if len(taskJSON.ContainerDefinitions) > 1 {
		fmt.Println("Right now I only support a single ContainerDefinition, sorry. Please edit and try again.")
		os.Exit(1)
	}

	// Now let's construct our Container Definition object, which is a lot of boring copying of fields.
	var defn ecs.ContainerDefinition
	defn.Cpu = &taskJSON.ContainerDefinitions[0].CPU
	var commands = make([]*string, 0)
	for i := 0; i < len(taskJSON.ContainerDefinitions[0].Command); i++ {
		commands = append(commands, &taskJSON.ContainerDefinitions[0].Command[i])
	}
	defn.Command = commands
	var entrypoints = make([]*string, 0)
	for i := 0; i < len(taskJSON.ContainerDefinitions[0].EntryPoint); i++ {
		entrypoints = append(entrypoints, &taskJSON.ContainerDefinitions[0].EntryPoint[i])
	}
	defn.EntryPoint = entrypoints
	var environments = make([]*ecs.KeyValuePair, 0)
	for i := 0; i < len(taskJSON.ContainerDefinitions[0].Environment); i++ {
		var keyval ecs.KeyValuePair
		keyval.Name = taskJSON.ContainerDefinitions[0].Environment[i].Name
		keyval.Value = taskJSON.ContainerDefinitions[0].Environment[i].Value
		environments = append(environments, &keyval)
	}
	defn.Environment = environments
	defn.Essential = &taskJSON.ContainerDefinitions[0].Essential
	defn.Image = &taskJSON.ContainerDefinitions[0].Image
	defn.Memory = &taskJSON.ContainerDefinitions[0].Memory
	defn.Name = &taskJSON.ContainerDefinitions[0].Name
	var ports = make([]*ecs.PortMapping, 0)
	for i := 0; i < len(taskJSON.ContainerDefinitions[0].PortMappings); i++ {
		var portmap ecs.PortMapping
		portmap.ContainerPort = taskJSON.ContainerDefinitions[0].PortMappings[i].ContainerPort
		portmap.HostPort = taskJSON.ContainerDefinitions[0].PortMappings[i].HostPort
		ports = append(ports, &portmap)
	}
	defn.PortMappings = ports
	return defn, taskJSON.Family
}
Beispiel #3
0
func registratorDefinition(hostname *string, advertiseIP *string) *ecs.ContainerDefinition {
	c := ecs.ContainerDefinition{}
	c.Name = aws.String("kinja-consul-registrator")
	c.Hostname = hostname
	c.Image = aws.String("gliderlabs/registrator:latest")
	c.Cpu = aws.Int64(100)
	c.Memory = aws.Int64(64)
	c.Essential = aws.Bool(true)
	c.MountPoints = []*ecs.MountPoint{
		&ecs.MountPoint{
			ContainerPath: aws.String("/tmp/docker.sock"),
			SourceVolume:  aws.String("consul-socket"),
			ReadOnly:      aws.Bool(false),
		},
	}

	c.Command = []*string{
		//aws.String("-ip  $(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)"),
		aws.String("-ip=" + *advertiseIP),
		aws.String("consul://" + *advertiseIP + ":8500"),
	}
	return &c
}
Beispiel #4
0
func consulDefinition(hostname *string, serverIP *string, advertiseIP *string) *ecs.ContainerDefinition {
	c := ecs.ContainerDefinition{}
	c.Name = aws.String("kinja-consul-agent")
	c.Hostname = hostname
	c.Image = aws.String("progrium/consul")
	c.Cpu = aws.Int64(156)
	c.Memory = aws.Int64(256)
	c.Essential = aws.Bool(true)
	c.PortMappings = []*ecs.PortMapping{
		&ecs.PortMapping{
			ContainerPort: aws.Int64(8301),
			HostPort:      aws.Int64(8301),
			Protocol:      aws.String("tcp"),
		},
		&ecs.PortMapping{
			ContainerPort: aws.Int64(8301),
			HostPort:      aws.Int64(8301),
			Protocol:      aws.String("udp"),
		},
		&ecs.PortMapping{
			ContainerPort: aws.Int64(8400),
			HostPort:      aws.Int64(8400),
			Protocol:      aws.String("tcp"),
		},
		&ecs.PortMapping{
			ContainerPort: aws.Int64(8500),
			HostPort:      aws.Int64(8500),
			Protocol:      aws.String("tcp"),
		},
		&ecs.PortMapping{
			ContainerPort: aws.Int64(53),
			HostPort:      aws.Int64(53),
			Protocol:      aws.String("udp"),
		},
	}
	c.MountPoints = []*ecs.MountPoint{
		&ecs.MountPoint{
			ContainerPath: aws.String("/data"),
			SourceVolume:  aws.String("consul-vol"),
			ReadOnly:      aws.Bool(false),
		},
		&ecs.MountPoint{
			ContainerPath: aws.String("/var/run/docker.sock"),
			SourceVolume:  aws.String("consul-socket"),
			ReadOnly:      aws.Bool(false),
		},
		&ecs.MountPoint{
			ContainerPath: aws.String("/etc/consul"),
			SourceVolume:  aws.String("consul-config"),
			ReadOnly:      aws.Bool(false),
		},
	}

	session := sess.InitSession()

	c.Command = []*string{
		aws.String("--join " + *serverIP),
		//aws.String("--advertise  $(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)"),
		aws.String("--advertise " + *advertiseIP),
		aws.String("-dc " + *session.Config.Region),
		aws.String("--config-file /etc/consul/consul.json"),
	}
	return &c
}