2019年7月1日月曜日

Inventory ファイルから ssh/config ファイルを作成する

概要

なんとなく作ったのでメモ
すべての YAML ファイルに対応してはいない

想定 inventory ファイル

  • mkdir -p /path/to/inventory
  • touch /path/to/inventory/i1.yml
  • touch /path/to/inventory/i2.yml

i1.yml

---
i1:
  children:
    app:
      hosts:
        h1:
          ansible_host: 192.168.100.10
        h2:
          ansible_host: 192.168.100.11

i2.yml

---
i2:
  children:
    app:
      hosts:
        h3:
          ansible_host: 192.168.100.12
    util:
      hosts:
        h4:
          ansible_host: 192.168.100.13

Ruby スクリプト

  • vim export.rb
require 'yaml'

Dir.glob('/path/to/inventory/*.yml').each { |name|
  yaml = YAML.load_file("#{name}")
  ret = ""
  yaml.each { |s|
    s[1]['children'].each { |k1, v1|
      v1['hosts'].each { |k, v|
        ret += <<-"EOF"
Host #{k}
   Hostname #{v['ansible_host']}
   Port 22
   User user1
      EOF
      }
    }
  }
  puts ret
}
  • ruby export.rb

結果は以下の通り

Host h1
   Hostname 192.168.100.10
   Port 22
   User user1
Host h2
   Hostname 192.168.100.11
   Port 22
   User user1
Host h3
   Hostname 192.168.100.12
   Port 22
   User user1
Host h4
   Hostname 192.168.100.13
   Port 22
   User user1

あとはこの結果を貼り付けるなり実行時に << すれば OK

最後に

もっと良い方法はないだろうか
もっと簡潔に書けるはず

0 件のコメント:

コメントを投稿