1. ホーム
  2. Ansible

ansible共通モジュール

2022-02-18 09:07:03
<パス

I. pingモジュール

ホストがパススルーかどうかをテストします。シンプルな使い方で、パラメータは必要ありません。

[root@361way ~]# ansible 10.212.52.252 -m ping
10.212.52.252 | success >> {
    "changed": false,
    "ping": "pong"
}

II. セットアップモジュール

setupモジュールは、主にホスト情報を取得するために使用され、playbookでよく使用されるパラメータgather_factsと関連しています。setupモジュールでよく使用されるパラメータの1つがfilterパラメータで、以下の例で使用しています(出力結果が多いため、ここでは結果を省略してコマンドのみを掲載しています)。

[root@361way ~]# ansible 10.212.52.252 -m setup -a 'filter=ansible_*_mb' // View host memory information
[root@361way ~]# ansible 10.212.52.252 -m setup -a 'filter=ansible_eth[0-2]' //View the NIC information for the ground interface eth0-2
[root@361way ~]# ansible all -m setup --tree /tmp/facts //put all hosts' information into the /tmp/facts directory, and each host's information into the hostname file (hostname in /etc/ansible/hosts)

iii. ファイルモジュール

fileモジュールは、主にリモートホストでのファイル操作に使用されます。fileモジュールには以下のオプションがあります。

  • 1つはソースファイルが存在せず、後で作成される場合、もう1つはターゲットのソフトリンクがすでに存在し、以前のソフトリンクをキャンセルして新しいソフトリンクを作成する場合です。
  • group: ファイル/ディレクトリのグループを定義します。
  • mode: ファイル/ディレクトリのパーミッションを定義します。
  • owner: ファイル/ディレクトリの所有者を定義します。
  • path: 必須、ファイル/ディレクトリのパスを定義します。
  • recurse: 再帰的にファイルの属性を設定する、ディレクトリに対してのみ有効
  • src: リンクするソースファイルへのパス、state=linkの場合のみ適用
  • dest: リンク先のパス、state=link の場合のみ
  • state: ディレクトリ: ディレクトリが存在しない場合、ディレクトリを作成します。

    • ファイル:ファイルが存在しない場合でも作成されない
    • link: ソフトリンクの作成
    • hard: ハードリンクの作成
    • touch: ファイルが存在しない場合は新規に作成し、ファイルやディレクトリが既に存在する場合は最終更新時刻を更新します。
    • absent: ディレクトリやファイルを削除したり、ファイルのリンクを解除する。

    使用例です。
    ansible test -m file -a "src=/etc/fstab dest=/tmp/fstab state=link"
    ansible test -m file -a "パス=/tmp/fstab state=absent"
    ansible test -m file -a "path=/tmp/test state=touch"

IV. コピーモジュール

ファイルをリモートホストにコピーするために、copyモジュールには以下のオプションがあります。

  • バックアップ 上書きする前に元のファイルをバックアップし、バックアップファイルには時間情報が含まれます。オプションは2つ:yes|no
  • content: "src"の代わりに使用し、指定したファイルの値を直接設定することができます。
  • dest: 必須。ソースファイルをコピーするリモートホストの絶対パス。ソースファイルがディレクトリである場合、パスもディレクトリでなければなりません。
  • directory_mode: ディレクトリのパーミッションを再帰的に設定、デフォルトはシステムの既定値
  • force: ターゲットホストにファイルが存在するが内容が異なる場合、yesに設定すると強制的に上書きし、noに設定するとターゲットホストのターゲットロケーションにファイルが存在しない場合のみコピーします。デフォルトはyesです。
  • その他: file モジュールのすべてのオプションはここで利用可能です。
  • src: リモートホストにコピーされるファイルのローカルアドレスで、絶対パスまたは相対パスのいずれかを指定します。パスがディレクトリである場合、再帰的にコピーされます。この場合、パスの末尾が "/" である場合はディレクトリの内容のみがコピーされ、末尾が "/" でない場合はディレクトリを含む内容全体がコピーされ、rsync と同様です。
  • validate : 所定の位置にコピーする前に実行する検証用コマンド。検証するファイルのパスは '%s' で渡され、以下の visudo の例のように存在する必要があります。

例では以下のようになります。

ansible test -m copy -a "src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644"
ansible test -m copy -a "src=/mine/ntp.conf dest=/etc/ntp.conf owner=root group=root mode=644 backup=yes"
ansible test -m copy -a "src=/mine/sudoers dest=/etc/sudoers validate='visudo -cf %s'"

V. サービスモジュール

サービス管理用

このモジュールには以下のオプションが含まれます。

  • 引数: コマンドラインにいくつかのオプションを与える
  • enabled: 起動するかどうか yes|no
  • name: 必須、サービス名
  • pattern: パターンを定義します。status コマンドでサービスの状態を確認しても応答がない場合、ps コマンドでパターンに基づいてプロセス内を検索し、一致すれば、サービスはまだ実行中と見なされます。
  • ランレベル: ランレベル
  • sleep: restartedが実行された場合、停止と起動の間に数秒間スリープします。
  • state: 現在のサービスに対して、開始、停止、再起動、再読み込みなどを実行する(開始、停止、再起動、再読み込み)。

使用例です。

# Example action to reload service httpd, in all cases
- service: name=httpd state=reloaded
# Example action to enable service httpd, and not touch the running state
- service: name=httpd enabled=yes
# Example action to start service foo, based on running process /usr/bin/foo
- service: name=foo pattern=/usr/bin/foo state=started
# Example action to restart network service for interface eth0
- service: name=network state=restarted args=eth0

VI. cronモジュール

スケジュールされたタスクの管理用

  • バックアップ:内容を変更する前に、リモートホスト上のオリジナルのタスクプランのバックアップを作成します。
  • cron_file: 指定された場合、リモートホストのcron.dディレクトリにあるユーザーのタスクプランをこのファイルで置き換えます。
  • day: 日(1~31日。 は、その /2,......)
  • hour:時間(0〜23。 /2, ......)
  • minute:分(0~59。 /2, ......)
  • month:月(1~12。 /2, ......)
  • 曜日:週 (0-7、*、......)
  • job: 実行されるタスク。state=present に依存する。
  • name: タスクの説明
  • special_time: 実行するタイミングを指定、パラメータ: 再起動、年間、毎年、毎月、毎週、毎日、1時間ごと
  • state: タスクスケジュールが作成されたか削除されたかを確認する
  • user: どのユーザーとして実行するか

ansible test -m cron -a 'name="a job for reboot" special_time=reboot job="/some/job.sh"'
ansible test -m cron -a 'name="yum autoupdate" weekday="2" minute=0 hour=12 user="root
ansible 10.212.52.252 -m cron -a 'backup="True" name="test" minute="0" hour="2" job="ls -alh > ; /dev/null"'
ansilbe test -m cron -a 'cron_file=ansible_yum-autoupdate state=absent'


VII. yumモジュール

パッケージマネージャのyumを使用して、以下のオプションでパッケージを管理します。
apt、UbuntuシリーズとRedHatシリーズのシステムパッケージを管理するためのyumモジュールサブテーブル

  • config_file: yum 用の設定ファイル
  • disable_gpg_check: gpg_check を無効にする。
  • disablerepo: ソースを有効化しない。
  • enablerepo: ソースを有効にする
  • name: 操作するパッケージの名前。URLやローカルのrpmパッケージのパスも渡すことができます。
  • state: 状態 (インストール済み、インストールされていない、最新)

例は以下の通りです。

ansible test -m yum -a 'name=httpd state=latest'
ansible test -m yum -a 'name="@Development tools" state=present'
ansible test -m yum -a 'name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present'
Make sure the acme package is installed, but not updated
ansible webservers -m apt -a "name=acme state=present"
Ensure that the package is installed to a specific version
ansible webservers -m apt -a "name=acme-1.5 state=present"
Ensure that a package is the latest version
ansible webservers -m apt -a "name=acme state=latest"
Ensure that a package is not installed
ansible webservers -m apt -a "name=acme state=absent"

注:Ansibleは多くのオペレーティングシステムのパッケージ管理をサポートしています。適切なパッケージ管理ツールモジュールを指定するには-mを使用します。そのようなモジュールがない場合は、独自の類似モジュールを定義するか、パッケージをインストールするコマンドモジュールを使用することができます

ユーザーモジュールとグループモジュール

user モジュールは useradd, userdel, usermod ディレクティブを要求し、 goup モジュールは groupadd, groupdel, groupmod ディレクティブを要求します。

1. userモジュールの例です。

- user: name=johnd comment="John Doe" uid=1040 group=admin
- user: name=james shell=/bin/bash groups=admins,developers append=yes
- user: name=johnd state=absent remove=yes
- user: name=james18 shell=/bin/zsh groups=developers expires=1422403387
#When generating keys, only the public and private key files will be generated, which is the same as using ssh-keygen command directly, no authorized_keys file will be generated.
- user: name=test generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa

注意:passwordパラメータを指定する場合、管理ホストの/etc/shadowファイルに直接転送される後者のパスワード文字列は使用できないので、先にパスワード文字列を暗号化する必要があります。その後、できた文字列をパスワードに入れるだけです。

[root@361way ~]# openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32)
Password:
$1$YngB4z8s$atSVltYKnDxJmWZ3s.4/80
or
[root@361way ~]# echo "123456" | openssl passwd -1 -salt $(< /dev/urandom tr -dc '[:alnum:]' | head -c 32) -stdin
$1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0
#The following password string is also proven to work, but it is not in the same format as /etc/shadow and is not recommended
[root@361way ~]# openssl passwd -salt -1 "123456"
-1yEWqqJQLC66
# create user with the above password
[root@361way ~]#ansible all -m user -a 'name=foo password="$1$4P4PlFuE$ur9ObJiT5iHNrb9QnjaIB0"'
The default encryption method used by different distributions may differ, you can check the /etc/login.defs file to confirm, centos 6.5 version uses SHA512 encryption algorithm, generate the password can be given by ansible official example

python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"

2. グループの例
- group: name=somegroup state=present

IX. シンクロナイザーモジュール

以下のパラメータでrsyncを使用してファイルを同期させます。

  • archive: アーカイブ、recursive, links, perms, times, owner, group, -D オプションを同時にオンにしたものと同等、デフォルトは yes。
  • チェックサム:合計値の検出をスキップ、デフォルトではオフ
  • compress: 圧縮を有効にするかどうか
  • copy_links: リンクファイルをコピーします、デフォルトはnoです、この後にlinksパラメータがあることに注意してください
  • 削除 存在しないファイルを削除する、デフォルトはno
  • dest: ディレクトリパス
  • dest_port: デフォルトディレクトリホストのポート、デフォルトは22、sshプロトコル使用時
  • dirs: 転送速度ディレクトリは再帰を行わない、デフォルトはno、つまりディレクトリ再帰
  • rsync_opts: rsyncパラメータセクション
  • set_remote_user: 主に /etc/ansible/hosts で定義された、またはデフォルトで使用されるユーザーが、rsync で使用されるユーザーと異なる場合に使用されます。
  • mode: push または pull モジュール、push モードは一般的にローカルマシンからリモートホストにファイルをアップロードするために使用され、pull モードはリモートホストからファイルを取得するために使用されます。

インスタンスです。

src=some/relative/path dest=/some/absolute/path rsync_path="sudo rsync"
src=some/relative/path dest=/some/absolute/path archive=no links=yes
src=some/relative/path dest=/some/absolute/path checksum=yes times=no
src=/tmp/helloworld dest=/var/www/helloword rsync_opts=-no-motd,--exclude=.git mode=pull

x. mount モジュール

マウントポイントを設定する
オプションです。

  • ダンプ
  • fstype: 必須、マウントするファイルのタイプ
  • name: 必須、マウントポイント
  • opts: マウントコマンドに渡される引数
  • src: 必須、マウントするファイル
  • state: 必須
    • present: fstabのプロセス設定のみ
    • absent: マウントポイントを削除します。
    • mounted: 自動的にマウントポイントを作成し、マウントする
    • umounted: アンマウントする

name=/mnt/dvd src=/dev/sr0 fstype=iso9660 opts=ro state=present
name=/srv/disk src='LABEL=SOME_LABEL' state=present
name=/home src='UUID=b3e48f45-f933-4c8e-a700-22a159ec9077' opts=noatime state=present
ansible test -a 'dd if=/dev/zero of=/disk.img bs=4k count=1024'
ansible test -a 'losetup /dev/loop0 /disk.img'
ansible test -m filesystem 'fstype=ext4 force=yes opts=-F dev=/dev/loop0'
ansible test -m mount 'name=/mnt src=/dev/loop0 fstype=ext4 state=mounted opts=rw'


xi. get_url モジュール

このモジュールは主に、http、ftp、httpsサーバーからファイルをダウンロードするために使用されます(wgetと同様)、以下のオプションがあります。

  • sha256sum: ダウンロード完了後にsha256チェックを行います。
  • timeout: ダウンロードタイムアウト、デフォルト10秒
  • url: ダウンロードのURL
  • url_password, url_username: 主に認証にユーザー名とパスワードが必要な場合に使用されます。
  • use_proxy: プロキシを使用するもので、プロキシは事前に環境変数で定義しておく必要があります。

- name: download foo.conf
  get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440
- name: download file with sha256 check
  get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf sha256sum= b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c

公式モジュールとしては、git, svnバージョン管理モジュール、sysctl, authorized_key_moduleシステムモジュール、apt, zypper, pip, gemパッケージ管理モジュール、find, templateファイルモジュール、mysql_db, redisデータベースモジュール、urlネットワークモジュール、その他があります。詳細は公式マニュアルのモジュールセクションを参照してください。