在远程服务器上添加了 ssh 公钥,可以无密码访问服务器。
命令:
$ cat .ssh/jackon-2017.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
$ ssh-add .ssh/jackon-2017
测试:
$ ansible jackon.me -m ping
jackon.me | SUCCESS => {
"changed": false,
"ping": "pong"
}
或者
$ ansible-playbook whomai.yml
PLAY [show return value of command module] *********************************************************************************************************************
TASK [Gathering Facts] *****************************************************************************************************************************************
ok: [jackon.me]
ok: [gpu-01]
ok: [proxy-hk-01]
TASK [capture output of id command] ****************************************************************************************************************************
changed: [gpu-01]
changed: [jackon.me]
changed: [proxy-hk-01]
TASK [debug] ***************************************************************************************************************************************************
ok: [gpu-01] => {
"changed": false,
"msg": "Logged in as user jackon"
}
ok: [proxy-hk-01] => {
"changed": false,
"msg": "Logged in as user root"
}
ok: [jackon.me] => {
"changed": false,
"msg": "Logged in as user root"
}
PLAY RECAP *****************************************************************************************************************************************************
gpu-01 : ok=3 changed=1 unreachable=0 failed=0
jackon.me : ok=3 changed=1 unreachable=0 failed=0
proxy-hk-01 : ok=3 changed=1 unreachable=0 failed=0
配置方法见 GitHub 官方的帮助文档.
测试:
$ ssh -T [email protected]
Hi JackonYang! You've successfully authenticated, but GitHub does not provide shell access.
$ ansible-playbook ubuntu-14.yml --ask-vault-pass --ask-sudo-pass
SUDO password:
Vault password:
阿里云环境
ubuntu 开发环境搭建,安装常用工具
$ ansible-playbook proj_blog.yml
altaye.org 部署脚本. 一个 html 的静态页面网站
GPU 服务器的环境部署
有一些 playbook,既需要 vault 密码,又需要 sudo 权限
$ ansible-playbook gpu.yml --ask-vault-pass --ask-sudo-pass
SUDO password:
Vault password:
ansible-vault 可以加密敏感信息。
执行含加密文件的 playbook 时,需要加 --ask-vault-pass
参数,
否则报错
ERROR! Decryption failed on /path/to/ansible-playbooks/vars/secrets-ss.yml
用法例子:
$ ansible-playbook ubuntu-14.yml --ask-vault-pass
在 playbook 中,增加 sudo: True
注意: sudo 会改变 ansible_env.HOME
等变量的取值
$ ansible-playbook gpu.yml --ask-sudo-pass
否则报错:
TASK [update the apt cache] ****************************************************
fatal: [gpu-01]: FAILED! => {"changed": false, "failed": true, "module_stderr": "Connection to gpu.xxxx.net closed.\r\n", "module_stdout": "sudo: a password is required\r\n", "msg": "MODULE FAILURE"}
to retry, use: --limit @/Users/jackon/ansible-playbooks/gpu.retry
由于 ansible 本身机制的特点: 所有 task 都成功后,再执行 handler.
task A 执行成功, 但后续但 task B 执行失败, handler 未执行。 修复 task B 的 bug 后重新执行,task A 的状态是 OK 而不是 changed,也不会触发 handler。
在 debug 期间,或者服务器某些配置变更时,很常见的问题。
根据 GitHub 上的 issue: [ansible/ansible#4777]
ansible 提供了 --force-handlers
解决这个问题,
但实测一直不生效。
鉴于,handler 主要是重启服务的操作。 所以,我采用下面的方法:
$ ansible linode -a 'service nginx restart'
linode-01 | SUCCESS | rc=0 >>
* Restarting nginx nginx
...done.
Pets vs. Cattle: the Elastic Cloud Story
提出: Servers are cattle。 例如,linode 组与 linode 上的服务器 linode-01