内容介绍

一、ansible ad-hoc模式.

二、主机名设置

三、 一些ad-hoc模式的案例

四、ansible playbook模式

五、ansible playbook核心概念

六、重要配置项目

七、ansible playbook案例

八、小结

一、ansible ad-hoc模式.

  • ansible <主机名> <command>
  • 主机名可以有多种模式,如特定主机、特定组主机、所有主机
  • command支持执行命令、调用模块

二、主机名设置

ad-hoc支持多种不同的主机名模式

  1. all或 * ︰表示所有主机均执行
  2. one.example.com 或192.150.1.1︰表示特定的主机需要执行3. one.example.com:two.example.com︰表示多个主机需要执行
  3. prod: 表示组名需要执行

三、一些ad-hoc模式的案例

  • ansible prod -m shell -a 'echo $TER'`:在prod主机上使用shell 模块调用`echo $TERN`命令
  • ansible prod -m copy -a "src=/etc/hosts dest=/tmp/hosts"︰将本地主机的 hosts文件通过copy命令传递到prod主机上
  • ansible prod -m yum -a "name=acme state=present":在prod主机上安装软件

四、ansible playbook模式

  • playbook是ansible最强大的模式,可以将复杂任务通过一系列简单描述梳理清楚。
  • playbook可以使用源码进行管理,从而更好的管理服务配置

五、ansible playbook核心概念

  • Playbook: Playbook可以视为一个独立的项目,每个 Playbook可以实现不同的命令和需求。比如,根据不同的环境区分、根据不同的业务区分。
  • Play: Playbook中区分不同的Play,可以通过区分Play,可以划分不同的任务。如,在配置主机过程中,就可以分为主机标准化、安全配置、软件安装、部署环境配置等。
  • Task:每一个play包含了一个task列表〈(任务列表)。一个task在其所对应的所有主机上执行完毕之后,下一个task才会执行。
  • Modules:每一个Task都会使用一个特定的Modules 来执行命令,Modules往往和特定的功能进行挂钩,如`yum`主要负责yum 软件管理。`file`主要负责文件管理。
  • Handlers:被触发后执行特定的命令,是Task 的一种表现形式。

六、重要配置项目

  • ask_pass or ask_sudo_pass︰是否请求用户密码或请求sudo密码`inventory `:配置Inventory文件路径
  • `log_path`:日志文件路径
  • 'module_name : ad-hoc模式下使用的默认模块
  • .hosts `: playbook模式下的默认主机,默认值为`*`,即所有主机.
  • 'remote_port:远程主机的默认端口,默认值为22
  • 'remote_user`:远程主机的默认用户,默认值为当前用户

七、ansible playbook案例

[root@ansible PlayBook]# cat testtmp.yml
#模板示例
---
- hosts: all
remote_user: root
vars:
- listen_port: 88 #定义变量
tasks:
- name: Install Httpd
yum: name=httpd state=installed
- name: Config Httpd
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf #使用模板
notify: Restart Httpd
- name: Start Httpd
service: name=httpd state=started

handlers:
- name: Restart Httpd
service: name=httpd state=restarted
- hosts: webserversvars :
http_port: 80max_clients: 28eremote_user: roottasks:
- name: ensure apache is at the latest versionyum: pkg=httpd state=latest
-name: write the apache config file
template: src=/ srv/httpd.j2 dest=/etc/httpd.confnotify:
- restart apache
- name: ensure apache is runningservice: name=httpd state=startedhandlers:
- nane: rdstart apache
service: name=httpd state=restarted
for more information.ok :[47.104.85.246]
TASK[test server can run] **************************************
ok :[47.104.85.246]
TASK[upgrade all packages]·**********************************
fatal: [47.104.85.246]:FAILED! =>{"ansible_facts": ["pkg_mgr" : "homebrew""}), " changed: false,"msg" : [ "could not detect which majord revnallv specifv use_backend to tell the module whether to use the yum (yum3) or dnf Cyum4) backend})""J3
PLAYRECAP*******************************************
47.104.85.246
: ok-2changed-。
unreachable=0failed-1skipped=
source-codessh root@47.104.85.246
roote47.104.85.246"s password: t

八、小结:

  • Playbook与ad-hoc相比,是一种完全不同的运用ansible的方式,类似与saltstack的state状态文件。
  • ad-hoc无法持久使用,playbook可以持久使用。
  • playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务