Используя .NET 4.5 (или .NET 4.0, добавив пакет Microsoft.Net.Http из NuGet), есть более простой способ имитации запросов формы. Вот пример:
private async Task Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes)
{
HttpContent stringContent = new StringContent(paramString);
HttpContent fileStreamContent = new StreamContent(paramFileStream);
HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
formData.Add(stringContent, "param1", "param1");
formData.Add(fileStreamContent, "file1", "file1");
formData.Add(bytesContent, "file2", "file2");
var response = await client.PostAsync(actionUrl, formData);
if (!response.IsSuccessStatusCode)
{
return null;
}
return await response.Content.ReadAsStreamAsync();
}
}
Вы уверены, что getenforce
находится в /usr/bin/
?
Попробуйте это проверить:
root@lab:~# which getenforce
/sbin/getenforce
Вы также столкнетесь с рядом других ошибок с вашим кодом, так как вы не сделали не цитировал свои строки, вы пытались получить boolean
из string
сравнения и т. д.
Оставьте переменную $selinux
и используйте только код ниже
exec {
"rasg":
command => "echo rasg > /tmp/rasg.txt",
onlyif => "getenforce | egrep -q 'Enforcing|Permissive'",
path => [ "/bin", "/sbin", "/usr/bin" ],
timeout => 30,
;
}
Во-первых, идиоматический способ сделать это - создать пользовательский факт , который определяет статус принудительного применения SELinux для узлов. В ваших манипуляционных марионетках вы будете использовать обычную условную марионетку, основанную на значении этого факта. Например,
if $selinux_enforcement in ['Permissive', 'Enforcing'] {
exec { "some command":
timeout => 30
}
}
Но если вы хотите специально использовать свойство unless
или onlyif
ресурса Exec
для управления, запускать ли команду этого Exec, то Вы должны понимать, что эти свойства определяют команды операционной системы , которые необходимо выполнить для выполнения оценки. Их коды выхода указывают, следует ли продолжить выполнение основной команды. Для цели Linux, используя поставщика Exec по умолчанию, posix
, вы можете сделать что-то вроде этого:
exec { "some command":
path => [ '/bin', '/usr/bin', '/sbin', '/usr/sbin' ],
timeout => 30,
onlyif => 'bash -c "case $(getenforce) in Enforcing|Permissive) exit 0;; *) exit 1;; esac"' ,
}
Обратите внимание, что программный пакет SELinux обычно содержит команду [ 117], который решает вопрос более прямо, чем getenforce
. Эта команда, предназначенная для использования в сценариях, передает свой результат через статус завершения, поэтому она может быть лучшим кандидатом для вашего onlyif
, упрощая его до:
onlyif => 'selinuxenabled'