playbook- 介绍
playbooks是
一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
核心元素
Tasks:任务,由模板定义的操作列表
Variables:变量
Templates:模板,即使用模板语法的文件
Handlers:处理器 ,当某条件满足时,触发执行的操作
Roles:角色
hosts和users介绍
在playbook中的每一个play都可以选择在哪些服务器和以什么用户完成,hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。
---
- hosts: abc #指定主机组,可以是一个或多个组。
remote_user: root #指定远程主机执行的用户名
指定远程主机sudo切换用
# vim ping.yml
---
- hosts: abc
remote_user: root
become: yes #2.6版本以后的参数,之前是sudo,意思为切换用户运行
become_user: mysql #指定sudo用户为mysql
执行playbook
# ansible-playbook ping.yml -K
常用命令
ansible-playbook [yaml文件名、也可以yml结尾]
例如:ansible-playbook a.yml
参数:
-k(–ask-pass) 用来交互输入ssh密码
-K(-ask-become-pass) 用来交互输入sudo密码
-u 指定用户
# ansible-playbook a.yml --syntax-check #检查yaml文件的语法是否正确
# ansible-playbook a.yml --list-task #检查tasks任务
# ansible-playbook a.yml --list-hosts #检查生效的主机
# ansible-playbook a.yml --start-at-task='Copy Nginx.conf' #指定从某个task开始运行
authorized_key 模块的简单介绍
需要使用到的模块:authorized_key,为特定的用户账号添加或删除 SSH authorized keys
帮助文件查看
ansible-doc authorized_key
常用选项:
Options: (= is mandatory)(= 后面的参数是强制要有的)
– exclusive [default: no]: 是否移除 authorized_keys 文件中其它非指定 key
= key: SSH public key(s) 可以是字符串或 url,如:https://github.com/username.keys
– key_options [Default: None]: 附加到 key 中的字符串,该字符串会加到 key 的开头
– path [Default: (homedir)+/.ssh/authorized_keys]: 指定 authorized_keys文件存放的位置
– state (Choices: present, absent) [Default: present]: present 添加指定
key 到 authorized_keys 文件中;absent 从 authorized_keys 文件中移除指定 key
= user: 指定修改远端服务器上哪个用户的 authorized_keys
– manage_dir (Choices: yes, no) [Default: yes]: 指定模块是否应该管理 authorized
key 文件所在的目录。如果设置为 yes,模块会创建目录,以及设置一个已存在目录的拥有者和权限。如果通过 path 选项,重新指定了一个
authorized key 文件所在目录,那么应该将该选项设置为 no
示例
---
- hosts: web # 要替换密钥的主机
remote_user: user #普通用户,登陆的用户
become: yes # 2.6版本以后的参数,之前是sudo,意思为切换用户运行
become_method: sudo # 以什么方式提权su或者sudo
tasks:
- name: deliver authorized_keys # 事物名字
authorized_key: # authorized_key模块
user: xxxx # 要替换密钥的用户
key: "{{ lookup('file', '/root/.ssh/id_rsa.pub') }}" #本地存放目录的路径
state: present #没有则创建authorized_keys文件 state: (1) present 添加 (2) absent 删除
exclusive: yes #是否移除 authorized_keys 文件中其它非指定 key