-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Support secrets in Metronome (#216) Description: propagation of secrets & serialization tests JIRA issues: METRONOME-246 * removing shadowed unused import * updated secret validations, rolled back marshalling test and bumped version number for si testing
- Loading branch information
Showing
17 changed files
with
310 additions
and
49 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
41 changes: 41 additions & 0 deletions
41
jobs/src/main/scala/dcos/metronome/model/EnvVarValueOrSecret.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
package dcos.metronome.model | ||
|
||
trait EnvVarValueOrSecret | ||
|
||
case class EnvVarValue(value: String) extends EnvVarValueOrSecret | ||
|
||
object EnvVarValue { | ||
implicit object playJsonFormat extends play.api.libs.json.Format[EnvVarValue] { | ||
def reads(json: play.api.libs.json.JsValue): play.api.libs.json.JsResult[EnvVarValue] = { | ||
json.validate[String].map(EnvVarValue.apply) | ||
} | ||
def writes(envVarValue: EnvVarValue): play.api.libs.json.JsValue = { | ||
play.api.libs.json.JsString(envVarValue.value) | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* An environment variable set to a secret | ||
* @param secret The name of the secret to refer to. At runtime, the value of the | ||
* secret will be injected into the value of the variable. | ||
*/ | ||
case class EnvVarSecret(secret: String) extends EnvVarValueOrSecret | ||
|
||
object EnvVarSecret { | ||
implicit val playJsonFormat = play.api.libs.json.Json.format[EnvVarSecret] | ||
} | ||
|
||
object EnvVarValueOrSecret { | ||
implicit object playJsonFormat extends play.api.libs.json.Format[EnvVarValueOrSecret] { | ||
def reads(json: play.api.libs.json.JsValue): play.api.libs.json.JsResult[EnvVarValueOrSecret] = { | ||
json.validate[EnvVarValue].orElse(json.validate[EnvVarSecret]) | ||
} | ||
def writes(envOrSecret: EnvVarValueOrSecret): play.api.libs.json.JsValue = { | ||
envOrSecret match { | ||
case envVarValue: EnvVarValue => play.api.libs.json.Json.toJson(envVarValue)(EnvVarValue.playJsonFormat) | ||
case envVarSecret: EnvVarSecret => play.api.libs.json.Json.toJson(envVarSecret)(EnvVarSecret.playJsonFormat) | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
package dcos.metronome.model | ||
|
||
/** | ||
* A secret declaration | ||
* @param source reference to a secret which will be injected with a value from the secret store. | ||
*/ | ||
case class SecretDef(source: String) | ||
|
||
object SecretDef { | ||
import play.api.libs.json.Reads._ | ||
implicit object playJsonFormat extends play.api.libs.json.Format[SecretDef] { | ||
def reads(json: play.api.libs.json.JsValue): play.api.libs.json.JsResult[SecretDef] = { | ||
val source = json.\("source").validate[String](play.api.libs.json.JsPath.read[String](minLength[String](ConstraintSourceMinLength))) | ||
val _errors = Seq(("source", source)).collect({ | ||
case (field, e: play.api.libs.json.JsError) => e.repath(play.api.libs.json.JsPath.\(field)).asInstanceOf[play.api.libs.json.JsError] | ||
}) | ||
if (_errors.nonEmpty) _errors.reduceOption[play.api.libs.json.JsError](_.++(_)).getOrElse(_errors.head) | ||
else play.api.libs.json.JsSuccess(SecretDef(source = source.get)) | ||
} | ||
def writes(secret: SecretDef): play.api.libs.json.JsValue = { | ||
val source = play.api.libs.json.Json.toJson(secret.source) | ||
play.api.libs.json.JsObject(Seq(("source", source)).filter(_._2 != play.api.libs.json.JsNull).++(Seq.empty)) | ||
} | ||
} | ||
val ConstraintSourceMinLength = 1 | ||
} |
Oops, something went wrong.