首次使用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 の実行中にグループを作成
ansible.cfg 文件的位置将按以下顺序进行搜索:
1. 由环境变量 ANSIBLE_CONFIG 指定的位置
2. 当前目录
3. 用户的主目录
4. /etc/ansible/ansible.cfg
广告
将在 10 秒后关闭
bannerAds