1.アドホック問題
AD-HOCを学習した結果、AD-HOCは毎回管理対象ノードで単純なコマンドしか実行できないことがわかりました。実際の作業では、一部の複雑な操作が実行できないため、Ansibleはそのような複雑な問題の解決に役立つPlaybookを導入しました。
2.ハンドブックとは
Playbookは通常、全員がスクリプトに翻訳し
ます。Ansibleでカスタマイズされた言語と考えることができます(PlaybookはLinuxのシェルと比較でき、AnsibleのモジュールはLinuxのさまざまなコマンドと比較できます)。
3。YAML
1.特徴
- #をコメントとして使用
- .ymlまたは.yamlで終わる
- 開始-、終了...ですが、開始フラグと終了フラグはどちらもオプションです。
2.基本的な文法
- 大文字と小文字を区別
- インデントを使用して階層関係を示す
- インデント時にTabキーを使用するかスペースを使用するかは統一する必要があり、スペースを使用することをお勧めします。
- 同じレベルの要素は左揃えにする必要があります
YAMLでサポートされている3つのデータ構造があります。
- ストリング
- リスト
- 辞書
2.1文字列
---
#YAML 中的字符串可以不使用引号,即使里面存在空格的时候,当然了使用单引号和双引号也没有错。
this is a string
'this is a string'
"this is a string"
#YAML 中若一行写不完你要表述的内容的时候,可以进行折行。写法如下:
long_line: |
Example 1
Example 2
Example 3
#或者 l
ong_line: >
Example 1
Example 2
Example 3 ...
2.2リスト
---
#若熟悉 Python 的话, 可以认为它就是Python中的List ,若熟悉 C 语言的话, 可以认为它是 C 中的数组。
#如何定义: 以短横线开头 + 空格 + 具体的值
- red
- green
- blue
#以上的值假如转换成 python 的 List 会是这样:
#['red', 'green', 'blue']
...
2.3辞書
---
#若熟悉 Python 的话, 可以认为它就是 Python 中的 Dict
#如何定义: key + 冒号(:) + 空格 + 值(value), 即 key: value
name: Using Ansible
code: D1234
#转换为 python 的 Dict
#{'name': 'Using Ansibel', 'code': 'D1234'}
...
2.4ハイブリッド構造
以上で、YAMLのすべての基本的な知識ポイントが紹介されました。しかし、日常生活では、しばしば必要となるデータ構造は特に複雑になり、文字列、リスト、および辞書の組み合わせになる場合があります。ここに小さな例があります:
誰もが学校に行きました、そして、彼ら全員は彼らがユニットとしてクラスにいることを知っています。リストと辞書の形式を使用して、クラスの構成を記述します。
---
class:
- name: stu1
num: 001
- name: stu2
num: 002
- name: stu3
num: 003
{
'class': [{
'name': 'stu1', 'num': 1},{
'name': 'stu2', 'num': 2},...]}
...
字典中有列表,列表中有字典
2.5 YMAL構文を確認する
// PythonのYAMLモジュールを通じてYAMLファイルを確認し、正しくない場合はエラーを報告します。正しければYAMLのコンテンツが出力されます。
//使用する際は、必ずyamlソフトウェアパッケージをインストールしてください。
python -c'import yaml、sys; printyaml.load(sys.stdin) 'myyaml.yml
python3 -c'import yaml、sys; print(yaml.load(sys.stdin))' myyaml.yml
例
// 正确的情况
cat myyaml.yml
---
- red
- green
- blue
...
#python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < myyaml.yml
['red', 'green', 'blue']
// 错误的情况, 将YAML文件写错
#cat myyaml.yml
---
- red
- green
-blue
...
#python -c 'import yaml,sys; print yaml.load(sys.stdin)' < myyaml.yml
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/yaml/__init__.py", line 71, in load
return loader.get_single_data()
File "/usr/local/lib/python2.7/site-packages/yaml/constructor.py", line 37, in get_single_data
node = self.get_single_node()
...
...
4.ハンドブックの準備
1.遊びの定義
1.すべてのPlayはダッシュで始まります
2.すべてのPlayはYAML辞書形式です
上記の2つのPlayルールによると、架空のPlayは次のようになります。
---
- key1: value1
key2: value2
key3: value3
...
Playbookは1つ以上のPlayで構成されるため、複数のPlayを持つPlaybookの構造は次のようになります。
---
#一个含有3个Play 的伪PlayBook构成
- key1: value1
key2: value2
key3: value3
- key4: value1
key5: value2
key6: value3
- key1: value1
key2: value2
key3: value3
...
2.プレイ属性
前のセクションのPlayに基づいて、key1、key2などのPlayの各キー。これらのキーはPlayBookのPlayの属性として定義されます。
これらの属性には特別な意味があり、Playの属性を自由にカスタマイズすることはできません
共通の属性
- 各プレーの名前であるname属性はカスタマイズ可能です
- 各プレーに関係する管理対象サーバーであるhosts属性は、アドホックのアセットセレクターと同じです。
- タスク属性、リストの形式で表される、各プレイで完了する特定のタスク
- 属性になる、あなたが権利を上げる必要がある場合は、関連属性になる
- 特権が発生した場合は、become_user属性。
- remote_user属性は、リモートノードに接続しているユーザーを指定します。これは、リモートサーバーで特定の操作を実行するユーザーです。指定しない場合、現在ansibleプレイブックを実行しているユーザーがデフォルトで使用されます
3.完全なスクリプト
前のセクションで紹介した実際の属性によると、プレイ付きのプレイブックは次のようになります。
---
- name: the first play example
hosts: webservers
remote_user: root #远程用户
tasks:
- name: install nginx package #任务名称
yum: name=nginx state=present
- name: copy nginx.conf to remote server
copy: src=nginx.conf dest=/etc/nginx/nginx.conf
- name: start nginx server
service:
name: nginx
enabled: true
state: started
4. tasks属性でタスクを記述するさまざまな方法
#以启动 nginx 服务,并增加开机启动为例
#一行的形式:
service: name=nginx enabled=true state=started
#多行的形式:
service: name=nginx
enabled=true
state=started
#多行写成字典的形式:
service:
name: nginx
enabled: true
state: started
5.複数回のプレイが可能なプレイブック
---
- name: manage web servers
hosts: webservers
remote_user: root
tasks:
- name: install nginx package
yum: name=nginx state=present
- name: copy nginx.conf to remote server
copy: src=nginx.conf dest=/etc/nginx/nginx.conf
- name: start nginx server
service:
name: nginx
enabled: true
state: started
- name: manager db servers
hosts: db_servers
tasks:
- name: update database confg
copy: src=my.cnf dest=/etc/my.cnf
6. Playbookの構文を確認する方法
次の検証方法では、プレイブックが正しいかどうかのみを検証できますが、YAMLファイルが構文的に正しいかどうかは検証できません
#ansible-playbook -i hosts myplaybook.yml --syntax-check #语法检查
PlaybookはYAML形式に属しているため、YAML構文形式のチェックを使用して、Playbookの構文が正しいかどうかをチェックすることもできます
#python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < myplaybook.yml
7. PlayBookの実行方法
ansible-playbook -i hosts myplaybook.yml
8.シングルステップでデバッグプレイブックをフォローする方法
// 执行Task中的任务,需要手动确认是否往下执行。
#ansible-playbook -i hosts myplaybook.yml --step
9.プレイブックをテストして実行する方法
テストの実行ではPlayBook全体が実行されますが、タスクのすべてのアクションはリモートサーバーでは実行されず、すべての実行はシミュレートされたアクションです。
#ansible-playbook -i hosts myplaybook.yml -C
// -C 为大写的字母 C