在Ansible

时间:2016-04-16 19:41:47

标签: ansible ansible-playbook ansible-2.x

我需要使用Ansible配置一个非常新鲜的Ubuntu服务器。一开始它只有root用户和生成的密码。我需要做的第一个操作是创建一个service用户,为其设置密码,可选地,上传我本地用户的密钥(这样我就可以在没有密码的情况下登录)并禁用root登录。然后我需要以service用户身份运行角色。如何在一个剧本中完成此操作(例如,单击ansible-playbook provision.yml而不是ansible-playbook init.yml && ansible-playbook apply_roles.yml)?问题是我需要在创建service之后将用户切换到某个位置然后(以及所有将来的登录)我需要以他身份登录。

将此主机的ansible_user配置为service并且仅覆盖一次(至root)以进行初始设置是一个好主意吗?任何最佳做法?

2 个答案:

答案 0 :(得分:1)

您可以在一个剧本中拥有多个剧本。为您希望以root身份运行的任务创建一个游戏,为另一个应作为服务运行的角色创建一个游戏:

- hosts: all
  remote_user: root
  tasks:
  # your tasks here

- hosts: all
  remote_user: service
  roles:
  - your_role

答案 1 :(得分:1)

如果内存服务,则Ubuntu实例以生成的root用户和本地用户with access to sudo开始:

我认为最干净的方法是首先通过bash脚本安装本地用户的密钥,通过:

ssh-copy-id <server>

(如果该命令可从运行ansible的命令行获得)

然后继续在bash脚本中的那一行之后运行你的Ansible脚本。

(虽然我认为也可以将本地用户的信用卡存储在ansible vault中..我还没有使用过保险库,所以我不太熟悉它。)

如上所述,我会在启动文件(如become_user)或库存中的ansible_user中指定服务用户。 (但根据this older issue,你可能会遇到问题。)

如果我使用启动文件来指定用户,那么该文件将具有一个角色(比如说web服务器),并且该角色将具有dependency(让我们说常见)。

在常见角色中,我将尝试使用服务用户(设置为ignore errors)尝试具有已知结果的命令。如果该任务未返回预期结果,则我将创建服务用户并将该服务用户的密钥复制到服务器。涉及的每个任务都需要将become_user覆盖到本地用户。

执行该角色依赖后,主要角色将跟随,所有剩余的任务应作为服务用户执行。