Description:
Add option to disable apt in ProvisioningScript
The ProvisioningScript API is updated to take a
boolean option DisablePackageCommands to completely
disable all package-related commands (apt-get, etc.)
This is for the benefit of external provisioners
that require more control over which packages are
installed and from where.
Affected files (+41, -8 lines):
A [revision details]
M environs/manual/provisioner.go
M state/api/client.go
M state/api/params/params.go
M state/apiserver/client/client.go
M state/apiserver/client/client_test.go
// ProvisioningScript returns a shell script that, when run,
// provisions a machine agent on the machine executing the script.
-func (c *Client) ProvisioningScript(machineId, nonce string) (script
string, err error) {
- args := params.ProvisioningScriptParams{
- MachineId: machineId,
- Nonce: nonce,
- }
+func (c *Client) ProvisioningScript(args params.ProvisioningScriptParams)
(script string, err error) {
var result params.ProvisioningScriptResult
if err = c.st.Call("Client", "", "ProvisioningScript", args, &result);
err != nil {
return "", err
Index: state/api/params/params.go
=== modified file 'state/api/params/params.go'
--- state/api/params/params.go 2014-01-22 03:37:36 +0000
+++ state/api/params/params.go 2014-01-30 02:20:09 +0000
@@ -520,7 +520,14 @@
type ProvisioningScriptParams struct {
MachineId string
Nonce string
- DataDir string
+
+ // DataDir may be "", in which case the default will be used.
+ DataDir string
+
+ // DisablePackageCommands may be set to disable all package-related
+ // commands. It is then the responsibility of the provisioner to
+ // ensure that all the packages required by Juju are available.
+ DisablePackageCommands bool
}
// ProvisioningScriptResult contains the result of the
Reviewers: mp+203866_ code.launchpad. net,
Message:
Please take a look.
Description:
Add option to disable apt in ProvisioningScript
The ProvisioningScript API is updated to take a ommands to completely
boolean option DisablePackageC
disable all package-related commands (apt-get, etc.)
This is for the benefit of external provisioners
that require more control over which packages are
installed and from where.
https:/ /code.launchpad .net/~axwalk/ juju-core/ provisioningscr ipt-api- disableaptcomma nds/+merge/ 203866
(do not edit description out of merge proposal)
Please review this at https:/ /codereview. appspot. com/58490043/
Affected files (+41, -8 lines): manual/ provisioner. go params/ params. go /client/ client. go /client/ client_ test.go
A [revision details]
M environs/
M state/api/client.go
M state/api/
M state/apiserver
M state/apiserver
Index: [revision details] 20140130015505- n3kdp8ga69rxk1t y
=== added file '[revision details]'
--- [revision details] 2012-01-01 00:00:00 +0000
+++ [revision details] 2012-01-01 00:00:00 +0000
@@ -0,0 +1,2 @@
+Old revision: tarmac-
+New revision: <email address hidden>
Index: environs/ manual/ provisioner. go manual/ provisioner. go' manual/ provisioner. go 2014-01-28 04:58:43 +0000 manual/ provisioner. go 2014-01-30 02:20:09 +0000
=== modified file 'environs/
--- environs/
+++ environs/
@@ -133,7 +133,10 @@
var provisioningScript string ProvisioningScr ipt(machineId, Nonce) ProvisioningScr ipt(params. ProvisioningScr iptParams{ Nonce,
if stateConn == nil {
- provisioningScript, err = client.
machineParams.
+ provisioningScript, err =
client.
+ MachineId: machineId,
+ Nonce: machineParams.
+ })
if err != nil {
return "", err
}
Index: state/api/client.go api/client. go'
=== modified file 'state/
--- state/api/client.go 2014-01-22 03:37:36 +0000
+++ state/api/client.go 2014-01-30 02:20:09 +0000
@@ -173,11 +173,7 @@
// ProvisioningScript returns a shell script that, when run, ipt(machineId, nonce string) (script ProvisioningScr iptParams{ ipt(args params. ProvisioningScr iptParams) ProvisioningScr iptResult ript", args, &result);
// provisions a machine agent on the machine executing the script.
-func (c *Client) ProvisioningScr
string, err error) {
- args := params.
- MachineId: machineId,
- Nonce: nonce,
- }
+func (c *Client) ProvisioningScr
(script string, err error) {
var result params.
if err = c.st.Call("Client", "", "ProvisioningSc
err != nil {
return "", err
Index: state/api/ params/ params. go api/params/ params. go' params/ params. go 2014-01-22 03:37:36 +0000 params/ params. go 2014-01-30 02:20:09 +0000 iptParams struct { ommands may be set to disable all package-related ommands bool
=== modified file 'state/
--- state/api/
+++ state/api/
@@ -520,7 +520,14 @@
type ProvisioningScr
MachineId string
Nonce string
- DataDir string
+
+ // DataDir may be "", in which case the default will be used.
+ DataDir string
+
+ // DisablePackageC
+ // commands. It is then the responsibility of the provisioner to
+ // ensure that all the packages required by Juju are available.
+ DisablePackageC
}
// ProvisioningScr iptResult contains the result of the
Index: state/apiserver /client/ client. go apiserver/ client/ client. go' /client/ client. go 2014-01-28 04:58:43 +0000 /client/ client. go 2014-01-30 02:20:09 +0000 kageCommands = args.DisablePac kageCommands ConfigureJuju( mcfg, cloudcfg); err != nil {
=== modified file 'state/
--- state/apiserver
+++ state/apiserver
@@ -609,6 +609,7 @@
if err != nil {
return result, err
}
+ mcfg.DisablePac
cloudcfg := coreCloudinit.New()
if err := cloudinit.
return result, err
Index: state/apiserver /client/ client_ test.go apiserver/ client/ client_ test.go' /client/ client_ test.go 2014-01-24 14:30:55 +0000 /client/ client_ test.go 2014-01-30 02:20:09 +0000 Client( ).ProvisioningS cript(machineId , Client( ).ProvisioningS cript(params. ProvisioningScr iptParams{ MachineConfig( s.State, machineId,
=== modified file 'state/
--- state/apiserver
+++ state/apiserver
@@ -1669,7 +1669,10 @@
// Call ProvisioningScript. Normally ProvisioningScript and
// MachineConfig are mutually exclusive; both of them will
// allocate a state/api password for the machine agent.
- script, err := s.APIState.
apiParams.Nonce)
+ script, err :=
s.APIState.
+ MachineId: machineId,
+ Nonce: apiParams.Nonce,
+ })
c.Assert(err, gc.IsNil)
mcfg, err := statecmd.
apiParams.Nonce, "")
c.Assert(err, gc.IsNil)
@@ -1694,6 +1697,27 @@
}
}
+func (s *clientSuite) TestProvisionin gScriptDisableP ackageCommands( c AddMachineParam s{ MachineJob{ params. JobHostUnits} , Id("1234" ), eristics: instance. MustParseHardwa re("arch= amd64") , Client( ).AddMachines( []params. AddMachineParam s{apiParams} ) len(machines) , gc.Equals, 1) Client( ).ProvisioningS cript(params. ProvisioningScr iptParams{ ommands: true, jc.Contains) , "apt-get") rizeStoreOnDepl oyServiceSetCha rmAndAddCharm( c *gc.C) { ore()
*gc.C) {
+ apiParams := params.
+ Jobs: []params.
+ InstanceId: instance.
+ Nonce: "foo",
+ HardwareCharact
+ }
+ machines, err :=
s.APIState.
+ c.Assert(err, gc.IsNil)
+ c.Assert(
+ machineId := machines[0].Machine
+ script, err :=
s.APIState.
+ MachineId: machineId,
+ Nonce: apiParams.Nonce,
+ DisablePackageC
+ })
+ c.Assert(err, gc.IsNil)
+ // We disabled package commands: there should be no "apt" commands in the
script.
+ c.Assert(script, gc.Not(
+}
+
func (s *clientSuite)
TestClientAutho
store, restore := makeMockCharmSt
defer restore()