Lua VM

EsshはLuaで書かれた設定ファイルを読み込むためにGopherLuaをLua VMとして使っています。

ビルトイン関数

すでにhosttask関数を見てきたように、Esshのコア機能はビルトイン関数で構成されています。Esshが提供しているすべての関数は以下の通りです。

  • host: ホストを定義します。ホストを参照してください。

  • task: タスクを定義します。タスクを参照してください。

  • driver: ドライバを定義します。ドライバを参照してください。

ビルトインライブラリ

Esshには、設定ファイルで使用できるビルトインLuaライブラリが用意されています。 たとえば、jsonライブラリを使いたい場合は、以下のようにLuaのrequire関数を使います。

local json = require("json")

local jsontext = json.encode({aaa = "bbb", ccc = "ddd"})
print(jsontext)

以下は、Esshに組み込まれているビルトインライブラリです。

定義済みの変数

Esshは事前定義された変数を提供します。 最新のEsshのバージョンには、定義済みの変数が1つあります。esshです。

esshはいくつかの関数と変数を持つテーブルです。下記を参照してください

  • ssh_config (string): ssh_configはssh_configファイルのパスです。デフォルトでは、Esshを実行すると自動的に生成される一時ファイルです。 ssh_configを静的な宛先に生成するために、この値を上書きすることができます。クライアントコンピュータとターゲットサーバの間のサーバであるゲートウェイホストを使用する場合は、この変数を使用して ProxyCommandを指定することができます。以下の例を参照してください:

    --
    -- network environment.
    -- [your-computer] -- [getway-server1] -- [web-server]
    --
    
    host "web-server" {
        HostName = "192.168.0.1",
        ProxyCommand = "ssh -q -F " .. essh.ssh_config .. " -W %h:%p getway-server1",
    }
    
  • select_hosts (function): 定義されたホストを取得します。これは、ホスト設定のオーバライドやデフォルト値の設定に役立ちます。たとえば、デフォルトのssh_config:ForwardAgent = yesを設定する場合は、以下のコードで実施できます。

    -- ~/.essh/config_override.lua
    for _, h in pairs(essh.select_hosts():get()) do
        if h.ForwardAgent == nil then
            h.ForwardAgent = "yes"
        end
    end
    

    上記の例では、すべてのホストにデフォルト値が設定されます。選択したホストに値を設定したい場合は、次のコードを使います:

    -- ~/.essh/config_override.lua
    -- Getting only the hosts that has `web` tag or name of the hosts is `web`.
    for _, h in pairs(essh.select_hosts("web"):get()) do
        if h.ForwardAgent == nil then
            h.ForwardAgent = "yes"
        end
    end
    
    -- Using a table, Getting the hosts both `web` or `db`
    for _, h in pairs(essh.select_hosts({"web", "db"}):get()) do
        if h.ForwardAgent == nil then
            h.ForwardAgent = "yes"
        end
    end
    
    -- You can set a filter.
    -- Getting only the `web` hosts filtered by `production`.
    for _, h in pairs(essh.select_hosts("web"):filter("production"):get()) do
        if h.ForwardAgent == nil then
            h.ForwardAgent = "yes"
        end
    end
    
    -- Getting only the first one host using `first` method.
    local h = essh.select_hosts("web"):first()
    if h.ForwardAgent == nil then
        h.ForwardAgent = "yes"
    end
    
  • host (function): host 関数のエイリアス。

  • task (function): task 関数のエイリアス。

  • driver (function): driver 関数のエイリアス。

  • debug (function): デバッグメッセージを出力します。デバッグメッセージは--debugオプションつきでEsshを実行したときに出力されます。

    essh.debug("foo")