SQL 服务器打印输出到 Chef inspec

SQL Server Print Output to Chef inspec

SQL 服务器打印消息未进入 chef inspec 进行验证。我们有验证选项吗?

下面的 chef inspec 示例代码不接受 SQL 服务器打印消息。

sql = mssql_session(user: 'sa', password: 'Test')
describe sql.query("
-- #5.2 - Set the ''default trace enabled'' Server Configuration Option to 1
IF EXISTS (SELECT name, CAST(value as int) as value_configured, CAST(value_in_use as int) as value_in_use FROM sys.configurations WHERE name = 'default trace enabled' and (value=1 and value_in_use=1))
BEGIN
PRINT 'OK'
END
ELSE
PRINT 'NOT OK'") do
its("value") { should eq 'OK' }
end
end

而不是 PRINT 'OK' 使用 SELECT 'OK' AS 值 / SELECT 'NOT OK' AS 值。

可以通过编程方式获取 PRINT 消息,但您需要代码来侦听连接的 InfoMessage 事件。基本上,您需要深入研究 mssql_session 或 sql.query 的代码...您可能不想这样做。

您可以直接修改您的声明 return OK 或 NOT OK,如下所示。 SELECT return返回结果集。 Print 没有 return 结果集返回。驱动程序必须使用 InfoMessage 事件以不同方式读取它。 Read more.

最好按照@user2845090 的建议使用SELECT 语句。

SELECT CASE WHEN 
EXISTS (SELECT name
, CAST(value as int) as value_configured
, CAST(value_in_use as int) as value_in_use 
FROM sys.configurations WHERE name = 'default trace enabled' 
and (value=1 and value_in_use=1)) THEN 'OK' ELSE 'NOT OK' 
END

或者

SELECT IIF(EXISTS((SELECT name
, CAST(value as int) as value_configured
, CAST(value_in_use as int) as value_in_use 
FROM sys.configurations WHERE name = 'default trace enabled' 
and (value=1 and value_in_use=1)),'OK','NOT OK')