Dustin
Dustin

Reputation: 6307

CoreOS - Cloud-Config not saving file

I'm trying to write an "initial" cloud-config file that does a bit of setup before my default Cloud-Config file replaces it and takes over. This is what it looks like, however whenever it runs the "clustersetup.service", it can't find the clustersetup.sh file that was supposed to save. Course if I run this from a terminal it works just fine. What am I doing wrong?

#cloud-config

coreos:
  etcd:
    addr: $private_ipv4:4001
    peer-addr: $private_ipv4:7001
  fleet:
    public-ip: $private_ipv4
  units:
    - name: clustersetup.service
      command: start
      content: |
        [Unit]
        Description=Cluster Setup

        [Service]
        ExecStartPre=/usr/bin/wget -q http://10.0.2.2:8080/clustersetup.sh -O ~/clustersetup.sh
        ExecStart=/usr/bin/bash ~/clustersetup.sh
        ExecStop=/usr/bin/bash

Upvotes: 1

Views: 203

Answers (2)

Greg
Greg

Reputation: 6759

In my distribution (ubuntu), bash is in /bin. One thing you could do is:

    ExecStartPre=/bin/bash -c '/usr/bin/wget -q http://10.0.2.2:8080/clustersetup.sh -O ~/clustersetup.sh'
    ExecStart=/bin/bash -c ~/clustersetup.sh'

I think you will get the proper expansion of the ~ when pushing it through the shell. However, ~ will be relative to the process id executing the script (I don't know for certain that is core). If you wanted to be sure, you could:

    ExecStartPre=/bin/bash -c '/usr/bin/wget -q http://10.0.2.2:8080/clustersetup.sh -O ~core/clustersetup.sh'
    ExecStart=/bin/bash -c ~core/clustersetup.sh'

I haven't tested this. I agree with @Brian in that the explicit path would be a better idea. In general it is best not to get a shell involved with execution.

Upvotes: 0

Brian Redbeard
Brian Redbeard

Reputation: 700

Paths specified by systemd cannot be relative. Try this again specifying the full path /home/core/clustersetup.sh.

Upvotes: 1

Related Questions