Code Monkey home page Code Monkey logo

ansible-playbooks's Introduction

Ansible playbooks

预置条件

localhost 与 server 的 ssh 免密码访问

在远程服务器上添加了 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

localhost 与 github.com 的 ssh 免密码访问

配置方法见 GitHub 官方的帮助文档.

测试:

$ ssh -T [email protected]
Hi JackonYang! You've successfully authenticated, but GitHub does not provide shell access.

playbook 功能清单

ubuntu-14.yml

$ ansible-playbook ubuntu-14.yml --ask-vault-pass --ask-sudo-pass
SUDO password:
Vault password:

阿里云环境

ubuntu 开发环境搭建,安装常用工具

proj_blog.yml

$ ansible-playbook proj_blog.yml

altaye.yml

altaye.org 部署脚本. 一个 html 的静态页面网站

gpu.yml

GPU 服务器的环境部署

tips

执行 playbook 的命令

有一些 playbook,既需要 vault 密码,又需要 sudo 权限

$ ansible-playbook gpu.yml --ask-vault-pass --ask-sudo-pass
SUDO password:
Vault password:

ansible vault

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

sudo 权限

在 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

强制执行 handler

由于 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

Servers are cattle

ansible-playbooks's People

Contributors

jackonyang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.