Ansible用脚本管理主机

只有脚本才可以重用,避免总敲重复的代码。Ansible脚本的名字叫Playbook,使用的是YAML的格式,文件以yml结尾。

注解:YAML和JSON类似,是一种表示数据的格式。

执行脚本playbook的方法

  1. $ansible-palybook deploy.yml

playbook的例子

deploy.yml的功能为web主机部署apache, 其中包含以下部署步骤:

  1. 安装apache包;
  2. 拷贝配置文件httpd,并保证拷贝文件后,apache服务会被重启;
  3. 拷贝默认的网页文件index.html;
  4. 启动apache服务;

playbook deploy.yml包含下面几个关键字,每个关键字的含义:

  • hosts:为主机的IP,或者主机组名,或者关键字all
  • remote_user: 以哪个用户身份执行。
  • vars: 变量
  • tasks: playbook的核心,定义顺序执行的动作action。每个action调用一个ansbile module。

  • action 语法: module: module_parameter=module_value

  • 常用的module有yum、copy、template等,module在ansible的作用,相当于bash脚本中yum,copy这样的命令。下一节会介绍。

  • handers: 是playbook的event,默认不会执行,在action里触发才会执行。多次触发只执行一次。

  1. ---
  2. - hosts: web
  3. vars:
  4. http_port: 80
  5. max_clients: 200
  6. remote_user: root
  7. tasks:
  8. - name: ensure apache is at the latest version
  9. yum: pkg=httpd state=latest
  10. - name: Write the configuration file
  11. template: src=templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
  12. notify:
  13. - restart apache
  14. - name: Write the default index.html file
  15. template: src=templates/index.html.j2 dest=/var/www/html/index.html
  16. - name: ensure apache is running
  17. service: name=httpd state=started
  18. handlers:
  19. - name: restart apache
  20. service: name=httpd state=restarted

不懂yml,没关系,上面的deploy.yml格式转化为json格式为:

  1. [
  2. {
  3. "hosts": "web",
  4. "vars": {
  5. "http_port": 80,
  6. "max_clients": 200
  7. },
  8. "remote_user": "root",
  9. "tasks": [
  10. {
  11. "name": "ensure apache is at the latest version",
  12. "yum": "pkg=httpd state=latest"
  13. },
  14. {
  15. "name": "Write the configuration file",
  16. "template": "src=templates/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf",
  17. "notify": [
  18. "restart apache"
  19. ]
  20. },
  21. {
  22. "name": "Write the default index.html file",
  23. "template": "src=templates/index.html.j2 dest=/var/www/html/index.html"
  24. },
  25. {
  26. "name": "ensure apache is running",
  27. "service": "name=httpd state=started"
  28. }
  29. ],
  30. "handlers": [
  31. {
  32. "name": "restart apache",
  33. "service": "name=httpd state=restarted"
  34. }
  35. ]
  36. }
  37. ]

提供json和yml互转的在线网站: http:\/\/www.json2yaml.com\/