Deploy custom software using spinnaker


#1

Hi All,

I am trying to bake application which is customized.

  1. Deploy VM.
  2. Install customized app using chef recipe and
  3. Create an image.

I understand bake will do above. I am not sure how to do 2nd action (Install customized app using chef recipe), so that I can get the image of customized app.
Any pointers will be really helpful.

TIA.

Thanks and Regards,
Prabhir


#2

Hi @prabhir2008,

I don’t think you’ll be able to directly use a chef recipe to bake an image without doing some customization. But bake stages use Packer to create the image, and Spinnaker allows you to write custom packer template. So one way of doing this would be to write a packer template that builds your image, and to use this template in a bake stage.

-Eric


#3

Thank you. I am sorry but I am still confused.
Questions are as below

  1. I already have .bin/.rpm available with me which I need to install on EC2 and bake the AMI.
    How to do that?
  2. In tutorials I could see that for bake step in spinnaker technote as to just mention redis in the package name. From where this package will be downloaded so that spinnaker can refer to it for installation.

I am mainly looking for the source from where I should be downloading the .bin. Generally we have this in internal nexus from where we download it and use it. So while using spinnaker where should i mention the source like nexus from where I could download the installer to install it on VM.

I am confused in above scenarios.

TIA

Thanks and Regards,
Prabhir


#4

If you have an RPM in a yum repository already, it should actually be pretty easy to set up a Bake stage to make an AMI out of that. There’s some info here and a codelab here. But effectively the steps are:

  • Configure Rosco to know where to look for your images. You’d do this by setting
yumRepository: https://your-repository.example.com/

in rosco-local.yml

  • Then in a bake stage you can enter the package you want to install in packages and it will look in that configured repository.

#5

Thank you. This is really helpful to clear some doubts.
But we have few 3rd part installables in .bin and not in .rpm. We have those .bin in nexus repo.
So should we give this nexus path in rosco-local.yml?
And if yes what should we mention at instead of yumRepository?

Thanks and Regards,
Prabhir


#6

Currently Rosco is only ably to directly install from a debian, yum, or chocolatey repository—so if you have files to install in some other repository/format, you’d need to do some more custom configuration in order to get this to work.

Behind the scenes, Rosco is just using Packer; the default template it uses (for GCE, for example) is here (with other cloud providers in the same directory). By default this template just calls a script install_packages.sh which grabs any specified packages from the desired repository—but you can configure Rosco to use any custom packer template. So you could write your own template that does whatever configuring you need on an image, and then instruct the Bake stage to use that particular template.

An alternative you might consider as well—you could just (outside of Spinnaker) make a base image containing the third-party software packages and binaries you need. Then Spinnaker could just start from this base image and install the package being build as part of the pipeline, as you can specify a base image to the Bake stage if desired. This would require maintaining the base image—but often these base images containing third-party software change much less frequently than the software being deployed so that might be a viable solution.


#7

Thank you for the valuable information.