Con rối: Kiểm tra nếu Tài nguyên được xác định hoặc tạo nó


14

Tôi đã cố gắng tìm ra một cách để kiểm tra xem một tài nguyên đã được xác định trong một tệp khác chưa và nếu không tạo nó? Một ví dụ nhanh:

  if File[$local_container] {
    alert("Testing - It existed $local_container")
  } else {
    file{ "$local_container":
      ensure => directory,
    }
  }

Tuy nhiên - File[$local_container]dường như luôn luôn đánh giá là đúng. Có cách nào để làm việc này không?

Câu trả lời:


10

Cách tốt hơn để làm điều này là bằng cách sử dụng hàm notify_resource từ Puppetlabs stdlib

Nó nhận một loại tài nguyên, tiêu đề và một danh sách các thuộc tính mô tả tài nguyên làm tham số.

nói rằng bạn có trường hợp thử nghiệm để chỉ tạo tài nguyên nếu nó chưa tồn tại-

ensure_resource('package', 'test-pkg', {'ensure' => 'present'})

Điều này có vẻ sạch sẽ hơn nhiều, vượt qua dấu kiểm theo cách này. Cảm ơn vì tiền hỗ trợ!
gnarf

15

Bạn có nghĩa là "kiểm tra nếu một tài nguyên đã được xác định "? Nếu bạn xác định một tài nguyên (ví dụ, file {}v.v.) Con rối sẽ tạo ra những gì bạn mô tả nếu không tồn tại (tất nhiên là giả sử bạn vượt qua ensure => present).

Để kiểm tra xem tài nguyên đã được xác định trong danh mục hay chưa:

mark-draytons-macbook:~ mark$ cat test.pp 
file { "/tmp/foo": ensure => present }

if defined(File["/tmp/foo"]) {
  alert("/tmp/foo is defined")
} else {
  alert("/tmp/foo is not defined")
}

if defined(File["/tmp/bar"]) {
  alert("/tmp/bar is defined")
} else {
  alert("/tmp/bar is not defined")
}

mark-draytons-macbook:~ mark$ puppet test.pp 
alert: Scope(Class[main]): /tmp/foo is defined
alert: Scope(Class[main]): /tmp/bar is not defined
notice: //File[/tmp/foo]/ensure: created

Lưu ý: defined()phụ thuộc vào thứ tự phân tích cú pháp .


5
Điều đó "phụ thuộc vào thứ tự phân tích cú pháp" làm cho nó gần như vô dụng.
joerx

2

Hoặc là....

unless File["${local_container}"] {
  file{ "${local_container}":
     ensure => directory,
  }
}

Và hãy để mắt đến những trích dẫn và dấu ngoặc nhọn ....


-2

đơn giản,

file{ "$local_container":
  ensure => directory,
  replace => false,
}

Không, nếu "$local_container"tệp đã được xác định ở một nơi khác (như nói bởi điều gì đó muốn kiểm soát quyền / chủ sở hữu), bạn không thể xác định cùng một tài nguyên hai lần.
gnarf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.