2015-07-13 125 views
1

我试图处理在Ansible剧本以下情况:记录与在Ansible剧本用户名/密码(获取从API)

  1. 通过云提供商的API创建服务器
  2. 来自API的响应存储根凭据(用户名/密码)
  3. 使用root凭据登录,并将SSH密钥
  4. 设置新用户,禁用root登录,等

我可以在步骤4中使用authorized_keyuser模块。我有一个用于步骤1和步骤2的模块(自建)。如何处理步骤3?是否有以编程方式用用户名/密码登录的现有解决方案?我不想通过命令行给他们。

基本上我也可以为此构建一个模块。理想情况下,我想类似的东西:

 
- task: setup SSH 
    place_ssh_with_passwd: 
    state: present 
    key: /path/to/local/key 
    path: /root/.ssh/authorized_keys 
    user: "{{ server.username }}" 
    password: "{{ server.password }}" 
+0

如果一切都失败了,你总是可以简单地运行一个本地任务并用你的凭据手动连接到主机。像这样:' - shell:sshpass -p'password'scp/path/to/local/key [email protected]:/root/.ssh/authorized_keys'。 – udondan

回答

0

使用add_host行动,将主机添加到一个新组和ansible_ssh_host设置,ansible_ssh_user和ansible_ssh_pass与神社模板关闭从云提供商的回应(见例docs)。然后开始一个新的游戏,以新组为目标进行键位置设置,以及针对新主机的其他任何设置任务。

0

我发现服务器创建之后做到这一点在同一个游戏的一种方法:

 
- name: create server 
    ...use module, create server and grap password from output... 

- name: add SSH key to server 
    shell: "./scp_ssh_key.sh /path/to/key [email protected]:/path/ {{ passwd }} 

凡shell脚本将沿着线的东西: https://gist.github.com/elnygren/965a6db4f3fd8e242e90

这一个可以使用Ansible的后内置模块来设置用户,其他密钥等。