模块 | 作用 |
---|---|
blockinfile | 将文本块添加到现有文件 |
copy | 将文件复制到受管主机 |
fetch | 从受管主机拷贝文件到控制节点 |
file | 设置文件属性 |
lineinfile | 确保特定行位于某个文件 |
stat | 检索文件状态信息 |
synchronize | rsync 命令的一个打包程序 |
(1)在受管主机中新建文件,修改文件属性
---
- name: Test
hosts: web
tasks:
- name: Touch a file
file:
path: /root/file #指定文件路径
owner: student
group: student
mode: 0640 #指定文件权限
state: touch
...
在上述示playbook基础上修改文件属性: 使用setype: samba_share_t,设定selinux类型,此时为临时更改。
上述修改类型为临时修改,刷新selinux授权表后,设定消失。
永久更改文件属性:
---
- name: Test
hosts: web
tasks:
- name: Touch a file
file:
path: /root/file
owner: student
group: student
mode: 0640
state: touch
- name: Set SElinux
file:
path: /root/file
setype: samba_share_t
- name: Set SELinux
sefcontext: #使用此模块永久更改
target: /root/file #指定目标文件
setype: samba_share_t #指定selinux类型
state: present
...
(2)在受管主机上复制和编辑文件:blockinfile copy fetch lineinfile
(3) 从受管主机中删除文件:
- name: Delete file
file:
dest: /root/file
state: absent #absent 即删除
(1)检测文件的 MD5 校验:(在上面代码的最后添加)
使用stat模块,使用模块参数checksum_algorithm: md5检测
(2)同步控制节点和受管主机之间的文件
- name: synchronize file
synchronize:
src: file
dest: /root/file
tasks:
- name: template
template: #
src: /root/j2-template.j2 #为了便于标识,一般以.j2结尾
dest: /root/dest-config-file.txt
(1)使用循环:inja2 使用 for 语句提供循环
###########第一种#########
{% for user in users %}
{{ user }} #user 变量将遍历 users
{% endfor %}
###########第二种###########
{% for myhost in groups['myhosts'] %} #列出 myhosts 组中所有主机
{{ myhosts }}
{% endfor %}
(2)使用条件句
{% if finished %} #只有此条件为真,才会将 result 变量的值放入文件
{{ result }}
{% endif %}
注意:jinja2 的循环和条件只能在模板中使用,不能在 playbook 中使用
变量过滤器:把输出结果改写为指定格式
{{ output | to_json }} #以 json 格式输出
{{ output | to_yaml }} #以 yaml 格式输出
{{ output | from_json }} #对 json 格式字符串进行解析
{{ output | from_yaml }} #对 yaml 格式字符串进行解析
(1)编写jinja2模板:vim motd.j2
(2)编写playbook:
---
- name: configure SOE
hosts: all
remote_user: student
become: true
vars:
- system_owner: [email protected]
tasks:
- name: configure /etc/motd
template:
src: motd.j2 #jinja2模板源文件路径
dest: /etc/motd #受管主机中的目的地文件
owner: root
group: root
mode: 0644
...