、セットアップモジュール
前回の記事では、いくつかの変数の初期使用を要約した前に、私たちはこの記事を続けますが、この記事の内容は、使用するために、2つのモジュール、関連する変数のように詳細な要約を使用する必要性に関し、私たちは、最初にこれらの二つのモジュールの使用方法を説明します。
タスク我々が脚本を実行すると、デフォルトは「[事実の収集]」と呼ばれるファイルを実行し、予め粗リモートホストを収集するために、関連する「[収集の事実]」このデフォルトのタスクを通じてansibleこのデフォルトのタスクを、カバーされています情報、我々はこの情報を使用する場合、実際には、これらは、対応する変数に保存されますリモートホスト情報に私たちができる収集されている(例えば、リモートホストのIPアドレス、ホスト名、システムのバージョン、ハードウェア構成やその他の情報など)この情報を使用するためには、対応する変数を取得します。
あなたが収集する情報の内容タスク「[事実の収集]」を参照したい場合、我々はモジュールを使用することができます。セットアップ・モジュール
実際に脚本、脚本を行う場合には、自動呼セットアップ・モジュールを&QUOT実行するために、[収集の事実]& QUOT; タスクを、私たちは、「[事実の収集]」例えば、セットアップ・モジュール手動で行う作業を通じて収集した情報を見ることができます:
[ansible制御脚本@ルート]#ansible 192.168.10.3 -mセットアップ
アドホックコマンドの上に、上記のコマンドを実行した後、リモートホスト情報192.168.10.3がansibleホストのコンソールに出力されます関連する情報収集192.168.10.3ホストことを示し、情報のフォーマットはJSON形式を返され、私の:情報は以下の通りである戻り
、単に例示のため、情報が完全ではない戻るように、より多くの情報が戻されるように、ここで例示的な便宜のために、私がコンテンツの一部を除去する(又は図示崩壊):注意。
[ansible制御脚本@ルート]#ansible 192.168.10.3 -mセットアップ 192.168.10.3 | SUCCESS => { "ansible_facts":{ "ansible_all_ipv4_addresses": "192.168.10.3"、 "192.168.122.1" ]、 "ansible_all_ipv6_addresses":[ "FE80 :: 1f2f:cc8b:e62b:863b"、 「FE80 :: 199A :2158:dfe7:4fe5" 、 "FE80 :: 8c0d:6c18:2f44:573A" ]、 "ansible_apparmor":{ "ステータス": "無効" }、 "ansible_architecture": "x86_64の"、 " "ansible_cmdline":{ "BOOT_IMAGE": "/vmlinuz-3.10.0-957.el7.x86_64"、 "LANG": "zh_CN.UTF-8"、 "crashkernel": "自動"、 "静か":真、 "rd.lvm.lv": "CentOSの/スワップ"、 "rhgb":真、 "RO":真、 "ルート": "は/ dev /マッパ/ CentOSのルート" }、 "ansible_date_time":{ "日付" : "2019年8月25日"、 "日": "25"、 "エポック": "1566700526"、 "時間": "10"、 "ISO8601": "2019-08-25T02:35:26Z"、 "iso8601_basic": "20190825T103526546802"、 "iso8601_basic_short": "20190825T103526"、 "iso8601_micro": "2019-08-25T02:35:26.546939Z"、 "分": "35"、 "月": "08"、 "秒": "26"、 "時間": "十時35分26秒"、 "TZ":「CST " "TZ_OFFSET": "0800"、 "平日": "星期日"、 "weekday_number": "0"、 "weeknumber": "33"、 "年": "2019" }、 "ansible_default_ipv4":{ "アドレス": "192.168.10.3"、 "エイリアス": "ens33"、 "ブロードキャスト": "192.168.10.255"、 "ゲートウェイ": "192.168.10.254"、 "インターフェース": "ens33"、 "なmacaddress": "00:0C:29:45:10:2D"、 "MTU":1500 "ネットマスク": "255.255.255.0"、 "ネットワーク": "192.168.10.0"、 "タイプ": "エーテル" }、 "ansible_default_ipv6":{}、 "ansible_device_links":{ "IDS":{ 「DM-0 「[ "DM-名のCentOSルート"、 "DM-UUID-LVM-ZZUQOeHWfHVeQ2mGcQ3nlWQW0bSGeph90XISTL67goS7QJc7HNMRWJSiyZ1eStbc" ]、 "DM-1":[
................... .................................................. .........................
例えば関連するパラメータ:
「Ansible_all_ipv4_addressesは」リモートホストのすべてのIPv4アドレスを意味し、それは、4つのIPv4アドレスtest70ホストの合計に対応した値から分かります。
「Ansible_distribution」は、システムがリモートホストを解放することを示し、それはそれに対応する値test70ホストシステムのリリースから分かるCentOSのです。
「Ansible_distribution_versionは」リモートホストシステムのバージョン番号を示し、その値から見ることができる「ansible_distribution」に対応する192.168.10.3ホスト・システム・バージョンの値がcentos7.6あります。
「Ansible_ens35は、」リモート・ホスト・ens35カードに関する情報を表します。
「Ansible_memory_mbは、」リモートホストのメモリ構成情報を表します。
返される情報は、あなただけの情報の特定の種類を確認したい場合は、キーワードで情報をフィルタリングすることができ、実際に多く、非常に包括的ではなく、私たちは多くの情報を確認する必要が毎回あり、例えば、私はちょうど見たいですリモートホストのメモリ構成情報は、その後、私は、次のコマンドを使用できます。
[ansible制御脚本@ルート]#ansible 192.168.10.3 -mセットアップ-a 'フィルタ= ansible_memory_mb' 192.168.10.3 | SUCCESS => { "ansible_facts":{ "ansible_memory_mb":{ "NOCACHE":{ "フリー":456、 "使用":516 }、 "本物":{ "フリー":66、 "合計":972、 "中古":906 }、 "スワップ":{ "キャッシュ":0、 "フリー":2045、 "合計":2047、 "discovered_interpreter_python": "は/ usr / binに/ pythonの" }、 "変更":偽 }
正確な情報は、あなたが戻る必要があるので、これは私は何人かの人々が私を好きなことを知って、多くのことを合理化します、悪い記憶、それは通常、正確なキーワードを覚えていないので、我々はワイルドカードを使用することができ、ファジー相対例えば濾過、。
[ルート@ ansible制御脚本]#ansible 192.168.10.3 -mセットアップ-a "フィルタ= * MB *"
実際には、この情報に加えて、我々はまた、リモートホストをカスタマイズするための情報の一部を書くことができます、これらのカスタム情報は、セットアップモジュールに収集することができます。
だから、我々はそれがどこの情報を定義する必要がありますか?どのような情報の定義?
ansibleは、ターゲットホストにデフォルトのディレクトリを/etc/ansible/facts.dするホストにカスタム情報を探し、カスタマイズされた情報を提供します」とのものは、ファイルに「.fact」サフィックスを順に書く必要があります文書の内容について.fact」接尾辞が必要とされるか、INI形式は、JSON形式です。
それでは、テストファイルを作成し、192.168.10.3ホストを/etc/ansible/facts.d/testinfo.fact形式INIファイルに次の情報を書き込むためのファイルパスをテストしてみましょう。
testinfo.fact [ルート@ ansible制御facts.d]#猫 [testmsg] =これは最初のカスタム・テスト・メッセージMSG1で MSG2 =これは2番目のカスタム・テスト・メッセージであります
上述したように、上記内容は、私が「[testmsg」構成セクションに2つのカスタム情報、MSG1及びMSG2を構成し、INIスタイルでした。
もちろん、我々はまた、/etc/ansible/facts.d/testinfo.fact効果構成ファイルに書き込むように、JSON形式を使用するように構成することができ、以下、上述した構成は同じであるが、異なる書き込みフォーマット。
{ 「testmsg」:{ 「MSG1」、「これは最初のカスタム・テスト・メッセージである」 「MSG2」:「これは第二のカスタム・テスト・メッセージです」 } }
上記の方法を通じて、我々はセットアップ・モジュールを実行すると、「地元の事実は、」リモートホストがローカルターゲットホスト上になり、地元のカスタム情報が「ローカルな事実」と呼ばれているこれらのリモートホストの情報をカスタマイズすることができます次のように私たちは、リモート・ホスト「ansible_local」キーワード「ローカル事実」情報、サンプルコマンドでフィルタすることができ、収集してください。
[ルート@ ansible-制御/]#ansible 192.168.10.3 -mセットアップ-a "フィルタ= ansible_local" 192.168.10.3 | SUCCESS => { "ansible_facts":{ "ansible_local":{ "testinfo":{ "testmsg":{ "MSG1"、 "これは最初のカスタム・テスト・メッセージである" "MSG2":「これは第二のカスタム・テスト・メッセージであります" } } }、 "discovered_interpreter_python": "は/ usr / binに/ pythonの" }、 ""変更:偽 }
私は前に言った、リモートホストによって収集セットアップ「地元の事実は」、デフォルトでは、他のカスタムパスに「地元の事実」情報ファイルを置く場合には、リモートホスト/etc/ansible/facts.dディレクトリを見つけることになりますときセットアップ・モジュールを使用した場合、ターゲット・ホスト 『/ TESTDIR』ディレクトリに格納されている「fact_path」パラメータは、対応するパスを指定し、それが想定され、私は「.fact」ファイルを使用して、サンプルコマンドは、次のとおりです。
[ルート@のansible制御/]#ansible 192.168.10.3 -m設定-a "fact_path = /テスト"
二、デバッグモジュール
デバッグモジュールの役割は、私たちが問題を見つけることができるように、デバッグ、デバッグ・モジュールは、ansibleコンソールに出力情報に私たちを助けることができる私たちを支援することです。だから、脚本小さな例は次のようにのは、デバッグモジュールを見てみましょう:
--- -ホスト:192.168.10.3 REMOTE_USER:ルート タスク: -名前:タッチファイルの ファイル: パス:/テスト/テストファイルの 状態:タッチ -名前:デバッグデモ デバッグ: MSG:これは、デバッグ情報、テストファイルがタッチされたあります
上例中,我们先在192.168.10.3主机上touch了对应的文件,然后,利用debug模块在控制台中输出了我们想要显示的信息,如你所见,debug模块的msg参数可以指定我们想要输出的信息,上述playbook表示touch完对应的文件以后,在ansible控制台中输出我们指定的信息,那么我们运行一下这个测试剧本,看一下效果,如下:
debug模块除了能够使用msg参数输出自定义的信息,还能够直接输出变量中的信息,通过debug模块直接输出变量信息需要使用var参数,示例如下:
--- - hosts: 192.168.10.3 remote_user: root vars: testvar: value of test variable tasks: - name: debug demo debug: var: testvar
上例虽然连接到了test70远程主机,但是并没有对192.168.10.3主机做任何操作,只是在playbook中定义了一个变量,并且通过debug的var参数输出了这个变量的内容,只是为了单纯的演示debug模块的var参数的使用方法,上述playbook的执行效果如下:
变量的名称以及变量的值都输出到了屏幕上,这个功能可以帮助我们调试playbook中变量,让我们了解变量的值是否符合我们的要求。
当然,使用debug的msg参数时也可以引用变量的值,这样我们自定义的信息就更加灵活了,示例如下:
--- - hosts: 192.168.10.3 remote_user: root vars: testvar: testv tasks: - name: debug demo debug: msg: "value of testvar is :{{testvar}}"
上例中的msg自定义信息中引用了testvar变量的值
注:上例中msg的值需要使用引号引起,因为{{testvar}}变量前包含“冒号”,如果不使用引号会报语法错误。
上例输出效果如下:
回归正题:
setup模块与debug模块了解完了,现在绕回一开始的话题,playbook在运行时默认都会运行“[Gathering Facts]”任务,“[Gathering Facts]”任务会收集远程主机的相关信息,这些信息会保存在对应的变量中,我们在playbook中可以使用这些变量,从而利用这些信息,那么我们怎样在playbook获取到这些变量的值呢?在setup模块的示例中,我们可以通过“ansible_memory_mb”关键字获取远程主机的内存信息,其实,“ansible_memory_mb”就是一个变量名,换句话说就是,我们可以在playbook中直接引用名为“ansible_memory_mb”的变量,从而获取到远程主机的内存信息,示例如下:
--- - hosts: 192.168.10.3 remote_user: root tasks: - name: debug demo debug: msg: "Rometo host memory information :{{ansible_memory_mb}}"