1.对受管主机文件的常见管理方式
常用文件模块
模块 | 作用 |
---|---|
blockinfile | 将文本块添加到现有文件 |
copy | 将文件复制到受管主机 |
fetch | 从受管主机拷贝文件到控制节点 |
file | 设置文件属性 |
lineinfile | 确保特定行位于某个文件 |
stat | 检索文件状态信息 |
synchronize | rsync 命令的一个打包程序 |
file | 对文件进行处理:模块库包含创建、复制、编辑、修改等权限和其他属性,不存在则新建 |
示例:
①:在受管主机创建文件
---
- name: Test
hosts: rhel8_no1.test.com
tasks:
- name: Touch a file
file:
path: /mnt/file ##路径
owner: student
group: student
mode: 0640 #权限
state: touch
- name: Set SElinux
file:
path: /mnt/file
setype: samba_share_t #安全上下文
- name: always set selinux
sefcontext:
target : /mnt/file ##永久修改文件的安全上下文
setype: samba_share_t
state: present
②:删除文件
- name: delete file
file:
dest: /mnt/file
state: absent ##删除
③:检测文件的 MD5 校验和
- name: Verify the status
stat:
path: /mnt/file
checksum_algorithm: md5
register: result
- debug:
msg: "The checksum is {{ result.stat.checksum }}"
④:同步控制节点和受管主机之间的文件
- name: synchronize file
synchronize:
src: file
dest: /mnt/file
2.使用 jinja2 模板部署自定义文件
作用: 使用 jinja2 模板动态构建文件,可以更方便的管理文件
写法:
- {% EXPR %} #表达式或者逻辑
- {{ EXPR }} #最终向用户输出表达式或结果
- {# COMMENT #} #注释
构建 jinja2 模板:
jinja2 模板由多个元素组成:数据、变量、表达式
模板中使用的变量可以在 playbook 的 vars 中指定 ,模板中所有的值都使用变量方式,将来会被受管主机对应的值替代
部署 jinja2 模板:
tasks:
- name: template
template:
src: /root/j2-template.j2
dest: /root/dest-config-file.txt
jinjia2 的控制结构
jinja2 的循环和条件只能在模板中使用,不能在 playbook 中使用
使用循环:
#写法一:
{% for user in users %}
{{ user }} #user 变量将遍历 users
{% endfor %}
#写法二:
{% for myhost in groups['myhosts'] %} #列出 myhosts 组中所有主机
{{ myhosts }}
{% endfor %}
使用条件句 :
{% if finished %} #只有此条件为真,才会将 result 变量的值放入文件
{{ result }}
{% endif %}
变量过滤器:
{{ output | to_json }} #以 json 格式输出
{{ output | to_yaml }} #以yml格式输出
{{ output | from_json }} #对 json 格式字符串进行解析
{{ output | from_yaml }} #对 yml 格式字符串进行解析
3. jinjia2 的练习
①:vim motd.j2
构建jinjia2模板
This is the system {{ ansible_facts['fqdn'] }}
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.
System owner is {{ system_owner }}.
②:vim motd.yml
编写playbook, 部署jinjia2模板
---
- name: configure SOE
hosts: rhel8_no1.test.com
remote_user: student
become: true
vars:
- system_owner: wsp439@sina.com
tasks:
- name: configure /etc/motd
template:
src: motd.j2 ##模板文件
dest: /etc/motd ##受管主机上的目标文件
owner: root
group: root
mode: 0644
③:运行playbook,并验证受管主机上的文件是否得到修改