gekmihesg.openwrt

Ansible Role: openwrt

Ansibleを使ってOpenWRTやその派生版をPythonなしで管理します。

ホストをインベントリグループ openwrt に入れることで、一部のモジュールは標準のOpenWRTインストール上で実行されるシェルバージョンに置き換えられ、元の機能の大部分を保持しようとします。このグループに含まれないホストには影響はありません。これにより、OpenWRTと他のプラットフォームのタスクを混在させることが可能です。また、新しいOpenWRT特有のモジュール(例えば、uci)も含まれています。 すべての引数の組み合わせはテストされていません! 一部のケースは、完全性のためにPythonから翻訳されたものです。

現在実装されているモジュールは以下の通りです:

  • command
  • copy
  • fetch (暗黙的)
  • file
  • lineinfile
  • nohup (新しい)
  • opkg
  • ping
  • service
  • setup
  • shell (暗黙的)
  • slurp
  • stat
  • sysctl
  • template (暗黙的)
  • uci (新しい)
  • wait_for_connection (暗黙的)

これを実現するために、一部のモンキーパッチが含まれています(vars_pluginsについて疑問に思う場合)。

互換性

このロールは以下の環境で正常にテストされました:

  • LEDE 17.01 (手動)
  • OpenWRT 18.06
  • OpenWRT 19.07
  • OpenWRT 21.02
  • OpenWRT 22.03

要件

一部のモジュールは、SHA1ハッシュを生成したり、データをBase64エンコードする方法をオプションで必要とします。Base64については、非常に遅い hexdump | awk の実装が含まれています。SHA1には回避策はありません。 必要に応じて、モジュールはSHA1のために有用なシステムコマンド(sha1sum, openssl)とBase64のために(base64, openssl, 回避策)を探します。有用なコマンドが見つからない場合でも、多くの機能は動作しますが、例えばfetchモジュールは validate_checksum: no で実行しなければならず、常にファイルをダウンロードして changed: yes を返します。 したがって、coreutils-sha1sumcoreutils-base64 をインストールすることをお勧めします。もしコマンドがbusyboxによって既に提供されていない場合。このロールはデフォルトで自動的にそれを行います(以下参照)。

ロール変数

openwrt_install_recommended_packages:
    いくつかのコマンドをチェックし、不足している場合に対応するパッケージをインストールします。上記の要件を参照してください。(デフォルト:yes)

openwrt_scp_if_ssh:
    OpenWRTシステムでsftpの代わりにscpを使用するかどうか。値は`yes`、`no`、または`smart`が可能です。Ansibleのデフォルトは`smtp`ですが、このロールのデフォルトは`yes`です。なぜならOpenWRTはデフォルトでsftpを提供しないからです。(デフォルト:yes)

openwrt_remote_tmp:
    OpenWRTシステムのAnsibles remote_tmp設定。ターゲットデバイスのフラッシュの摩耗を避けるために/tmpにデフォルト設定されています。(デフォルト:/tmp)

openwrt_wait_for_connection, openwrt_wait_for_connection_timeout:
    ホストを待機するかどうか(デフォルト:yes)およびネットワークまたはwifiの再起動後にどのくらい待機するか(300)。(ハンドラーを参照)

openwrt_ssh, openwrt_scp, openwrt_ssh_host, openwrt_ssh_user, openwrt_user_host:
    次のようなことを行うためのヘルパーショートカット
    "command: {{ openwrt_scp }} {{ openwrt_user_host|quote }}:/etc/rc.local /tmp"

例のプレイブック

インベントリ:

[aps]
ap1.example.com
ap2.example.com
ap3.example.com

[routers]
router1.example.com

[openwrt:children]
aps
routers

プレイブック:

- hosts: openwrt
  roles:
    - gekmihesg.openwrt
  tasks:
    - name: openwrtイメージをコピー
      command: "{{ openwrt_scp }} image.bin {{ openwrt_user_host|quote }}:/tmp/sysupgrade.bin"
      delegate_to: localhost
    - name: sysupgradeを開始
      nohup:
        command: sysupgrade -q /tmp/sysupgrade.bin
    - name: 再起動を待つ
      wait_for_connection:
        timeout: 300
        delay: 60
    - name: mdnsをインストール
      opkg:
        name: mdns
        state: present
    - name: mdnsを有効にして開始
      service:
        name: mdns
        state: started
        enabled: yes
    - name: 認証キーをコピー
      copy:
        src: authorized_keys
        dest: /etc/dropbear/authorized_keys
    - name: 保留中の変更を元に戻す
      uci:
        command: revert
    - name: wifiデバイスradio0を設定
      uci:
        command: set
        key: wireless.radio0
        value:
          phy: phy0
          type: mac80211
          hwmode: 11g
          channel: auto
    - name: wifiインターフェースを設定
      uci:
        command: section
        config: wireless
        type: wifi-iface
        find_by:
          device: radio0
          mode: ap
        value:
          ssid: MySSID
          encryption: psk2+ccmp
          key: very secret
    - name: 変更をコミット
      uci:
        command: commit
      notify: wifiを再読み込み

プレイブックの外でモジュールを実行することも可能です:

$ export ANSIBLE_LIBRARY=~/.ansible/roles/gekmihesg.openwrt/library
$ export ANSIBLE_VARS_PLUGINS=~/.ansible/roles/gekmihesg.openwrt/vars_plugins
$ ansible -i openwrt-hosts -m setup all

ライセンス

GNU一般公衆ライセンス v3.0(https://www.gnu.org/licenses/gpl-3.0.txtを参照)

開発

このフレームワークのためにカスタムモジュールを書くことはそれほど難しくありません。モジュールは、パラメータの解析、json処理、レスポンス生成などの共通機能を提供するラッパースクリプトにラップされています。 すべてのモジュールは openwrt_<module_name>.shと一致する必要があります。もしmodule_nameがAnsibleのコアモジュールでない場合、 <module_name>.pyも必須です。これは機能を持っていなくてもかまわず(非OpenWRTシステム用に機能を持っていても良い)、ドキュメントを含むことができます。

仮想環境で requirements.txt パッケージをインストールし、venvを有効化した状態で次のコマンドを実行してください:

$ molecule test

PRを提出する前に、これを行ってください。

新しいモジュールのためにテストを書くことも強くお勧めします。

プロジェクトについて

Manage OpenWRT without python

インストール
ansible-galaxy install gekmihesg.openwrt
ライセンス
gpl-3.0
ダウンロード
35.5k
所有者