(Translated by https://www.hiragana.jp/)
小粋空間

ansibleでハッシュの配列はいれつをチェックする方法ほうほう

March 7,2025 12:03 AM
Category:[ansible]
Tag:[ansible]
Permalink

ansibleでハッシュの配列はいれつをチェックする方法ほうほう紹介しょうかいします。

1.はじめに

下記かきの3ファイルのmd5sumあらかじ用意よういしたコンフィグに設定せっていし、サーバじょうかくファイルのmd5sumとひとしいか、チェックする必要ひつようしょうじました。

ということで、ansibleでハッシュの配列はいれつをチェックする方法ほうほう紹介しょうかいします。

2.やりたいこと

複数ふくすうのファイルをチェックできるように、ファイルめいとファイルのmd5sumをハッシュの配列はいれつにしたいです。
ファイルのパスも動的どうてき取得しゅとくしたいので、おなじくハッシュの配列はいれつふくめます。

また、コンフィグはrolesディレクトリのなかではなく、かりやすい任意にんい場所ばしょ配置はいちしたいです。

3.コンフィグのサンプル

前項ぜんこう要望ようぼうにしたがい、コンフィグは下記かきのようにしました。

/var/tmp/config.yml

files:
  - name: kdump
    path: /etc/sysconfig
    md5sum: e417c7b5754df7287f41b478f2200793
  - name: CentOS-Base.repo
    path: /etc/yum.repos.d
    md5sum: 447b4d2df1a36e64348bbd8b6c5b0fae
  - name: sysctl.conf
    path: /etc
    md5sum: 4bae3962eeef7d1e7c7ef39314db9fb0

"files"というハッシュキーのなか配列はいれつつくり、さらにそれぞれの配列はいれつに、

  • ファイルめい
  • ファイルパス
  • md5sum

設定せっていしました。

これをansibleでませるにはどうすればいいかを次項じこう説明せつめいします。

4.コンフィグファイルの

コンフィグファイルをむには、Playbook本体ほんたい(test.yml)に"vars_files"をもちいます。

test.yml

- hosts: test
  roles:
    - role: test
  vars_files:
    - "/var/tmp/config.yml"

これで、実行じっこうするロールないのタスクで前述ぜんじゅつのコンフィグをむことができます。

5.ハッシュの配列はいれつをチェック

ハッシュの配列はいれつをチェックするには、ロールないのタスク(roles/test/tasks/main.yml)を下記かきのようにします。

roles/test/tasks/main.yml

- name: ファイルのmd5sum実行じっこう
  command: "md5sum {{ item.path }}/{{ item.name }}"
  loop: "{{ files }}"
  register: file_md5_result
  changed_when: false
 
- name: ファイルのmd5sum結果けっか取得しゅとく
  set_fact:
    md5sum_result: "{{ item.stdout.split(' ')[0] }}"
  loop: "{{ file_md5_result.results }}"
  register: file_md5
 
- name: コンフィグのmd5sumと比較ひかく
  fail:
    msg: "### {{ item.name }}のmd5sumが一致いっちしません ###"
  failed_when: item.md5sum != file_md5.results[index].ansible_facts.md5sum_result
  loop: "{{ files }}"
  loop_control:
    index_var: index

タスクの解説かいせつです。まず、loopにコンフィグのハッシュキー"files"を指定していし、コンフィグからファイルの情報じょうほう収集しゅうしゅうし、md5sumを実行じっこうします。

実行じっこう結果けっかはfile_md5_result(配列はいれつ)に保持ほじします。changed_whenは、md5sum実行じっこうでchanged=1となるのを抑止よくししています。

- name: ファイルのmd5sum実行じっこう
  command: "md5sum {{ item.path }}/{{ item.name }}"
  loop: "{{ files }}"
  register: file_md5_result
  changed_when: false

つぎ実行じっこう結果けっかfile_md5_resultをloop変数へんすう指定していし、splitを使つかってmd5sumのみを収集しゅうしゅうし、set_factを使つかって変数へんすう"md5sum_result"に設定せっていします。

- name: ファイルのmd5sum結果けっか取得しゅとく
  set_fact:
    md5sum_result: "{{ item.stdout.split(' ')[0] }}"
  loop: "{{ file_md5_result.results }}"
  register: file_md5

最後さいごに、もう一度いちどloopにコンフィグのハッシュ"files"を指定していし、

- name: コンフィグのmd5sumと比較ひかく
  fail:
    msg: "### {{ item.name }}のmd5sumが一致いっちしません ###"
  failed_when: item.md5sum != file_md5.results[index].ansible_facts.md5sum_result
  loop: "{{ files }}"
  loop_control:
    index_var: index

failed_whenは、指定していした条件じょうけんがTrueのとき、タスクを失敗しっぱいさせる条件じょうけん定義ていぎします。

ここでは、コンフィグのmd5sum配列はいれつ変数へんすう保持ほじしたmd5sumひとしくない場合ばあいにタスクを失敗しっぱいさせます。

タスクを失敗しっぱいさせた場合ばあいにfailが発動はつどうし、msgに指定していした文字もじれつ出力しゅつりょくします。

「index_var: index」は、ループのインデックス(0からはじまる番号ばんごう)を"index"という変数へんすうとして利用りようできるようにしています。

これを使つかうことで、配列はいれつ変数へんすう"file_md5.results"をインデックスを使つかってじゅん参照さんしょうできます。

Comments [0] | Trackbacks [0]

bashスクリプトでCSVファイルを方法ほうほう

February 14,2025 11:55 PM
Category:[bash]
Tag:[bash]
Permalink

bashスクリプトでCSVファイルを方法ほうほう紹介しょうかいします。

1.問題もんだいてん

bashスクリプトで大量たいりょうCSVのデータを必要ひつようしょうじましたが、方法ほうほうがわかりません。

ということで、bashスクリプトでCSVファイルを方法ほうほう紹介しょうかいします。

2.bashスクリプトでCSVファイルを

ここではCSVファイルに「名前なまえ」「ユーザーめい」「パスワード」を3けん設定せっていしたファイル(sample.csv)をむものとします。

山田やまだ,yamada,GU2LTgyM
鈴木すずき,suzuki,Njg4ZWYz
佐藤さとう,sato,b291bf53

bashスクリプト(test.sh)でCSVファイルをむにはつぎのようにします。

#!/bin/bash
 
# 引数ひきすうでCSVファイルめい取得しゅとく
input_file="$1"
 
# CSVファイルをくだりごとにみ
while IFS=',' read -r NAME USER PASS; do
 
    echo "名前なまえ: $NAME"
    echo "ユーザーめい: $USER"
    echo "パスワード: $PASS"
 
    # ここに必要ひつよう処理しょり追加ついか
 
done < "$input_file"

これでCSVファイルの内容ないようが1ぎょうずつまれ、変数へんすう$NAME,$USER,$PASSにそれぞれ格納かくのうされます。

あとは、必要ひつよう処理しょりをそのなか追加ついかすればOKです。

実行じっこう結果けっか

$ ./test.sh sample.csv
名前なまえ: 山田やまだ
ユーザーめい: yamada
パスワード: GU2LTgyM
名前なまえ: 鈴木すずき
ユーザーめい: suzuki
パスワード: Njg4ZWYz
名前なまえ: 佐藤さとう
ユーザーめい: sato
パスワード: b291bf53

引数ひきすう設定せっていされていない場合ばあいのチェックをおこなうには、赤字あかじ処理しょり追加ついかします。

#!/bin/bash
 
# 引数ひきすうでCSVファイルめい取得しゅとく
input_file="$1"
 
# 引数ひきすう指定していされていない場合ばあいのエラーメッセージ
if [[ -z "$input_file" ]]; then
    echo "使用しようほう: $0 <CSVファイルめい>"
    exit 1
fi
 
# CSVファイルをくだりごとにみ
while IFS=',' read -r NAME USER PASS; do
 
    echo "名前なまえ: $NAME"
    echo "ユーザーめい: $USER"
    echo "パスワード: $PASS"
 
    # ここに必要ひつよう処理しょり追加ついか
 
done < "$input_file"

さらに、CSVファイルにコメントぎょう空行くうぎょうふくまれる場合ばあい赤字あかじ処理しょり追加ついかします。

#!/bin/bash
 
# 引数ひきすうでCSVファイルめい取得しゅとく
input_file="$1"
 
# 引数ひきすう指定していされていない場合ばあいのエラーメッセージ
if [[ -z "$input_file" ]]; then
    echo "使用しようほう: $0 <CSVファイルめい>"
    exit 1
fi
 
# CSVファイルをくだりごとにみ
while IFS=',' read -r NAME USER PASS; do
 
    # 空行くうぎょうやコメントぎょうはスキップ
    if [[ -z "$NAME" || "$NAME" =~ ^# ]]; then
        continue
    fi
 
    echo "名前なまえ: $NAME"
    echo "ユーザーめい: $USER"
    echo "パスワード: $PASS"
 
    # ここに必要ひつよう処理しょり追加ついか
 
done < "$input_file"
Comments [0] | Trackbacks [0]

TeraTermで「サーバはこのマシンに転送てんそうこころみました」のメッセージを抑止よくしする方法ほうほう

February 3,2025 11:55 PM
Category:[Linux]
Tag:[Linux, TeraTerm]
Permalink

TeraTermで「サーバはこのマシンに転送てんそうこころみました」のメッセージを抑止よくしする方法ほうほう紹介しょうかいします。

1.問題もんだいてん

TeraTermでサーバにログインすると下記かきのダイアログが表示ひょうじされることがあります。

サーバはこのマシンに転送てんそうこころみました.
localhost じょうのXサーバへの接続せつぞく要求ようきゅうしました (ディスプレイ 0:0).
接続せつぞく拒否きょひされました (おそらくサービス停止ていしちゅうです)(code 10061).
転送てんそう接続せつぞく終了しゅうりょうします.

このダイアログをすとログインまで辿たどきますが、そもそもこのダイアログを表示ひょうじさせない方法ほうほうがわかりません。

ということで、TeraTermで「サーバはこのマシンに転送てんそうこころみました」のメッセージを抑止よくしする方法ほうほう紹介しょうかいします。

2.「サーバはこのマシンに転送てんそうこころみました」のメッセージを抑止よくしする

メッセージを抑止よくしするには、「設定せってい」→「SSH転送てんそう選択せんたく

「リモートのXアプリケーションをローカルのXサーバに表示ひょうじする」のチェックをはずします。

これでSSHログインにダイアログが表示ひょうじされなくなるとおもいます。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages
Loading...