首次使用Ansible(第三章:清单文件:描述服务器)
一边阅读《初次接触Ansible》一书时,同时记录笔记。
前面提到的
第一次使用Ansible(第1章:简介)
第一次使用Ansible(第2章:Playbook入门)
库存文件
-
- 管理対象とするサーバー(ホスト)を明示するファイル
.ini ファイルフォーマットで記述される
按照官方文档所述,默认情况下,/etc/ansible/hosts 是清单文件的位置。
如果要指定库存文件
-
- コマンドラインから -i オプションで指定
ansible.cfg で指定1
ansible.cfg ファイルの中で inventory = のような記述をしてインベントリファイルの場所を明示
バージョン1.9までは hostfile が利用されていたが現在は非推奨(hostfile)
行为型库存参数
行为清单参数的列表被整理在一起。
- これらのうち ansible.cfg ファイル内の [defaults] セクションでデフォルト値をオーバーライドできるものが下記
ansible.cfg
のオプションansible_ssh_portremote_portansible_ssh_userremote_useransible_ssh_private_keyprivate_key_fileansible_shell_typeexecutable当谈及ansible.cfg文件时,存在以下情况时不可使用。
[defaults]
inventory = inventory // インベントリファイルの場所を明示
remote_user = vagrant // ansible_ssh_user をオーバーライド
private_key_file = ~/.vagrant.d/insecure_private_key // ansible_ssh_private_key をオーバーライド
※就像上面所述,你可以在 inventory = 中指定包含库存文件的目录。
[vagrant]
vagrant1 ansible_ssh_host=127.0.0.1 remote_port=2222
vagrant2 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200
vagrant3 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2201
如果 ansible.cfg 配置文件中的主机清单文件(hosts)如上所示,
那么在所有主机中,可以访问 vagrant2 和 vagrant3,但无法访问 vagrant1。
使用vagrant up命令启动3台主机进行验证,结果如下所示。
$ ansible all -a "date" // 全てのホストで date コマンドを実行
vagrant1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 127.0.0.1 port 22: Connection refused\r\n",
"unreachable": true
}
vagrant2 | SUCCESS | rc=0 >>
Sat Nov 12 12:27:09 UTC 2016
vagrant3 | SUCCESS | rc=0 >>
Sat Nov 12 12:27:09 UTC 2016
小组
-
- インベントリファイル内で複数のホストのグループを独自に定義できる
- 定義したグループごとに設定のタスクなどを実行させる
如果使用正式环境、演示环境和本地Vagrant环境,则可以进行以下配置。
[production]
production1
production1
:
[staging]
staging1
staging2
[vagrant]
vagrant1 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222
vagrant2 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2200
vagrant3 ansible_ssh_host=127.0.0.1 ansible_ssh_port=2201
[web]
production1
staging1
vagrant1
[db]
production2
staging2
vagrant2
:
-
- [production]/[staging]/[vagrant] というグループを定義し、それらに含まれるホストを明示
-
- [web]/[db] のようなそのホストの機能ごとにもグループを定義
振る舞い型のインベントリパラメータは 一度指定すれば済む -> エイリアスの利用
可以用这样的方式写
// webとdb2つのグループを含んだwebdbというグループを定義
[webdb:children]
web
db
// ホストごとに変数を定義
// 定義した変数はplaybook中で利用可
[production]
production1 color=red
production2 color=blue
:
// グループごとに変数を定義
// 定義した変数はplaybook中で利用可
[production:vars]
db_name=hoge_production
db_user=hoge
[staging:vars]
db_name=hoge_staging
db_user=hoge
// 番号付きホストを簡潔に定義
[web]
web[1:20].example.com
// 0 つけておきたい場合
[web]
web[01:20].example.com
// アルファベットも使える
[web]
web-[a-t].example.com
可以将上述介绍的变量分配到文件中。
你只需要在playbook所在的目录或者存放Inventory文件的目录下创建以下目录,并且在其中放置变量配置文件就可以了。
-
- ホスト変数 : host_vars
グループ変数 : group_vars
可以简单地将其排除到文件中
db_name=hoge_production
db_user=hoge
:
可以使用YAML格式进行描述。
db:
name: hoge_production
user: hoge
:
动态库存
-
- Ansible の外部にホストを管理しているシステムがある場合、インベントリファイルに実行可能属性を付与しておくことで、そのファイルを動的インベントリとみなし実行する
daynamic.py のようなスクリプト
需要动态库存脚本支持以下两个命令行标志。
–host : ホストの詳細を返す
–list : グループのリストを返す
如果有多个库存文件的情况下
如果需要同时拥有静态库存文件和动态库存文件,可以通过以下方式来进行组合使用。
-
- 静的なインベントリファイル : /inventory/hosts
このとき静的なインベントリファイルに .ini 拡張子は使用できない(無視されちゃう)
動的インベントリファイル : /inventory/dynamic.py
[defaults]
inventory = inventory
只需明确包含库存文件的目录,即可处理所有库存文件并合并结果以形成库存。
在运行时添加条目
以下的模块可用于在播放书执行时添加条目
添加主机
- インベントリにホストを追加
分组
- playbook の実行中にグループを作成
1. 由环境变量 ANSIBLE_CONFIG 指定的位置
2. 当前目录
3. 用户的主目录
4. /etc/ansible/ansible.cfg