Search code examples
google-compute-enginegoogle-deployment-manager

One time script on Compute Engine


I am looking to run a script once during VM instantiation. The startup script in the compute engine template runs every time the VM is started. Say for e.g. I have to install gnome desktop on linux host, I don't want to include that in startup script. Rather I am looking for something that runs once whet he host is created. Of course, I want this automated. Is it possible to do this?

Edit: I am trying to achieve this in Linux OS.


Solution

    1. As the documentation [1], if we create startup scripts on a compute engine instance then the instances perform automated tasks “every time” the instance boots up.

    2. To run startup script once, the most basic way is to use a file on the filesystem to flag when the script has been run or you could use the instance metadata to store the state.

    For example via: INSTANCE_STATE=$(curl http://metadata.google.internal/computeMetadata/v1/instance/attributes/state -H "Metadata-Flavor: Google")

    Then set state = PROVISIONED after running the script etc.

    But it is a good idea to have your script check specifically if the actions it is going to do have already been done and handled accordingly.

    1. Another option, in your startup script you can have it removed the startup-script metadata at the end from the host instance

    [1] https://cloud.google.com/compute/docs/startupscript

    [2] https://cloud.google.com/compute/docs/storing-retrieving-metadata