// ConfigureBasic updates the provided cloudinit.Config with // basic configuration to initialise an OS image, such that it can // be connected to via SSH, and log to a standard location. // // Any potentially failing operation should not be added to the // configuration, but should instead be done in ConfigureJuju. // // Note: we don't do apt update/upgrade here so as not to have to wait on // apt to finish when performing the second half of image initialisation. // Doing it later brings the benefit of feedback in the face of errors, // but adds to the running time of initialisation due to lack of activity // between image bringup and start of agent installation. func ConfigureBasic(cfg *MachineConfig, c *cloudinit.Config) error { c.AddScripts( "set -xe", // ensure we run all the scripts or abort. ) c.AddSSHAuthorizedKeys(cfg.AuthorizedKeys) c.SetOutput(cloudinit.OutAll, "| tee -a "+cfg.CloudInitOutputLog, "") // Create a file in a well-defined location containing the machine's // nonce. The presence and contents of this file will be verified // during bootstrap. // // Note: this must be the last runcmd we do in ConfigureBasic, as // the presence of the nonce file is used to gate the remainder // of synchronous bootstrap. noncefile := path.Join(cfg.DataDir, NonceFile) c.AddFile(noncefile, cfg.MachineNonce, 0644) return nil }