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