文章目录
- 1、在受管节点上创建文件或目录
- 2、使用jinja2模板部署自定义文件
1、在受管节点上创建文件或目录
修改文件并将其复制到主机
常用文件模块
blockinfile #将文本块添加到现有文件
copy #将文件复制到受管主机
fetch #从受管主机拷贝文件到控制节点
file #设置文件属性
lineinfile #确保特定行位于某个文件
stat #检索文件状态信息
synchronize #rsync命令的一个打包程序
file模块处理文件,如果不存在就新建
---
- name: Test
hosts: webservers
tasks:
- name: Touch a file
file:
path: /root/file
owner: student
group: student
mode: 0640
state: touch
运行结果
修改文件属性
---
- name: Test
hosts: webservers
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: Test
hosts: webservers
tasks:
- name: Touch a file
file:
path: /root/file
owner: student
group: student
mode: 0640
state: touch
- name: Always set SElinux
sefcontext:
target: /root/file
setype: samba_share_t
state: present
在受管主机上复制和编辑文件
blockinfile
copy
fetch
lineinfile
从受管主机中删除文件
- name: Delete file
file:
dest: /root/file
state: absent #absent即删除
检测受管主机上的文件状态
检测文件的MD5校验和
- name: Verify the status
stat:
path: /root/file
checksum_algorithm: md5
register: result
- debug:
msg: "The checksum is {{ result.stat.checksum }}"
同步控制节点和受管主机之间的文件
- name: sync text
synchronize:
src: file
dest: /root/file
2、使用jinja2模板部署自定义文件
构建出模板可以更方便的管理文件
{% EXPR %} #表达式或者逻辑
{{ EXPR }} #最终向用户输出表达式或结果
{# COMMENT #} #注释
构建jinja2模板
jinja2模板由多个元素组成:数据、变量、表达式
模板中使用的变量可以在playbook的vars中指定
模板中所有的值都使用变量方式,将来会被受管主机对应的值替代
如:/etc/ssh/sshd_config文件
Port 22 ==> Port {{ ssh_port }}
PermitRootLogin yes ==> {{ root_allowed }}
部署jinja2模板
tasks:
- name: templete
templete:
src: /root/sshd_templete.j2
dest: /etc/ssh/sshd_config
控制结构
1)使用循环
jinja2使用for语句提供循环
{% for user in users %}
{{ user }} #user变量将遍历users
{% endfor %}
{% for myhost in groups['myhosts'] %} #列出myhosts组中所有主机
{{ myhosts }}
{% endfor %}
2)使用条件句
{% if condition %} #只有此条件为真,才会将result变量的值放入文件
{{ result }}
{% endif %}
jinja2的循环和条件只能在模板中使用,不能在playbook中使用
变量过滤器
{{ output | to_json }} #以json格式输出
{{ output | to_yaml }}
{{ output | from_json }} #对json格式字符串进行解析
{{ output | from_yaml }}
练习:
总结:
1.file模块库包含创建、复制、编辑、修改等权限和其他属性
2.使用jinja2模板动态构建文件来部署
3.jinja2模板由两个元素构成:变量和表达式,在使用jinja2模板时,他们被替换为值
4.通过jinja2过滤器,模板表达式可以从一种数据格式转换为另一种