Skip to content

Commit

Permalink
Added --release flag to packer build tools.
Browse files Browse the repository at this point in the history
When using the --release flag, we build a public image.
This is to be consumed by regular users who aren't
interested in custom amis.

Closes #164
  • Loading branch information
rustyrazorblade committed Jul 12, 2024
1 parent ecd7b6a commit 6bcb589
Show file tree
Hide file tree
Showing 10 changed files with 66 additions and 10 deletions.
4 changes: 3 additions & 1 deletion bin/easy-cass-lab
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ EASY_CASS_LAB_USER_DATA=~/.easy-cass-lab/

JAR=$(find ${BASE_CLUSTER_DIR}/build/libs -name 'easy-cass-lab-*-all.jar' | sort | tail -n 1)

java -jar $JAR "$@"
VERSION=$(grep '^version' gradle.properties | cut -d '=' -f2)

java -Deasycasslab.version=$VERSION -jar $JAR "$@"

3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@ application {
applicationName = "easy-cass-lab"
mainClass.set(" com.rustyrazorblade.easycasslab.MainKt")
applicationDefaultJvmArgs= ["-Deasycasslab.ami.name=rustyrazorblade/images/easy-cass-lab-cassandra-amd64-$version",
"-Deasycasslab.ami.owner=081145431955"]
"-Deasycasslab.ami.owner=081145431955",
"-Deasycasslab.version=$version"]
}

// In this section you declare where to find the dependencies of your project
Expand Down
3 changes: 3 additions & 0 deletions packer/base.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ variable "region" {
type = string
default = "us-west-2"
}

variable "release_version" {
type = string
default = ""
Expand All @@ -24,10 +25,12 @@ variable "release_version" {
locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
version = var.release_version != "" ? var.release_version : local.timestamp
ami_groups = var.release_version != "" ? ["all"] : []
}

source "amazon-ebs" "ubuntu" {
ami_name = "rustyrazorblade/images/easy-cass-lab-base-${var.arch}-${local.version}"
ami_groups = local.ami_groups
instance_type = "c3.xlarge"
region = "${var.region}"
source_ami_filter {
Expand Down
8 changes: 6 additions & 2 deletions packer/cassandra.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,24 @@ variable "region" {
type = string
default = "us-west-2"
}
variable "release_version" {

variable "release_version" {
type = string
default = ""
}


locals {
timestamp = regex_replace(timestamp(), "[- TZ:]", "")
base_version = var.release_version != "" ? var.release_version : "*"
version = var.release_version != "" ? var.release_version : local.timestamp
region = "us-west-2"
ami_groups = var.release_version != "" ? ["all"] : []

}

source "amazon-ebs" "ubuntu" {
ami_name = "rustyrazorblade/images/easy-cass-lab-cassandra-${var.arch}-${local.version}"
ami_groups = local.ami_groups
instance_type = "c3.xlarge"
region = "${var.region}"
source_ami_filter {
Expand Down
7 changes: 7 additions & 0 deletions src/main/kotlin/com/rustyrazorblade/easycasslab/Context.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,12 @@ data class Context(val easycasslabUserDirectory: File) {

val log = logger()

/**
* Version is either supplied by the in-repo script,
* or the version generated by the application plugin
*/
val version = System.getProperty("easycasslab.version").toInt()

fun createBuildSkeleton(name: String) {

val buildLocation = File(cassandraBuildDir, name)
Expand Down Expand Up @@ -200,4 +206,5 @@ data class Context(val easycasslabUserDirectory: File) {
System.exit(1)
}
}

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package com.rustyrazorblade.easycasslab.commands

import com.beust.jcommander.Parameters
import com.beust.jcommander.ParametersDelegate
import com.rustyrazorblade.easycasslab.Context
import com.rustyrazorblade.easycasslab.commands.delegates.ReleaseFlag
import com.rustyrazorblade.easycasslab.containers.Packer

@Parameters(commandDescription = "Build the base image.")
class BuildBaseImage(val context: Context) : ICommand {
@ParametersDelegate
var releaseFlag = ReleaseFlag()

override fun execute() {
val packer = Packer(context)

packer.build("base.pkr.hcl")
packer.build("base.pkr.hcl", releaseFlag)
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.rustyrazorblade.easycasslab.commands

import com.beust.jcommander.Parameters
import com.beust.jcommander.ParametersDelegate
import com.rustyrazorblade.easycasslab.Context
import com.rustyrazorblade.easycasslab.commands.delegates.ReleaseFlag
import com.rustyrazorblade.easycasslab.containers.Packer

@Parameters(commandDescription = "Build the Cassandra image.")
class BuildCassandraImage(val context: Context) : ICommand {
@ParametersDelegate
var releaseFlag = ReleaseFlag()

override fun execute() {
val packer = Packer(context)
packer.build("cassandra.pkr.hcl")
packer.build("cassandra.pkr.hcl", releaseFlag)
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@
package com.rustyrazorblade.easycasslab.commands

import com.beust.jcommander.Parameters
import com.beust.jcommander.ParametersDelegate
import com.rustyrazorblade.easycasslab.Context
import com.rustyrazorblade.easycasslab.commands.delegates.ReleaseFlag
import com.rustyrazorblade.easycasslab.containers.Packer

@Parameters(commandDescription = "Build both the base and Cassandra image.")
class BuildImage(val context: Context) : ICommand {
@ParametersDelegate
var releaseFlag = ReleaseFlag()

override fun execute() {
BuildBaseImage(context).execute()
BuildCassandraImage(context).execute()
BuildBaseImage(context)
.apply { this.releaseFlag=this@BuildImage.releaseFlag }
.execute()
BuildCassandraImage(context)
.apply { this.releaseFlag=this@BuildImage.releaseFlag }
.execute()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.rustyrazorblade.easycasslab.commands.delegates

import com.beust.jcommander.Parameter

class ReleaseFlag {
@Parameter(description = "Release flag", names = ["--release"])
var release: Boolean = false
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.rustyrazorblade.easycasslab.Containers
import com.rustyrazorblade.easycasslab.Context
import com.rustyrazorblade.easycasslab.Docker
import com.rustyrazorblade.easycasslab.VolumeMapping
import com.rustyrazorblade.easycasslab.commands.delegates.ReleaseFlag
import org.apache.logging.log4j.kotlin.logger
import java.io.File
import kotlin.system.exitProcess
Expand All @@ -16,9 +17,20 @@ class Packer(val context: Context) {
private var logger = logger()

// todo include the region defined in the profile
fun build(name: String) {
fun build(name: String, release: ReleaseFlag) {
val region = context.userConfig.region
execute( "build", "-var", "region=$region", name)
val command = mutableListOf("build", "-var", "region=$region")

if (release.release) {
// When passing the release flag,
// we use the release version as the image version.
// We also make the AMI public.
command.addAll(arrayOf("-var", "release_version=${context.version}"))
}

command.add(name)

execute(*command.toTypedArray())
}

private fun execute(vararg commands: String): Result<String> {
Expand Down

0 comments on commit 6bcb589

Please sign in to comment.