Skip to content

moriryota62/tflink

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

tflink

tflinkはTerraformモジュールディレクトリ内のファイルに対するシンボリックを作成するbashスクリプトです。tflinkの基本動作は以下の通りです。

  • 指定されたTerraformモジュールディレクトリの存在確認をします。なかった場合、スクリプトは失敗します。
  • カレントディレクトリ名(または指定したモジュール名)と同じモジュールがTerraformモジュールディレクトリ下にあるか確認します。なかった場合、スクリプトは失敗します。
  • カレントディレクトリ内のシンボリックリンクをすべて削除します。これは冪等性のためです。
  • カレントディレクトリ内のシンボリックリンク以外のファイルをすべてそのままです。
  • カレントディレクトリに対象モジュールディレクトリ下のファイルに対するシンボリックリンクを作成します。

たとえば以下のようなディレクトリ構造の場合、environments/dev/vpc下でtflinkを実行するとmodules/vpc下のファイルに対するシンボリックリンクを作成します。

.
├── environments
│   └── dev
│       └── vpc # モジュール名とあわせる
│           ├── terraform.tfvars
│           ├── variables.tf -> ../../../modules/vpc/variables.tf # tflinkでシンボリックリンクを作成
│           ├── verions.tf
│           ├── vpc.tf -> ../../../modules/vpc/vpc.tf # tflinkでシンボリックリンクを作成
│           └── vpc_override.tf # _override.tfでモジュールの内容をオーバーライド
└── modules # Terraformモジュールディレクトリ
    └── vpc # モジュール
        ├── variables.tf
        └── vpc.tf

背景

Terraformで複数環境をデプロイするにはmoduleをよく使います。多くの場合moduleで十分ですがたまに困ることもあります。たとえば、開発環境と本番環境で微妙に構成を変えたい時です。moduleでこれをするには三項演算子を使って分岐させれば良いですが、その分コードが煩雑になってしまいます。煩雑さを防ぐにはmoduleのコードをオーバーライドすれば良いです。しかし、Terraformにはオーバーライドの仕組みもありますが、これはmoduleに対して機能しません。Terraformのオーバーライドは同じディレクトリ内のファイルしか上書きしないからです。

そこで、moduleのようにコードを共有しつつオーバーライドも可能にする方法を考えました。moduleのコードをシンボリックリンクで参照し、オーバーライドすれば良いです。しかし、この方法だと大量にシンボリックを作成する手間がかかります。また、相対パスのシンボリックリンクはディレクトリの位置を気にする必要がありさらに大変です。

そこで相対パスのシンボリックリンクを楽に作成するコマンドを作成しました。

使い方

bashスクリプトの配置

tflinkファイルをPATHの通るディレクトリ配下に配置してください。また、実行権限もつけてください。たとえば以下の通りです。

chmod +x tflink
cp tflink /usr/local/bin/

.tflinkファイルの準備

tflinkはTerraformモジュールディレクトリのパスを.tflinkファイルから読み込みます。-sオプションをつけてTerraformモジュールディレクトリを絶対パスで設定してください。ホームディレクトリ配下に.tflinkファイルが作成されます。

$ tflink -s /tflink/example/modules
$ cat ~/.tflink
/tflink/example/modules

tflinkの実行

tflinkはTerraformモジュールディレクトリ下のディレクトリ名と同じディレクトリ名で実行されることを想定しています。オプションなしでコマンドを実行すればシンボリックリンクが作成されます。

$ tflink

カレントディレクトリ名と対象モジュールディレクトリの名前が違う場合、-mオプションで対象モジュールディレクトリ名を指定してください。

$ tflink -m vpc

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors