mirror of
https://github.com/slhaf/Partner.git
synced 2026-05-12 08:43:02 +08:00
refactor(runner): manage execution policy via ConfigCenter
This commit is contained in:
@@ -1,9 +1,14 @@
|
|||||||
package work.slhaf.partner.core.action.runner.policy
|
package work.slhaf.partner.core.action.runner.policy
|
||||||
|
|
||||||
|
import com.alibaba.fastjson2.JSONObject
|
||||||
|
import work.slhaf.partner.framework.agent.config.Config
|
||||||
|
import work.slhaf.partner.framework.agent.config.ConfigRegistration
|
||||||
|
import work.slhaf.partner.framework.agent.config.Configurable
|
||||||
|
import java.nio.file.Path
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import java.util.concurrent.CopyOnWriteArraySet
|
import java.util.concurrent.CopyOnWriteArraySet
|
||||||
|
|
||||||
object ExecutionPolicyRegistry {
|
object ExecutionPolicyRegistry : Configurable, ConfigRegistration<ExecutionPolicy> {
|
||||||
|
|
||||||
private const val DEFAULT_PROVIDER = "direct"
|
private const val DEFAULT_PROVIDER = "direct"
|
||||||
|
|
||||||
@@ -13,26 +18,13 @@ object ExecutionPolicyRegistry {
|
|||||||
|
|
||||||
private val listeners = CopyOnWriteArraySet<RunnerExecutionPolicyListener>()
|
private val listeners = CopyOnWriteArraySet<RunnerExecutionPolicyListener>()
|
||||||
|
|
||||||
@Volatile
|
init {
|
||||||
private var currentPolicy = ExecutionPolicy(
|
register()
|
||||||
provider = "direct",
|
|
||||||
mode = ExecutionPolicy.Mode.DIRECT,
|
|
||||||
net = ExecutionPolicy.Network.ENABLE,
|
|
||||||
inheritEnv = true,
|
|
||||||
env = emptyMap(),
|
|
||||||
workingDirectory = null,
|
|
||||||
readOnlyPaths = emptySet(),
|
|
||||||
writablePaths = emptySet(),
|
|
||||||
)
|
|
||||||
|
|
||||||
fun prepare(commands: List<String>): WrappedLaunchSpec {
|
|
||||||
val policy = currentPolicy
|
|
||||||
val provider = policyProviders[policy.provider]
|
|
||||||
?: policyProviders[DEFAULT_PROVIDER]
|
|
||||||
?: error("Default provider '${DEFAULT_PROVIDER}' is not registered")
|
|
||||||
return provider.prepare(policy, commands)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Volatile
|
||||||
|
private lateinit var currentPolicy: ExecutionPolicy
|
||||||
|
|
||||||
fun updatePolicy(policy: ExecutionPolicy) {
|
fun updatePolicy(policy: ExecutionPolicy) {
|
||||||
currentPolicy = policy
|
currentPolicy = policy
|
||||||
listeners.forEach { it.onPolicyChanged(policy) }
|
listeners.forEach { it.onPolicyChanged(policy) }
|
||||||
@@ -53,6 +45,41 @@ object ExecutionPolicyRegistry {
|
|||||||
}
|
}
|
||||||
policyProviders[name] = policyProvider
|
policyProviders[name] = policyProvider
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun declare(): Map<Path, ConfigRegistration<out Config>> {
|
||||||
|
return mapOf(Path.of("core", "action", "runner_policy.json") to this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun type(): Class<ExecutionPolicy> {
|
||||||
|
return ExecutionPolicy::class.java
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun init(
|
||||||
|
config: ExecutionPolicy,
|
||||||
|
json: JSONObject?
|
||||||
|
) {
|
||||||
|
this.currentPolicy = config
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun defaultConfig(): ExecutionPolicy {
|
||||||
|
return ExecutionPolicy(
|
||||||
|
provider = "direct",
|
||||||
|
mode = ExecutionPolicy.Mode.DIRECT,
|
||||||
|
net = ExecutionPolicy.Network.ENABLE,
|
||||||
|
inheritEnv = true,
|
||||||
|
env = emptyMap(),
|
||||||
|
workingDirectory = null,
|
||||||
|
readOnlyPaths = emptySet(),
|
||||||
|
writablePaths = emptySet(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onReload(
|
||||||
|
config: ExecutionPolicy,
|
||||||
|
json: JSONObject?
|
||||||
|
) {
|
||||||
|
this.currentPolicy = config
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ExecutionPolicy(
|
data class ExecutionPolicy(
|
||||||
@@ -64,7 +91,7 @@ data class ExecutionPolicy(
|
|||||||
val workingDirectory: String?,
|
val workingDirectory: String?,
|
||||||
val readOnlyPaths: Set<String>,
|
val readOnlyPaths: Set<String>,
|
||||||
val writablePaths: Set<String>,
|
val writablePaths: Set<String>,
|
||||||
) {
|
) : Config() {
|
||||||
|
|
||||||
enum class Mode {
|
enum class Mode {
|
||||||
DIRECT,
|
DIRECT,
|
||||||
|
|||||||
Reference in New Issue
Block a user