{ "openapi" : "3.0.3", "info" : { "title" : "Ionroller API", "version" : "1.0.1", "description" : "Software Delivery System for Docker Images" }, "servers" : [ { "url" : "http://ionroller.gilt.com" } ], "paths" : { "/services" : { "get" : { "description" : "Lists all services", "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsService" } } } } } } } }, "/services/{serviceName}" : { "get" : { "description" : "Returns service state (current and desired)", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsService" } } } } } } }, "/services/{serviceName}/config" : { "get" : { "description" : "Returns latest service configuration", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceConfig" } } } } } }, "put" : { "description" : "Creates or updates service configuration", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "requestBody" : { "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceConfig" } } }, "required" : true }, "responses" : { "204" : { "description" : "No content" } } }, "delete" : { "description" : "Removes service configuration (all versions) if no version is currently deployed", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "responses" : { "204" : { "description" : "No content" } } } }, "/services/{serviceName}/configs" : { "get" : { "description" : "Returns service configuration (all versions over time)", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } }, { "name" : "from", "in" : "query", "description" : "Find configurations created after this date.", "required" : false, "schema" : { "type" : "string", "format" : "date-time" } }, { "name" : "to", "in" : "query", "description" : "Find configurations created before this date.", "required" : false, "schema" : { "type" : "string", "format" : "date-time" } } ], "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "type" : "array", "items" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceConfig" } } } } } } } }, "/services/{serviceName}/configs/{timestamp}" : { "get" : { "description" : "Returns service configuration for specified timestamp", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } }, { "name" : "timestamp", "in" : "path", "description" : "Configuration timestamp", "required" : true, "schema" : { "type" : "string", "format" : "date-time" } } ], "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceConfig" } } } } } } }, "/services/{serviceName}/drop" : { "post" : { "description" : "Drops a release", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "requestBody" : { "content" : { "application/x-www-form-urlencoded" : { "schema" : { "type" : "object", "required" : [ "version", "force" ], "properties" : { "version" : { "type" : "string" }, "config" : { "type" : "string", "format" : "date-time" }, "force" : { "type" : "boolean" } } } } }, "required" : true }, "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "type" : "integer", "format" : "int64" } } } } } } }, "/services/{serviceName}/release" : { "post" : { "description" : "Requests a new release", "parameters" : [ { "name" : "serviceName", "in" : "path", "required" : true, "schema" : { "type" : "string" } } ], "requestBody" : { "content" : { "application/x-www-form-urlencoded" : { "schema" : { "type" : "object", "required" : [ "version" ], "properties" : { "version" : { "type" : "string" }, "config" : { "type" : "string", "format" : "date-time" } } } } }, "required" : true }, "responses" : { "200" : { "description" : "Successful response", "content" : { "application/json" : { "schema" : { "type" : "integer", "format" : "int64" } } } } } } } }, "components" : { "schemas" : { "ComGiltIonrollerApiV1ModelsElbSettings" : { "description" : "Settings for external ELB", "type" : "object", "required" : [ "name", "security_group", "rollout_delay_minutes" ], "properties" : { "name" : { "description" : "Name of ELB", "type" : "string" }, "security_group" : { "description" : "Security group for ELB instances", "type" : "string" }, "rollout_delay_minutes" : { "description" : "Delay in minutes between rollout increments", "type" : "integer", "format" : "int32" } } }, "ComGiltIonrollerApiV1ModelsRelease" : { "description" : "A release of a particular tag of a Docker image", "type" : "object", "required" : [ "image", "tag", "config" ], "properties" : { "image" : { "description" : "The Docker repository and name of images to be released", "type" : "string" }, "tag" : { "description" : "The tag for the image to be released", "type" : "string" }, "config" : { "description" : "Configuration timestamp", "type" : "string", "format" : "date-time" }, "rollout_status" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsRolloutStatus", "description" : "Current rollout status" } } }, "ComGiltIonrollerApiV1ModelsServiceConfig" : { "description" : "Configuration used by a service", "type" : "object", "required" : [ "url", "hosted_zone_id", "aws_account_id", "service_role", "image", "port_mappings", "run_args", "eb" ], "properties" : { "url" : { "description" : "URL of endpoint pointing at service", "type" : "string" }, "hosted_zone_id" : { "description" : "Hosted Zone ID for DNS entry", "type" : "string" }, "aws_account_id" : { "description" : "ID of AWS account where this service is deployed", "type" : "string" }, "external_elb" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsElbSettings", "description" : "Details for external ELB" }, "service_role" : { "description" : "Role used to run this service; specifies policy for accessing S3, RDS, DynamoDb etc.", "type" : "string" }, "image" : { "description" : "Docker image details used in deployments", "type" : "string" }, "port_mappings" : { "description" : "List of port mappings configured for use by Docker image", "type" : "array", "items" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsPortMapping" } }, "volume_mappings" : { "description" : "List of volume mappings configured for use by Docker image", "type" : "array", "items" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsVolumeMapping" } }, "run_args" : { "description" : "Arguments passed to running Docker image", "type" : "array", "items" : { "type" : "string" } }, "eb" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsEbConfig", "description" : "Elastic Beanstalk configuration including deployment bucket, stack name and option settings like env variables, vpc, security groups etc." }, "remove_unused_after_minutes" : { "description" : "When an environment becomes unused, remove it after the specified number of minutes", "type" : "integer", "format" : "int64" }, "timestamp" : { "description" : "When this configuration has been created", "type" : "string", "format" : "date-time" } } }, "ComGiltIonrollerApiV1ModelsPortMapping" : { "description" : "Mapping from port in Docker container to external host port", "type" : "object", "required" : [ "internal", "external" ], "properties" : { "internal" : { "description" : "Port to be forwarded from Docker container", "type" : "integer", "format" : "int32" }, "external" : { "description" : "Port to be mapped to on external hosts", "type" : "integer", "format" : "int32" } } }, "ComGiltIonrollerApiV1ModelsEbConfig" : { "description" : "Elastic Beanstalk configuration including deployment bucket, stack name and option settings", "type" : "object", "required" : [ "deployment_bucket" ], "properties" : { "deployment_bucket" : { "description" : "Deployment bucket used to deploy Elastic Beanstalk applications", "type" : "string" }, "stack" : { "description" : "Solution stack name (i.e. 64bit Amazon Linux 2015.03 v2.0.0 running Docker 1.6.2)", "type" : "string" }, "settings" : { "description" : "Elastic Beanstalk configuration option settings, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options.html", "type" : "array", "items" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsOptionSetting" } }, "resources" : { "description" : "Elastic Beanstalk environment resources, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environment-resources.html", "type" : "object", "additionalProperties" : true }, "packages" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "sources" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "files" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "users" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "groups" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "commands" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "container_commands" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true }, "services" : { "description" : "Elastic Beanstalk container customization, see http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html", "type" : "object", "additionalProperties" : true } } }, "ComGiltIonrollerApiV1ModelsVolumeMapping" : { "description" : "Mapping from path inside Docker container to external volume", "type" : "object", "required" : [ "internal", "external" ], "properties" : { "internal" : { "description" : "Location on image's filesystem that Docker volume is mapped to", "type" : "string" }, "external" : { "description" : "Identifier or path for location to be mapped into Docker environment", "type" : "string" } } }, "ComGiltIonrollerApiV1ModelsServiceCurrentState" : { "description" : "Current state of service environments", "type" : "object", "required" : [ "environments" ], "properties" : { "environments" : { "description" : "List of environments and their current status", "type" : "array", "items" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsEnvironment" } } } }, "ComGiltIonrollerApiV1ModelsEnvironment" : { "description" : "Elastic Beanstalk Environment running in AWS", "type" : "object", "required" : [ "release", "health" ], "properties" : { "release" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsRelease", "description" : "Details of the release present in the environment" }, "health" : { "description" : "Health of environment", "type" : "string" } } }, "ComGiltIonrollerApiV1ModelsOptionSetting" : { "description" : "Elastic Beanstalk configuration option setting", "type" : "object", "required" : [ "Namespace", "OptionName", "Value" ], "properties" : { "Namespace" : { "type" : "string" }, "OptionName" : { "type" : "string" }, "Value" : { "type" : "string" } } }, "ComGiltIonrollerApiV1ModelsServiceDesiredState" : { "description" : "Desired future state of service", "type" : "object", "properties" : { "current" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsRelease", "description" : "Current release of software" }, "next" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsRelease", "description" : "Next release of software" }, "future" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsRelease", "description" : "Future release of software" } } }, "ComGiltIonrollerApiV1ModelsRolloutStatus" : { "description" : "Current rollout status for release", "type" : "object", "properties" : { "num_instances" : { "description" : "Number of instances in external load balancer", "type" : "integer", "format" : "int32" }, "completed_at" : { "description" : "Time at which latest increment completed", "type" : "string", "format" : "date-time" } } }, "ComGiltIonrollerApiV1ModelsServiceState" : { "description" : "State of service environments", "type" : "object", "required" : [ "current" ], "properties" : { "current" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceCurrentState", "description" : "List of environments and their current status" }, "desired" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceDesiredState", "description" : "List of environments and their desired status" } } }, "ComGiltIonrollerApiV1ModelsService" : { "type" : "object", "required" : [ "name", "state" ], "properties" : { "name" : { "type" : "string" }, "state" : { "$ref" : "#/components/schemas/ComGiltIonrollerApiV1ModelsServiceState" } } } }, "securitySchemes" : { "user_header" : { "type" : "apiKey", "description" : "Identity of the user who starts a new release, drops env or updates config.", "name" : "User", "in" : "header" } } }, "security" : [ { "user_header" : [ ] } ] }