file

file 可以用來管理檔案、目錄、檔案內容、以及權限,還有 symlink。

在 Puppet 裡使用 file 就跟吃飯一樣常常接觸,畢竟這是一套 Configuration 組態管理系統嘛!

基本範例

  • 建立一個 Hello world !!
file { '/tmp/bar':
  ensure  => file,
  mode    => '0644',
  owner   => 'root',
  group   => 'root',
  content => 'hello world!!'
}

實際上在 instances 會產生一個 /tmp/bar 的檔案,並且:

$ cat /tmp/bar
hello world!!

檔案權限的部份會變成這樣:

$ ll /tmp/bar
-rw-r--r-- 1 root root 13 Oct 24 11:45 bar
  • 建立樹狀結構目錄

在 Linux 你可以用 mkdir -p 搞定,但是 Puppet 你要一層一層建立,就像這樣:

file { ['/tmp/bar', '/tmp/bar/foo']:
  ensure => directory,
}

或是用變數:

$sample_dirs = ['/tmp/bar', '/tmp/bar/foo']
file { $sample_dirs:
  ensure => directory,
}
  • 處理檔案符號連結 (symlink)
file { '/tmp/link-to-motd':
  ensure => link,
  target => '/etc/motd', 
}

情境範例:

  • 用 default 來處理差不多的 resource

在實際管理的時候一定會遇到要同時處理很多 file,但是彼此又很像,只有一點點差異,那麼就可以利用 default 一次處理多個差不多的 resoure。

file {
  default:
    ensure => file,
    mode   => '0644',
    owner  => 'root',
    group  => 'root',
  ;
  '/etc/hosts.allow':
    content => 'sshd:192.168.1.10',
  ;
  '/etc/hosts.deny':
    content => 'sshd:all:deny',
}

這樣就一次搞定 hosts.allow 和 hosts.deny 這兩個檔案。

file 多數用在你想 完全掌控 檔案或目錄的情況下使用,如果你只想針對內容的某一段修改,則應該使用 augeas 或是 file_line

results matching ""

    No results matching ""