Cum creezi blocuri de discuri RAM la cerere?

Документация Chef на ресурсе bash содержит пример передачи данных атрибутов в скрипт. Вы должны иметь возможность адаптировать его к своим потребностям, например, с помощью сценария ожидания:

bash 'call main.sh and respond with attribute values' do
  cwd ::File.dirname('/usr/local/bin')
  code <<-EOH
    #!/usr/bin/expect
    set filename [lindex $argv 0]
    set f [open $filename]
    set inputs [split [read $f] "\n"]

    # Below parameters i need to pass using chef attributes instead of expect inputs
    lassign $inputs ADMIN_PASSWORD CREATE_USER USER_EMAIL FIRST_NAME LAST_NAME INST_PATH

    #read -e -p "Enter the installation folder path(//): " FILEPATH3
    #FILEPATH3=$(echo $FILEPATH3 | sed 's/ /\\ /')


    spawn "$INST_PATH/main.sh"

    expect "Enter system admin password:"

    send "#{node['admin_password']\r"

    expect "Create a new user y/n (y):"

    send "#{node['create_user']}\r"
  EOH
end

Было бы лучше, если бы main.sh принимал аргументы командной строки, так как это значительно упростит работу вашего повара, Например:

bash 'run main.sh' do
  cwd ::File.dirname('/usr/local/bin')
  code <<-EOH
    ./main.sh --admin_password #{node['admin_password']} --create_user #{node['create_user']}
    EOH
end

Вероятно, было бы еще проще, если бы main.sh был коротким, преобразовать сам сценарий в ресурс bash в Chef, как в других примерах выше.

Как видите, Chef не имеет какой-либо функции «ожидать» в ресурсе bash, поэтому вы по-прежнему придерживаетесь того же сценария ожидания, если только вы не можете переключиться на передачу значений в качестве аргументов командной строки или встроить свой основной сценарий. в ресурсе Chef (удалив интерактивные подсказки, когда вы это сделаете).

Наконец, если вы знаете достаточно Ruby для воспроизведения вашего main.sh, вы также можете сделать многое из этого изначально и полностью отказаться от использования ресурсов bash.

2
27.03.2018, 02:38
2 ответа

Вы не должны удалять /dev/ram0самостоятельно. Он будет удален, когда вы выполните sudo rmmod brd, что освободит место и удалит модуль. Затем вы можете начать снова с modprobe.

5
27.01.2020, 21:58

Я не знаком с /dev/ram, но вы можете сделать что-то подобное с tmpfs и петлевыми устройствами:

mkdir /ramdisks
mount -t tmpfs tmpfs /ramdisks
dd if=/dev/zero of=/ramdisks/disk0 bs=1M count=100
losetup /dev/loop0 /ramdisks/disk0
mke2fs /dev/loop0
...
losetup -d /dev/loop0
rm /ramdisks/disk0
2
27.01.2020, 21:58

Теги

Похожие вопросы