AとBの2つのサービスがあります。
A は、開始時に etcd に値を設定します。たとえば、環境ファイルから取得したパブリック IP アドレスです。
ExecStartPost=/usr/bin/etcdctl set /A_ADDR $COREOS_PUBLIC_IPV4
B は、起動時にその値と、独自の IP アドレスを必要とします。したがって、次のようなものがいいでしょう:
ExecStart=/usr/bin/docker run -e MY_ADDR=$COREOS_PUBLIC_IPV4 -e A_ADDR=$ETCD_A_ADDR mikedewar/B
しかし、etcd 変数はそのような systemd 環境変数として存在しないため、明らかに不可能です。/usr/bin/bash -c 'run stuff'
代わりに、自分で何らかの操作を行うことができますが、ExecStart
特に systemd を展開する必要が$COREOS_PUBLIC_IPV4
あり、新しい bash シェルを展開する必要があるため、厄介です$(etcdctl get /A_ADDR)
。また、コードの匂いがして、何か重要なものが欠けていると思わせてくれます。
etcd からExecStart
宣言に値を取得する「正しい」方法を教えてもらえますか?
- アップデート
だから私は稼働しています
ExecStart=/usr/bin/bash -c 'source /etc/environment && /usr/bin/docker run -e A_ADDR=$(/usr/bin/etcdctl get /A_ADDR) -e MY_ADDR=$COREOS_PUBLIC_IPV4 mikedewar/B'
しかし、それはかなり醜いです。何かを見逃していないなんて、まだ信じられない..