Ansible
1.playbook的概念:
临时命令可以作为一次性对一组主机运行简单的任务。不过,若要真正发挥Ansible的力量,需要使用playbook
playbook:
- playbook是ansible用于配置,部署,和管理被节点的剧本
- playbook是一个文本文件,playbook可以轻松重复的方式对一组主机执行多项复杂的任务。
- playbook包含有一个或者多个按特定顺序运行的play组成的列表
- play是针对对清单中选定的主机运行一组有序任务
yaml 标记语言
yaml 标记语言是一个可读性高的用来表达资料序列的格式
YAML 语言特性
- YAML的可读性好
- YAML和脚本语言的交互性好
- YAML使用实现语言的数据类型
- YAML有一个一致的信息模型
- YAML易于实现
- YAML可以基于流来处理
- YAML表达能力强,扩展性好
YAML的三种数据结构
数据结构 说明 对象 键值对的集合,又称为映射、哈希、字典 数组 一组按次序排列的值,又称为序列/列表 纯量 单个的、不可再分的值 1
2
3
4
5
6
7
8
9
10# 对象:
key:
key1: vaule1
key2: vaule2
key: {key1: value1,key2: value2}
# 数组:
key:
- value1
- value2
key:[value1,value2]
2.playbook的使用场景:
- 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题
- 需要大量的操作的时候,执行的ad-hoc命令是不合适的,这时候最好使用playbook
3.playbook的属性:
| 属性 | 必选 | 说明 |
|---|---|---|
| name | no | 剧本的说明信息 |
| hosts | 主机组 | |
| remote_user | no | 远程用户 |
| t asks | 任务列表 | |
| Tasks属性 | 必选 | 说明 |
|---|---|---|
| name | no | 任务的名字,本任务的说明 |
| [模块] | 表示本任务使用的模块 |
4.playbook的格式:
YAML的格式如下:
文件的第一行应该以“—”(三个连字符)开始,表明YAML文件的开始。
#之后的内容表示注释
YAML中的列表元素以“-”开头并且跟着一个空格
修改/etc/.vimrc文件,使用所有用户的yaml文件缩进变为2字符
1
autocmd FileType yaml setlocal ai ts=2 sw=2 et
示例一:创建uid为3333,shell为不可登录,名字为user1的剧本
1
vim user.yml
1
2
3
4
5
6
7
8
9
10
11
- name: create user
remote_user: root
hosts: webservers
tasks:
- name: create user1
user:
name: user1
uid: 3333
shell: /sbin/nologin
state: present示例二:创建redhat.repo的yum源,并安装redis数据库,开机自启启动服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19- name: yum install
hosts: webservers
remote_user: root
tasks:
- name: wget centos....repo
get_url:
url: https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
dest: /etc/yum.repos.d/Centos-8.5.repo
- name: yum repolist
shell: yum repolist
- name: install redis
yum:
name: redis
state: present
- name: systemctl redis
service:
name: reids
state: restarted
enabled: yes
5.Playbook的运行方式:
语法:
1
ansible-playbook <filename.yml> ... [options]
参数类型:
参数 说明 –check or -C 只检测可能会发生的改变,但不真正执行操作 –list-hosts 列出运行任务的主机 –list-tags 列出playbook文件中定义所有的tags –list-tasks 列出playbook文件中定义的所以任务集 –limit 主机列表 只针对主机列表中的某个主机或者某个组执行 -f 指定并发数,默认为5个 -t 指定tags运行,运行某一个或者多个tags。(前提playbook中有定义tags) -v 显示任务结果 -vv 显示任务结果和配置 -vvv 显示任务结果和配置,受管主机连接信息 -vvvv 更详细
6.playbook变量
- 变量名称必须是以字母开头,并且只能含有字母、数字和下划线
- 变量优先级:(高–低)
全局范围:从命令行或ansible配置设置的变量
play范围:在play和相关结构中设置的变量
主机范围:由清单、事实收集或注册的任务,在主机和个别主机上设置的变量
1.自定义变量的定义和引入:
命令行定义变量:
1
ansible-playbook -e 'pkname1=httpd pkname2=vsftpd' app.yml
1
2
3
4
5
6
7- hosts: all
- name: install package
yum:
name: "{{ pkname1 }}"
- name: install package
yum:
name: "{{ pkname2 }}"=playbook中定义变量 vars
1
2
3
4
5
6
7
8
9
10- hosts: all
vars: # 定义var
- pkname1: httpd
- pkname2: vsftpd
- name: install package
yum:
name: "{{ pkname1 }}"
- name: install package
yum:
name: "{{ pkname2 }}"playbook中导入变量文件vars_files
1
2
3
4vim var.yml
# 修改内容:
var1: httpd
var2: vsftpd1
2
3
4
5
6
7
8- hosts: all
vars_files: ./user_var.yml # 导入文件
- name: install package
yum:
name: "{{ pkname1 }}"
- name: install package
yum:
name: "{{ pkname2 }}"定义主机变量:(主机清单)group_vars/文件名,host_vars/文件名
1
2
3[web]
172.16.20.131 http_port=81
172.16.20.132 http_port=821
2
3
4
5
6[web:vars] ----主机组变量
nodename=www
domainname=openlab.com
[server1]
demo1.example.com
demo2.example.com1
2
3[servers:children] -----嵌套主机组变量
Server1
Server2使用数组作为变量
1
2
3
4
5
6
7
8vim user.yml
USERLIST:
lee:
age:18
obj:linux
westos:
age:20
obj:java1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 引入方式一
- name: test
hosts:test
vars_files:./user.yml
tasks:
- name: create user
debug:
msg: "{{USERLIST.lee.age}}"
# 引入方式二
- name: test
hosts:test
vars_files:./user.yml
tasks:
- name: create user
debug:
var:USERLIST['lee']['age']
2.系统变量的注册:
1 | - name:test |
3.事实变量
1 | - name: test |
7.ansible vault加密文件:
1.ansible vault概念:
- ansible可能需要访问密码或者API秘钥等敏感数据
- 通常,此信息可能以纯文本形式存储在清单变量或其他ansible文件中
- 任何有权访问ansible文件的用户或存储这些ansible文件的版本控制系统都能访问如此敏感数据。这显然存在安全风险。
- 作用: 可以加密和解密任何由ansible使用的结构化数据文件
- 范围:Ansible vault可以加密任何由ansible使用的结构化数据文件。
- 清单变量
- playbook中含有的变量文件
- 在执行playbook时作为参数传递的变量文件
- ansible角色中定义的变量
- ansible-vault并不实施自有的加密函数,而是使用外部python工具
2.ansible vault增删改查
创建加密文件
1
2
3
4
5
6[root@quruixiang ~]# ansible-vault create secrt.yml
New Vault password:
Confirm New Vault password:
编辑内容:
username: root
password: 123456查看加密文件:
1
2
3
4
5
6
7
8
9方式一:
[root@quruixiang ~]# ansible-vault view secrt.yml
Vault password:
username: root
password: 110119
方式二:文件指定(必须修改文件权限为600)
echo 110119 > user_passwd.txt
chmod 600 user_passwd.txt
ansible-vault view create_user.yml --vault-password-file=user_passwd.txt编辑加密文件:
1
2[root@quruixiang /]# ansible-vault edit secrt.yml
Vault password:重置密码:
1
2
3
4
5[root@quruixiang /]# ansible-vault rekey secrt.yml
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful加密已有文件:(加上密码)
1
ansible-vault encryt secrt.yml
对加密文件进行解密:(删除密码)
1
ansible-vault decrypt secrt.yml
3.在引用和执行:
1 |
|
1 | 方式一:咨询 |
8.jinjia2模板:
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
ValineDisqus