2013-08-23 48 views
16

Tôi đang sử dụng âm đạo với con rối để thiết lập các máy ảo cho môi trường phát triển. Tôi chỉ muốn thiết lập một vài biến môi trường trong tệp .pp. Sử dụng hộp ảo và một hộp cơ sở lang thang cho Ubuntu 64 bit.Đặt Biến môi trường với Rối

Tôi hiện có thông tin này.

$bar = 'bar' 

class foobar { 
    exec { 'foobar': 
    command => "export Foo=${bar}", 
    } 
} 

nhưng khi cấp phép tôi gặp lỗi: Không thể tìm thấy lệnh 'xuất'.

Điều này có vẻ như nó phải đủ đơn giản tôi thiếu một số loại yêu cầu hoặc đường dẫn cho loại exec? Tôi nhận thấy trong tài liệu có một tùy chọn môi trường để thiết lập các biến môi trường, tôi có nên sử dụng nó không?

Trả lời

3

Bạn có thể thử:

class foobar { 
    exec { 'foobar' : 
    command => "/bin/bash -c \"export Foo=${bar}\"", 
    } 
} 
+0

Cảm ơn phản hồi Tôi đã tìm thấy giải pháp đó. Trong khi nó loại bỏ các lỗi về lệnh không được tìm thấy nó tiếc là không tạo ra kết quả mong đợi. Biến môi trường Foo không được thiết lập khi tôi ssh vào máy ảo. – bgrantdev

+3

Đây là một noop. Nó sửa đổi môi trường của một trình bao đã được phân tách riêng cho tài nguyên 'exec' này. Vỏ này sau đó ngay lập tức chấm dứt. Việc xuất khẩu không có hiệu lực. –

15

Cách đơn giản nhất để acomplish này là để đặt env của bạn vars trong/etc/môi trường, điều này đảm bảo họ có sẵn để tất cả mọi thứ (hoặc khá nhiều tất cả mọi thứ).

Something như thế này:

class example($somevar) { 
    file { "/etc/environment": 
     content => inline_template("SOMEVAR=${somevar}") 
    } 
} 

Lý do có lớp parameterised là để bạn có thể nhắm mục tiêu nó từ hiera với tra cứu biến tự động (http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup) ... nếu bạn đang gắn bó một cái gì đó trong/etc/môi trường , nó thường là tốt nhất nếu bạn thực sự làm cho nó môi trường cụ thể.

lưu ý: Tôi chỉ thử nghiệm này trên ubuntu

+0

Tôi thích sửa chữa đơn giản và ngắn gọn nhiều hơn tôi không thích điều này gây ô nhiễm '/ etc/environment' của tôi. Cảm ơn. – 7yl4r

17

Nếu bạn chỉ cần các biến có sẵn trong thời gian bù nhìn, whats sai với:

Exec { environment => [ "foo=$bar" ] } 

?

+1

câu lệnh exec sẽ không xuất biến cho khi anh ta đăng nhập vào máy chủ. – ptierno

+6

Tôi biết rằng - đó là lý do tại sao tôi nói 'nếu bạn chỉ cần các biến có sẵn trong chạy con rối'. Câu hỏi không nói rằng các biến được yêu cầu phải được đặt trong các shell của người dùng – John

4

Con đường tôi đã xung quanh nó là cũng sử dụng /etc/profile.d:

$bar = 'bar' 
file { "/etc/profile.d/my_test.sh": 
    content => "export Foo=${bar}", 
    mode => 755 
} 

Điều này đảm bảo rằng mọi lúc bạn đăng nhập (ví dụ: ssh), các $ myVar biến được xuất khẩu sang môi trường của bạn. Sau khi bạn áp dụng thông qua con rối và đăng nhập (ex ssh localhost), echo $ Foo sẽ trả lại thanh

0

Tôi biết đây là một câu hỏi cũ, nhưng tôi có thể đặt giá trị nhắc PS1 và thêm nó vào tệp .bashrc của tôi như thế này :

$PS1 = '\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \$ ' 

và trong một lớp:

exec {"vagrant-prompt": 
    unless => "grep -F 'export PS1=\"${PS1}\"' ${HOME_DIR}/.bashrc", 
    command => "echo 'export PS1=\"${PS1}\"' >> ${HOME_DIR}/.bashrc", 
    user => "${APP_USER}", 
} 

Các -F làm grep nó giải thích nó như là một chuỗi cố định. Nếu không, nó sẽ không tìm thấy nó và tiếp tục thêm vào tệp .bashrc.

Các vấn đề liên quan