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时,我们可以得出没有任何改变的结论。

我开始逐渐理解了。
首先理解基本概念是很重要的。

广告
将在 10 秒后关闭
bannerAds