Ansible速查表(执行方面)

只要在谷歌中搜索,就可以找到各种使用Playbook的样本,但是对于执行方法之类的整理好像没有统一的感觉。

用中文将以下内容进行转述:Ansible的设置

让我们阅读文档。如果是Ubuntu系的话,有PPA可用。
http://docs.ansible.com/intro_installation.html

库存

简单的例子。

de .)

192.168.0.1
192.168.0.2:12345

可以将其放在/etc/ansible/hosts中,或者通过-i(–inventory)选项或ANSIBLE_HOSTS环境变量指定路径。

请注意,如果Inventory文件具有可执行权限(+x),则会被误认为是DynamicInventory,导致无法执行!!我遇到了一个类似的错误,当我挂载Windows共享文件夹时,所有文件都具有+x权限。

这个太麻烦了。

如果用逗号分隔,似乎可以直接指定参数。如果用逗号分隔,所以当只想指定一个时,也需要在开头或末尾加上逗号。

如何在不指定清单文件的情况下直接指定主机来运行Ansible? 可以在这个链接中查看如何实现:https://github.com/ansible/ansible/blob/release1.6.2/lib/ansible/inventory/__init__.py#L70

主机模式

在ansible的命令或playbook的hosts:部分中,指定的是称为host-pattern的内容,它是用于筛选目标主机的模式字符串。因此,即使是IP地址,如果在Inventory文件中没有相应的记录,也会报错。

执行

# モジュールの実行
# 適当にsshコマンドを走らせて、known_hostsに入れておく
# 公開鍵認証とかでパスワード不要なら-k(--ask-pass)はいらない
ansible -k -m apt -a "pkg=vim state=present"

# Playbookの実行
# オプションはansibleコマンドとだいたい同じ
ansible-playbook -k main.yml

其他选项

我想在Playbook中使用sudo。

在《ansible-playbook简介》的中间部分,除了在playbook中写上sudo:yes,还可以使用-s(–sudo)选项进行指定。
如果没有设置NOPASSWD,那么可以使用-K(–ask-sudo-pass)。

我想要进行测试。

– 有一个-C(–check)选项。可以在ansible和ansible-playbook中使用。
但是只是继续执行而不执行任何更改。

apt: update_cache=trueとかするとローカルキャッシュが更新されます
(aptモジュールのchange処理ってパッケージの追加・削除なので)
前のタスクに依存してるとこけたりします。例えば

tasks:
  - name: インストールしておく
    apt: pkg=hoge state=present
  - name: 上でインストールされたファイルをごにょごにょ
    lineinfile: path=/etc/hoge/foo.cfg ... # ファイルがない!

本地执行

可以通过connection选项指定连接方法,但如果在这里指定为local,则可以在不使用ssh的情况下执行。

该选项不会改变连接方式。因此,需要使用Inventory,并且可以在本地执行,而不仅仅是在localhost上执行。如果有多个符合条件的主机,则会在本地多次执行。

此外,尽管用户手册中没有提到,但在当前版本(1.6.2)中,似乎可以将localhost和127.0.0.1用作host-pattern,即使在库存中没有相应的记录。在这种情况下,将自动指定–connection local参数。

然而,如果Inventory中有localhost或者127.0.0.1的记录,则会优先使用那个。在这种情况下,自动local不起作用,需要在Inventory中写入ansible_connection=local或使用–connection选项。

# local実行. localhostはInventoryにあってもなくても指定できる.
ansible localhost -c local

# Inventoryにlocalhostが"なければ"local実行
# Inventoryに記述があればそれが使われる
ansible localhost

# localhost/127.0.0.1なら空のファイルを指定してもok
# それ以外のhost-patternだと"No hosts matched"
ansible localhost [-c local] -i /dev/null

# -c localを指定した場合、ホストに関わらずローカルで実行される
ansible all -c local -i example.com,

如果想要以这种方式执行 playbook…

    • いつもlocalで実行したい

playbookにhosts: localhostと記述する
Inventoryは適当に1ホスト分用意すればいいですが、localhostを書いてしまうと自動local働かないので注意。心配ならplaybookにconnection: localも書いておきましょう。

時々localで実行したい

グループを使わずhosts: allと書いているなら、実行時に-c local -i hoge,を付ける(hogeの部分は適当なホスト名)
でなければ、グループごとにlocalhost ansible_connection=localが書かれただけのinventoryファイルを用意

创建库存文件的方法似乎非常通用和方便。

与ansible命令不同,即使指定了hosts: localhost,也必须指定Inventory。

ansible-playbook -c local -i /dev/null
# ERROR: provided hosts list is empty

ansible-playbook -c local -i ,
# ERROR: provided hosts list is empty
广告
将在 10 秒后关闭
bannerAds