ansible がホスト情報を取得し、mysql データベースに保存する。
2022-02-18 01:22:38
#! /usr/bin/python
# -*- coding:UTF-8 -*-.
インポート os
インポートシステムズ
インポートコマンド
MySQLdbのインポート
インポート json
#すべてのファクトを取得し、ホスト名をファイル名とするパスに保存する
(status, output) = commands.getstatusoutput('ansible all -m setup --tree /root/hosts')
#print status,'++++++++++++++'
#root/hosts 以下のファイルに .json サフィックスを追加します。
def rename_file(path):
print rename_file('/root/hosts')
#ホストのファクトを取得し、データベースに保存する
もし ~status:
#ファイル一覧の取得
<スパン if ~status:
<スパン # hosts データテーブルを作成する
flag = cursor.execute(" show tables like 'hosts' ")
# print flag,'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if flag == 0:
<スパン ファイル = open("/root/host_list","r")
<ブロッククオート if ファイルを使用します。
<スパン
# -*- coding:UTF-8 -*-.
インポート os
インポートシステムズ
インポートコマンド
MySQLdbのインポート
インポート json
#すべてのファクトを取得し、ホスト名をファイル名とするパスに保存する
(status, output) = commands.getstatusoutput('ansible all -m setup --tree /root/hosts')
#print status,'++++++++++++++'
#root/hosts 以下のファイルに .json サフィックスを追加します。
def rename_file(path):
for file in os.listdir(path):<ブロッククオート
if os.path.isfile(os.path.join(path,file)) == True:
<ブロッククオート <ブロッククオート if file.find('.json') < 0:<ブロッククオート <ブロッククオート <ブロッククオート
newname = file + '.json' です。<ブロッククオート <ブロッククオート <ブロッククオート os.rename(os.path.join(path,file),os.path.join(path,newname)) <ブロッククオート <ブロッククオート <ブロッククオート プリントファイル,'ok' <ブロッククオート <ブロッククオート <ブロッククオート でなければ <ブロッククオート <ブロッククオート <ブロッククオート <ブロッククオート 続ける <ブロッククオート <ブロッククオート でなければ <ブロッククオート <ブロッククオート
続ける
print rename_file('/root/hosts')
#ホストのファクトを取得し、データベースに保存する
もし ~status:
#ファイル一覧の取得
(status,output) = commands.getstatusoutput('ls /root/hosts > /root/host_list')# print status,'-------------'
<スパン if ~status:
# データベース接続を開く
db = MySQLdb.connect("localhost","ansible","R00t@123","ansible") )
# cursor()メソッドを使用して操作カーソルを取得する
cursor = db.cursor()
<スパン # hosts データテーブルを作成する
flag = cursor.execute(" show tables like 'hosts' ")
# print flag,'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if flag == 0:
create_hosts_table = ''' CREATE TABLE hosts (
ip char(20) primary key not null,
ホスト名 CHAR(50)。
ゲートウェイCHAR(20)。
mac CHAR(30)。
ディストリビューション CHAR(20)。
distribution_version CHAR(20)。
アーキテクチャ CHAR(20)。
カーネル CHAR(30)。
プロセッサCHAR(100)。
processor_cores CHAR(20)。
processor_count CHAR(20))です。
cursor.execute(create_hosts_table)を実行します。
<スパン ファイル = open("/root/host_list","r")
<ブロッククオート if ファイルを使用します。
をファイル内の行に追加してください。<ブロッククオート
事実 = line.strip('\n')
ファクトを印刷する
#各ホストのファクトを取得する
file_fact = open("/root/hosts/"+fact,"r")<ブロッククオート if file_fact: <ブロッククオート <ブロッククオート
データ = json.loads(file_fact.read())<ブロッククオート
ホスト名 = data['ansible_facts']['ansible_hostname'] とする。<ブロッククオート <ブロッククオート IP = data['ansible_facts']['ansible_default_ipv4']['address'] (アドレス) <ブロッククオート
ゲートウェイ = data['ansible_facts']['ansible_default_ipv4']['gateway'] (ゲートウェイ)<ブロッククオート
mac = data['ansible_facts']['ansible_default_ipv4']['macaddress'] とする。<ブロッククオート
distribution = data['ansible_facts']['ansible_distribution'] とする。<ブロッククオート <ブロッククオート distribution_version = data['ansible_facts']['ansible_distribution_version'] とする。 <ブロッククオート
アーキテクチャ = data['ansible_facts']['ansible_architecture'] (英語)<ブロッククオート <ブロッククオート カーネル = data['ansible_facts']['ansible_kernel'] とする。 <ブロッククオート <ブロッククオート プロセッサ = data['ansible_facts']['ansible_processor'][1]. <ブロッククオート <ブロッククオート processor_cores = data['ansible_facts']['ansible_processor_cores'] とする。 <ブロッククオート <ブロッククオート processor_count = data['ansible_facts']['ansible_processor_count'] とする。 <ブロッククオート
ホスト名、アーキテクチャ、ディストリビューション、ディストリビューションバージョン、カーネル、IP、ゲートウェイ、mac、プロセッサを表示する。<ブロッククオート
#ホストデータの有無を確認する。
check_host = "セレクト * from hosts where IP = '%s' " % (IP)
flag = cursor.execute(check_host)
# print (フラグ,タイプ(フラグ))
#ホスト情報が既に存在する場合は更新する
if flag ! = 0L:<ブロッククオート <ブロッククオート <ブロッククオート sql = "update hosts set IP = '%s',hostname = '%s',gateway = '%s',mac = '%s',distribution = '%s',distribution_version = '%s',architecture = '%s',kernel = '%s',processor = '%s',processor_cores = '%s' where IP = '%s' ".に設定されたホストを更新します。% (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count,IP) <ブロッククオート
#ホストが存在しない場合、ホスト情報を挿入する
でなければ<ブロッククオート <ブロッククオート <ブロッククオート sql = "insert into hosts (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count) values ('%s','%s','%s','%s','%s','%s','%s','%s') " % (IP,hostname,gateway,mac,distribution,distribution_version,architecture,kernel,processor,processor_cores,processor_count) <ブロッククオート <ブロッククオート を試してみてください。 <ブロッククオート <ブロッククオート
# sql文の実行<ブロッククオート
# print (sql,'******************')<ブロッククオート <ブロッククオート カーソル.execute(sql) <ブロッククオート
# データベースにコミットして実行する<ブロッククオート
db.commit()<ブロッククオート
print (" '%s' update successfully ! ") % (ホスト名)<ブロッククオート
を除く。<ブロッククオート <ブロッククオート
# エラー発生時のロールバック<ブロッククオート <ブロッククオート db.rollback() <ブロッククオート
print '何かおかしいぞ! '<ブロッククオート <ブロッククオート
file_fact.close #ファイルを閉じる "/root/hosts/"+fact<ブロッククオート <スパン <スパン <スパン
<スパン
db.close()
関連
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
Python辞書ループ RuntimeError: 反復中に辞書のサイズが変更されたエラー解析
-
[解決済み] Plexの「最近追加した項目」からビデオを削除する
-
[解決済み] Pythonで括弧を表示する方法
-
[解決済み] Pythonで予期しないトークン`;'付近で構文エラーが発生する
-
[解決済み] パイソン 複数の関数を同時に実行する
-
[解決済み] python ソケットサーバ - クライアントが接続を切断してもリスンする
-
[解決済み] from utils import label_map_util Import Error: utils という名前のモジュールがない
-
[解決済み] Python/Kivy : kivyにカレンダーを追加する。
-
Pythonの各種実行時エラー(SyntaxError : invalid syntaxなど)。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Python TypeError: object.__format__ に渡される空でないフォーマット文字列
-
[解決済み】Python HTTP Server/Client: リモートエンドが応答なしで接続を閉じたエラー
-
[解決済み】TypeError: 'builtin_function_or_method' オブジェクトは、添え字を書くことができません。
-
[解決済み] 要求されたアドレスは、そのコンテキストでは有効ではありません。
-
[解決済み] ValueError: xとyは同じサイズでなければならない
-
[解決済み] AttributeError: 'NoneType' オブジェクトには 'lower' 属性がない python
-
[解決済み] 指定した1列を除くすべてのDataFrameを取得する【重複
-
[解決済み] Pythonで、intをstringに変換するときに、フォーマットを指定する方法は?
-
[解決済み] Pythonで同義語/単語列と結合する
-
pycharm が表示される "PEP:8 expected 2 blank lines , found 0" 。