запускать кукольный класс, только если условие выполнено

Используя .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();
    }
}

0
задан user53029 7 March 2019 в 03:50
поделиться

2 ответа

Вы уверены, что 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,
    ;
}
0
ответ дан RASG 7 March 2019 в 03:50
поделиться

Во-первых, идиоматический способ сделать это - создать пользовательский факт , который определяет статус принудительного применения 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'
0
ответ дан John Bollinger 7 March 2019 в 03:50
поделиться
Другие вопросы по тегам:

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