文章目录

  • 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

ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test


ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_02


ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_03


ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_04


运行结果

ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_05


修改文件属性

--- 
- 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

ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_06


ansible playbook 替换文本内容操作模块 ansible修改文件内容_创建文件_07


ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_08

运行结果

ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_09


仅为临时修改

ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_10


ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_11


永久更改

--- 
- 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

ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_12


ansible playbook 替换文本内容操作模块 ansible修改文件内容_创建文件_13

ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_14


ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_15


在受管主机上复制和编辑文件

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 }}"

ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_16


ansible playbook 替换文本内容操作模块 ansible修改文件内容_创建文件_17


ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_18


同步控制节点和受管主机之间的文件

- 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 }}

练习:

ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_19


ansible playbook 替换文本内容操作模块 ansible修改文件内容_创建文件_20


ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_21


ansible playbook 替换文本内容操作模块 ansible修改文件内容_Test_22


ansible playbook 替换文本内容操作模块 ansible修改文件内容_创建文件_23


ansible playbook 替换文本内容操作模块 ansible修改文件内容_json格式_24


总结:

1.file模块库包含创建、复制、编辑、修改等权限和其他属性

2.使用jinja2模板动态构建文件来部署

3.jinja2模板由两个元素构成:变量和表达式,在使用jinja2模板时,他们被替换为值

4.通过jinja2过滤器,模板表达式可以从一种数据格式转换为另一种