Puppet 链接由文件中的更改触发的EXEC
我的要求是:Puppet 链接由文件中的更改触发的EXEC,puppet,Puppet,我的要求是: 在文件/tmp/file中查找更改 如果有变更,请按以下顺序执行: 运行命令3 运行命令2 运行命令1 如果文件/tmp/file中没有更改,则不执行任何操作 我的代码如下: exec{'exec3': command=>“command3”, require=>File['File'], } exec{'exec2': command=>command2, require=>Exec['exec3'], } exec{'exec1': command=>command1, r
- 运行命令3
- 运行命令2
- 运行命令1
exec{'exec3':
command=>“command3”,
require=>File['File'],
}
exec{'exec2':
command=>command2,
require=>Exec['exec3'],
}
exec{'exec1':
command=>command1,
require=>Exec['exec2'],
订阅=>File['File'],
refreshonly=>true,
}
但是,无论是否对/tmp/file进行了更改,command3和command2都将始终运行。我如何预防它?当/tmp/file没有更改时,我不希望在exec1中运行“require”。您需要:首先,让所有exec订阅文件资源;第二,每个人也需要他们之前的执行资源;第三,将每个exec设置为
refreshonly
下面是一些代码:
文件{'file':
确保=>文件,
路径=>'/tmp/file',
content=>“某些内容\n”,
}
exec{'exec1':
command=>command1,
订阅=>File['File'],
refreshonly=>true,
}
exec{'exec2':
command=>command2,
订阅=>File['File'],
require=>Exec['exec1'],
refreshonly=>true,
}
exec{'exec3':
command=>“command3”,
订阅=>File['File'],
require=>Exec['exec2'],
refreshonly=>true,
}
工作原理:
- 使用exec的机制,只有在刷新事件时才会触发exec1,并且只有在文件1的内容发生更改时才会发送刷新事件
- 所有exec事件都需要由文件内容的更改以类似方式触发,因此它们都订阅该文件
- 但是exec需要以特定的方式排序,因此exec2需要exec1,exec3需要exec2
另请参见为什么只需小心使用refreshonly。您需要:首先,让所有执行人员订阅文件资源;第二,每个人也需要他们之前的执行资源;第三,将每个exec设置为
refreshonly
下面是一些代码:
文件{'file':
确保=>文件,
路径=>'/tmp/file',
content=>“某些内容\n”,
}
exec{'exec1':
command=>command1,
订阅=>File['File'],
refreshonly=>true,
}
exec{'exec2':
command=>command2,
订阅=>File['File'],
require=>Exec['exec1'],
refreshonly=>true,
}
exec{'exec3':
command=>“command3”,
订阅=>File['File'],
require=>Exec['exec2'],
refreshonly=>true,
}
工作原理:
- 使用exec的机制,只有在刷新事件时才会触发exec1,并且只有在文件1的内容发生更改时才会发送刷新事件
- 所有exec事件都需要由文件内容的更改以类似方式触发,因此它们都订阅该文件
- 但是exec需要以特定的方式排序,因此exec2需要exec1,exec3需要exec2
另请参见为什么只需小心使用refreshonly。也许值得注意的是,与Puppet中的任何其他内容不同,资源默认值具有动态范围。这对这个答案本身没有特别的影响,但是当这个代码被插入到OP的上下文中时,可能会产生意想不到的结果。@Alex Harvey,谢谢。成功了。不过,在我的代码中,仍然有一个问题,您能否解释一下为什么所有exec块中的命令都会在第一个exec块本应仅在文件发生更改时运行的情况下运行。
require
metaparameter仅声明事件发生的顺序,其他所有事情都是相同的(并且如果第一个资源无法应用,也会阻止第二个资源被应用)同时,subscribe
metaparameter i与refreshonly=>true
结合声明,当且仅当资源订阅更改状态时,才应应用资源。是的,一开始有点混乱。可能值得注意的是,与Puppet中的任何其他内容不同,资源默认值具有动态范围。这对这个答案本身没有特别的影响,但是当这个代码被插入到OP的上下文中时,它可能会产生意想不到的结果。@Alex Harvey,谢谢。它起作用了。但在我的代码中,仍然是一个问题,你能解释一下为什么所有exec块中的命令都会运行,而第一个exec块应该只在fi发生变化时运行吗le.require
元参数仅声明事件发生的顺序,所有其他事件都是相同的(如果第一个资源未能应用,还阻止第二个资源被应用)。同时,subscribe
metaparameter i与refreshonly=>true
结合声明,当且仅当订阅的资源更改状态时,才应应用该资源。是的,一开始有点混乱。