自動化運維工具——Ansible(六)——文件操作之copy模塊

在前文的示例中,我們已經瞭解了ping模塊與fetch模塊,那麼接下來幾篇文章中,我們來了解一些新的模塊,這些模塊都是常用的操作文件的模塊

1. copy模塊介紹

見名知義,copy模塊的作用就是拷貝文件,它與之前介紹的fetch模塊類似,不過,fetch模塊是從遠程主機中拉取文件到ansible主機,而copy模塊是將ansible主機上的文件拷貝到遠程主機中。

2. 常用參數

此處我們介紹一些copy模塊的常用參數,然後再給出對應示例。

  • src參數 :用於指定需要copy的文件或目錄
  • dest參數 :用於指定文件將被拷貝到遠程主機的哪個目錄中,dest爲必須參數
  • content參數 :當不使用src指定拷貝的文件時,可以使用content直接指定文件內容,src與content兩個參數必有其一,否則會報錯。
  • force參數 : 當遠程主機的目標路徑中已經存在同名文件,並且與ansible主機中的文件內容不同時,是否強制覆蓋,可選值有yes和no,默認值爲yes,表示覆蓋,如果設置爲no,則不會執行覆蓋拷貝操作,遠程主機中的文件保持不變。
  • backup參數 : 當遠程主機的目標路徑中已經存在同名文件,並且與ansible主機中的文件內容不同時,是否對遠程主機的文件進行備份,可選值有yes和no,當設置爲yes時,會先備份遠程主機中的文件,然後再將ansible主機中的文件拷貝到遠程主機。
  • owner參數 : 指定文件拷貝到遠程主機後的屬主,但是遠程主機上必須有對應的用戶,否則會報錯。
  • group參數 : 指定文件拷貝到遠程主機後的屬組,但是遠程主機上必須有對應的組,否則會報錯。
  • mode參數 : 指定文件拷貝到遠程主機後的權限,如果你想將權限設置爲”rw-r–r–“,則可以使用mode=0644表示,如果你想要在user對應的權限位上添加執行權限,則可以使用mode=u+x表示。

3. 使用示例

3.1 示例一

將ansible主機中/testdir/copytest文件複製到遠程主機的/opt目錄下

#server1中

cd /testdir/
touch copytest
vim copytest
cat copytest
hello-word

在這裏插入圖片描述

#server4中

cd /opt/
touch copytest
vim copytest 
cathello-ansible
copytest

在這裏插入圖片描述

測試:
server1中:

ansible testB -m copy -a "src=/testdir/copytest dest=/opt/"  

在這裏插入圖片描述

注意:如果copytest文件已經存在於遠程主機的/opt目錄中,並且遠程主機中的copytest與ansible主機中copytest文件內容不同,那麼使用上面的命令時,遠程主機中的copytest文件將被覆蓋。

在這裏插入圖片描述

再次執行(冪等性):
在這裏插入圖片描述

3.2 示例二

在遠程主機的/opt目錄下生成文件test,test文件中有兩行文本,第一行文本爲aaa,第二行爲bbb,當使用content指定文件內容時,dest參數對應的值必須是一個文件,而不能是一個路徑。

#server1中
ansible testB -m copy -a 'content="aaa\nbbb\n" dest=/opt/test'

在這裏插入圖片描述

#server4中
cd /opt/
ls
cat test 

在這裏插入圖片描述

3.3 示例三

將ansible主機中/testdir/copytest文件複製到遠程主機的/opt目錄中時,如果遠程主機中已經存在/opt/copytest文件,並且文件內容與ansible主機中的copytest文件的內容不一致,則不執行拷貝操作,遠程主機中的/opt/copytest文件內容不會被改變。

# server4中
echo "hello kaiser" >>copytest 
cat copytest

# server1中
cat copytest

在這裏插入圖片描述
在這裏插入圖片描述

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ force=no" 

在這裏插入圖片描述

在這裏插入圖片描述

3.4 示例四

將ansible主機中/testdir/copytest文件複製到遠程主機的/opt目錄中時,如果遠程主機中已經存在/opt/copytest文件,並且文件內容與ansible主機中的copytest文件的內容不一致,會執行拷貝操作,但是在執行拷貝操作之前,會將遠程主機中的原文件重命名,以作備份,然後再進行拷貝操作。

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ backup=yes"  

在這裏插入圖片描述

在這裏插入圖片描述

3.5 示例五

拷貝文件時,指定文件的屬主,需要注意,遠程主機上必須存在對應的用戶。

#server4中
useradd kaiser
id kaiser

在這裏插入圖片描述

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ owner=kaiser"  

在這裏插入圖片描述
在server4主機:
在這裏插入圖片描述

3.6 示例六

拷貝文件時,指定文件的屬組,需要注意,遠程主機上必須存在對應的組。

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ group=kaiser"  

在這裏插入圖片描述
在server4主機:
在這裏插入圖片描述

3.7 示例七

拷貝文件時,指定文件的權限

#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ mode=0640"  

在這裏插入圖片描述

在server4主機:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章