Ansible的playbook执行的超基本,请做备忘录
因为自己并不是很清楚,所以尝试整理了一下。
1. 目录结构 (mù lù jié
以下是本次执行所需的目录结构。
/root/
└ ansible
├─ hosts ・・・inventoryファイル
└─ tasks ・・・playbook格納場所
└─ test1.yml ・・・playbook
2. 创建库存文件
我现在拥有的环境有以下3台机器:
brighton001 作为Ansible服务器
brighton002 作为1号测试机
brighton003 作为2号测试机
这将被记录在inventory文件中。这次就这样吧。
在inventory中,您需要记录想要执行ansible的主机名(如果能够解析名称)或IP地址。
通过使用[]可以进行分组。
[centos7]
brighton002
brighton003
[web]
brighton002
[db]
brighton003
3. 制定playbook
创建一个用于创建用户的playbook。
---
- hosts: db ・・・ 今回inventoryのdbグループにだけ実施
sudo: yes ・・・ 管理者権限で実行するには必要となる
tasks: ・・・ playbookで実行する内容を記述
- name: add a new user ・・・ タスク名を記述(省略可)
user: name=koba ・・・ ユーザー追加のモジュール
进行playbook
1. 语法检查
我将检查创建的playbook的语法是否正确。
# ansible-playbook -i hosts ./task/test1.yml –syntax-check
※ 在 -i 后面指定了 inventory 文件,在这里只需指定文件名,因为我是在 /root/ansible 目录下执行。如果在其他目录下执行,需要指定正确的路径。
执行后确认。以下内容表示语法没有问题。
# ansible-playbook -i hosts ./task/test1.yml --syntax-check
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
playbook: ./task/test1.yml
如果有语法错误的例子
在“添加新用户”的名字中出现错误。
# ansible-playbook -i hosts ./task/test1.yml --syntax-check
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
The error appears to have been in '/root/ansible/task/test1.yml': line 5, column 6, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- name: add a new user
^ here
The error appears to have been in '/root/ansible/task/test1.yml': line 5, column 6, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- name: add a new user
^ here
exception type: <class 'ansible.errors.AnsibleParserError'>
exception: no action detected in task. This often indicates a misspelled module name, or incorrect module path.
The error appears to have been in '/root/ansible/task/test1.yml': line 5, column 6, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- name: add a new user
^ here
2. 确认执行的任务
查看在playbook中执行的任务。
请给出一个选项,将以下内容使用中文进行同义替换:
“`
# ansible-playbook -i hosts ./task/test1.yml –list-task
“`
执行结果如下:
对于hosts组,可以看到在db上执行了添加新用户的任务。
# ansible-playbook -i hosts ./task/test1.yml --list-task
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
playbook: ./task/test1.yml
play #1 (db): db TAGS: []
tasks:
add a new user TAGS: []
3. 验证DryRun
只是确认实际运行playbook后会发生什么结果。
然而,在这个阶段,playbook本身并没有被执行。
※没有创建用户。
使用ansible-playbook命令,在主机hosts上执行./task/test1.yml的任务,并使用–check参数进行检查。
运行结果如下。
# ansible-playbook -i hosts ./task/test1.yml --check
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [db] **********************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [brighton003]
TASK [add a new user] **********************************************************************************************
changed: [brighton003]
PLAY RECAP *********************************************************************************************************
brighton003 : ok=2 changed=1 unreachable=0 failed=0
进行操作
现在开始执行playbook。
# 在hosts文件中执行ansible-playbook ./task/test1.yml
# ansible-playbook -i hosts ./task/test1.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [db] **********************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [brighton003]
TASK [add a new user] **********************************************************************************************
changed: [brighton003]
PLAY RECAP *********************************************************************************************************
brighton003 : ok=2 changed=1 unreachable=0 failed=0
当在测试机上查看日志时,可以确认已经执行过。
# journalctl -f
Jan 05 13:18:52 brighton003 sudo[2105]: root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/bin/sh -c echo BECOM E-SUCCESS-qzcumjqjthhmauydpqfypweqzsumeeiz; /usr/bin/python /root/.ansible/tmp/ansible-tmp-1515125931.99-143434399830059/setup.py; rm -rf "/root/.ansible/tmp/ansible-tmp-1515125931.99-143434399830059/" > /dev/null 2>&1
Jan 05 13:18:52 brighton003 python[2108]: ansible-setup Invoked with filter=* gather_subset=['all'] fact_path=/etc/a nsible/facts.d gather_timeout=10
Jan 05 13:18:53 brighton003 sudo[2182]: root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/bin/sh -c echo BECOM E-SUCCESS-ewcttorkprjeohkfeodjjqmiulokhkxv; /usr/bin/python /root/.ansible/tmp/ansible-tmp-1515125932.86-170288683869108/user.py; rm -rf "/root/.ansible/tmp/ansible-tmp-1515125932.86-170288683869108/" > /dev/null 2>&1
Jan 05 13:18:53 brighton003 python[2185]: ansible-user Invoked with comment=None ssh_key_bits=0 update_password=always non_unique=False force=False ssh_key_type=rsa ssh_key_passphrase=NOT_LOGGING_PARAMETER uid=None home=None append=False skeleton=None ssh_key_comment=ansible-generated on brighton003 group=None system=False state=present local=None shell=None expires=None ssh_key_file=None groups=None move_home=False password=NOT_LOGGING_PARAMETER seuser=None name=koba createhome=True remove=False login_class=None generate_ssh_key=None
Jan 05 13:18:53 brighton003 useradd[2192]: new group: name=koba, GID=1000
Jan 05 13:18:53 brighton003 useradd[2192]: new user: name=koba, UID=1000, GID=1000, home=/home/koba, shell=/bin/bash
我会在/etc/passwd中进行确认。
# grep koba /etc/passwd
koba:x:1000:1000::/home/koba:/bin/bash
5. 核实幂等性
如果再次执行,则确认用户已经被创建,不会进行任何操作。
# ansible-playbook -i hosts ./task/test1.yml
[DEPRECATION WARNING]: Instead of sudo/sudo_user, use become/become_user and make sure become_method is 'sudo'
(default). This feature will be removed in version 2.6. Deprecation warnings can be disabled by setting
deprecation_warnings=False in ansible.cfg.
PLAY [db] **********************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************
ok: [brighton003]
TASK [add a new user] **********************************************************************************************
ok: [brighton003]
PLAY RECAP *********************************************************************************************************
brighton003 : ok=2 changed=0 unreachable=0 failed=0
当”changed”等于0时,我们可以得出没有任何改变的结论。
我开始逐渐理解了。
首先理解基本概念是很重要的。