ansible-script模块和copy模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible-script模块和copy模块相关的知识,希望对你有一定的参考价值。

参考技术A script模块

将管理节点上的脚本传递到被管理节点执行
首先我们造一个脚本

copy模块

copy主要用于管理节点和被管理节点之间的文件拷贝
常用参数:
src 指定拷贝文件的源地址
dest 指定拷贝文件的目标地址
backup 拷贝文件前,若原目标文件发生了变化,则对目标文件进行备份
woner 指定新拷贝文件的所有者
group 指定新拷贝文件的所属组
mode 指定新拷贝文件的权限

backup实验,如果被管理节点上的文件发生了改变,添加backup=yes,可以在复制过去之前备份原文件,如果没有添加backup=yes,则会直接覆盖,不管节点上的文件是否改变

设置用户及用户组实验,你可以直接在复制文件的时候指定用户和属组

设置文件的权限

模块讲解----shutil模块(copy压缩解压)

作用与功能

主要用于文件的copy,压缩,解压

导入shuitl模块:

import shutil

 

 copy方法

 1 1、shutil.copyfileobj()  打开file1,并copy写入file2:
 2 with open("笔记1",r,encoding=utf-8) as f1,open(笔记2,w,encoding=utf-8) as f2:
 3     shutil.copyfileobj(f1,f2)
 4 
 5 
 6  
 7 #输入文件名就能直接拷贝(调用copyfileobj方法)
 8 shutil.copyfile("笔记1","笔记3")
 9 
10 
11 
12 #拷贝权限,内容,组,用户均不变:(win看不出来,linux下可以尝试)
13 shutil.copymode("笔记1","笔记3")
14 
15 
16 
17 #拷贝状态的信息(只拷贝权限,不创建文件),包括:mode bits,atime,mtime,flags
18 shutil.copystat("笔记1","笔记3")
19 
20 
21 
22 #拷贝文件和权限:
23 shutil.copy("笔记1","笔记3")
24 
25 
26 
27 #拷贝文件和状态信息:(文件和权限)
28 shutil.copy2("笔记1","笔记3")
29 
30 
31 
32 
33 #递归的去copy文件:(copy目录)
34 shutil.copytree(r"D:\a",r"D:\a1")
35 例如:用python脚本实现代码发布指定线上服务器,例如svn和git在发布的时候,有些文件是不需要进行拷贝的,因袭就需要进行过滤
36 方法如下:
37 shutil.copytree(f1, f2, symlinks=True, ignore=shutil.ignore_patterns(*.pyc, tmp*))
38 
39 
40 
41 #递归的删除目录:(有链接占中目录,删除报错)
42 shutil.rmtree(r"D:\a1")
43 
44 
45 
46 #移动文件:
47 shutil.move(r"D:\a",r"D:\a1")

 

压缩和解压缩方法

 1 1、全目压缩:
 2 #创建压缩包,并返回文件路径:例如:zip  tar
 3 #创建压缩包并返回文件路径,例如:zip、tar
 4 #格式:shutil.make_archive(base_name,format(zip),root_dir,owner,group,logger)
 5 # base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
 6 # 如:www                        =>保存至当前路径
 7 # 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
 8 # format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
 9 # root_dir: 要压缩的文件夹路径(默认当前目录)
10 # owner: 用户,默认当前用户
11 # group: 组,默认当前组
12 # logger: 用于记录日志,通常是logging.Logger对象
13 #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
14 
15 import shutil
16 ret = shutil.make_archive("wwwwwwwwww", gztar, root_dir=/Users/wupeiqi/Downloads/test)
17 ?
18 #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
19 import shutil
20 ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", gztar, root_dir=/Users/wupeiqi/Downloads/test)
21 ?
22 #将D:\软件\pychar\data\s13\Atm目录下的文件打包放置在D:\软件\pychar\data\s13\Atm_name_tar文件下
23 shutil.make_archive(r"D:\软件\pychar\data\s13\Atm_name_tar","tar","D:\软件\pychar\data\s13\Atm")
24 
25 ==========================================================================
26 三、解压方法和指定文件的压缩和解压:
27 
28 2、Zip单个文件压缩与解压:(打包在压缩)
29 (压缩包也可以当做一个文件,想要加入压缩文件的话可以直接写进压缩包里)
30 
31 2.1:#写入指定压缩文件(w)
32 z = zipfile.ZipFile(rD:\软件\pychar\data\test\node.zip, w)
33 z.write(笔记1)
34 z.write(笔记3)
35 z.close()
36 
37 2.2 #追加指定压缩(a)
38 z = zipfile.ZipFile(rD:\软件\pychar\data\test\node.zip, a)
39 z.write(test.py)
40 z.write(md_sys_test.py)
41 z.close()
42 
43 
44 2.3:z.extractall()   解压所有文件:(所有文件)
45 os.chdir(r"D:\软件\pychar\data\test")
46 z = zipfile.ZipFile("node.zip",r)
47 z.extractall()  
48 z.close()
49 
50 
51 2.4:z.extract(test.py)  解压指定文件:
52 只需要传输字符串格式的文件名即可
53 os.chdir(r"D:\软件\pychar\data\test")
54 z = zipfile.ZipFile("node.zip",r)
55 for item in z.namelist():
56     if item == test.py:
57         z.extract(test.py)
58 z.close()
59 
60 
61 
62 
63 
64 =============================================================================================
65 3、tar单个文件压缩与解压:(tar只打包不压缩)
66 3.1、写入指定压缩文件(w)
67 import tarfile
68 ?
69 tar = tarfile.open(rD:\软件\pychar\data\test\your.tar,w)
70 tar.add(rD:\软件\pychar\data\test\test.py, arcname=bbs2.log)
71 tar.add(rD:\软件\pychar\data\test\md_sys_test.py, arcname=cmdb.log)
72 tar.close()
73 
74 3.2、添加指定压缩文件(a)
75 tar = tarfile.open(rD:\软件\pychar\data\test\your.tar,a)
76 tar.add(rD:\软件\pychar\data\test\笔记1, arcname=node1.txt)
77 tar.add(rD:\软件\pychar\data\test\笔记3, arcname=node3.txt)
78 tar.close()
79 
80 
81 3.3、解压所有文件
82 os.chdir(r"D:\软件\pychar\data\test")
83 tar = tarfile.open(your.tar,r)
84 tar.extractall()  # 可设置解压地址
85 tar.close()
86 
87 3.4、解压指定文件
88 tar.getmembers():遍币所有压缩包内的文件对象(非文件字符串)
89 tar.getmember("node1.txt"):指定压缩包内的某个文件
90 os.chdir(r"D:\软件\pychar\data\test")
91 tar = tarfile.open(your.tar,r)
92 for item in tar.getmembers():
93     job = tar.getmember("node1.txt")
94     if item == job:
95         tar.extract(job)
96 tar.close()

以上是关于ansible-script模块和copy模块的主要内容,如果未能解决你的问题,请参考以下文章

Ansible copy模块和synchronize模块说明及比较

Python模块-copy

python copy模块

python模块之copy

python之copy模块与深浅拷贝

Python copy模块