~ubuntu-branches/ubuntu/trusty/juju-core/trusty-proposed

« back to all changes in this revision

Viewing changes to src/launchpad.net/juju-core/environs/cloudinit/cloudinit_test.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-03 09:22:46 UTC
  • mfrom: (1.1.17)
  • Revision ID: package-import@ubuntu.com-20140203092246-e03vg402vztzo4qa
Tags: 1.17.2-0ubuntu1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
82
82
                                Password: "bletch",
83
83
                                CACert:   []byte("CA CERT\n" + testing.CACert),
84
84
                        },
85
 
                        Constraints:         envConstraints,
86
 
                        DataDir:             environs.DataDir,
87
 
                        StateInfoURL:        "some-url",
88
 
                        SystemPrivateSSHKey: "private rsa key",
 
85
                        Constraints:             envConstraints,
 
86
                        DataDir:                 environs.DataDir,
 
87
                        LogDir:                  environs.LogDir,
 
88
                        CloudInitOutputLog:      environs.CloudInitOutputLog,
 
89
                        RsyslogConfPath:         environs.RsyslogConfPath,
 
90
                        StateInfoURL:            "some-url",
 
91
                        SystemPrivateSSHKey:     "private rsa key",
 
92
                        MachineAgentServiceName: "jujud-machine-0",
 
93
                        MongoServiceName:        "juju-db",
89
94
                },
90
95
                setEnvConfig: true,
91
96
                expectScripts: `
94
99
install -D -m 644 /dev/null '/var/lib/juju/nonce.txt'
95
100
printf '%s\\n' 'FAKE_NONCE' > '/var/lib/juju/nonce.txt'
96
101
test -e /proc/self/fd/9 \|\| exec 9>&2
97
 
grep -q '.juju-proxy' /home/ubuntu/.profile \|\| printf .* >> /home/ubuntu/.profile
 
102
\(\[ ! -e /home/ubuntu/.profile \] \|\| grep -q '.juju-proxy' /home/ubuntu/.profile\) \|\| printf .* >> /home/ubuntu/.profile
98
103
mkdir -p /var/lib/juju
99
104
mkdir -p /var/log/juju
100
105
echo 'Fetching tools.*
106
111
tar zxf \$bin/tools.tar.gz -C \$bin
107
112
rm \$bin/tools\.tar\.gz && rm \$bin/juju1\.2\.3-precise-amd64\.sha256
108
113
printf %s '{"version":"1\.2\.3-precise-amd64","url":"http://foo\.com/tools/releases/juju1\.2\.3-precise-amd64\.tgz","sha256":"1234","size":10}' > \$bin/downloaded-tools\.txt
109
 
install -D -m 600 /dev/null '/etc/rsyslog\.d/25-juju\.conf'
 
114
install -D -m 644 /dev/null '/etc/rsyslog\.d/25-juju\.conf'
110
115
printf '%s\\n' '.*' > '/etc/rsyslog.d/25-juju.conf'
111
116
restart rsyslog
112
117
mkdir -p '/var/lib/juju/agents/machine-0'
163
168
                                Password: "bletch",
164
169
                                CACert:   []byte("CA CERT\n" + testing.CACert),
165
170
                        },
166
 
                        Constraints:         envConstraints,
167
 
                        DataDir:             environs.DataDir,
168
 
                        StateInfoURL:        "some-url",
169
 
                        SystemPrivateSSHKey: "private rsa key",
 
171
                        Constraints:             envConstraints,
 
172
                        DataDir:                 environs.DataDir,
 
173
                        LogDir:                  environs.LogDir,
 
174
                        CloudInitOutputLog:      environs.CloudInitOutputLog,
 
175
                        RsyslogConfPath:         environs.RsyslogConfPath,
 
176
                        StateInfoURL:            "some-url",
 
177
                        SystemPrivateSSHKey:     "private rsa key",
 
178
                        MachineAgentServiceName: "jujud-machine-0",
 
179
                        MongoServiceName:        "juju-db",
170
180
                },
171
181
                setEnvConfig: true,
172
182
                inexactMatch: true,
184
194
        }, {
185
195
                // non state server.
186
196
                cfg: cloudinit.MachineConfig{
187
 
                        MachineId:        "99",
188
 
                        AuthorizedKeys:   "sshkey1",
189
 
                        AgentEnvironment: map[string]string{agent.ProviderType: "dummy"},
190
 
                        DataDir:          environs.DataDir,
191
 
                        StateServer:      false,
192
 
                        Tools:            newSimpleTools("1.2.3-linux-amd64"),
193
 
                        MachineNonce:     "FAKE_NONCE",
 
197
                        MachineId:          "99",
 
198
                        AuthorizedKeys:     "sshkey1",
 
199
                        AgentEnvironment:   map[string]string{agent.ProviderType: "dummy"},
 
200
                        DataDir:            environs.DataDir,
 
201
                        LogDir:             environs.LogDir,
 
202
                        CloudInitOutputLog: environs.CloudInitOutputLog,
 
203
                        RsyslogConfPath:    environs.RsyslogConfPath,
 
204
                        StateServer:        false,
 
205
                        Tools:              newSimpleTools("1.2.3-linux-amd64"),
 
206
                        MachineNonce:       "FAKE_NONCE",
194
207
                        StateInfo: &state.Info{
195
208
                                Addrs:    []string{"state-addr.testing.invalid:12345"},
196
209
                                Tag:      "machine-99",
203
216
                                Password: "bletch",
204
217
                                CACert:   []byte("CA CERT\n" + testing.CACert),
205
218
                        },
206
 
                        SyslogPort: 514,
 
219
                        SyslogPort:              514,
 
220
                        MachineAgentServiceName: "jujud-machine-99",
207
221
                },
208
222
                expectScripts: `
209
223
set -xe
210
224
install -D -m 644 /dev/null '/var/lib/juju/nonce.txt'
211
225
printf '%s\\n' 'FAKE_NONCE' > '/var/lib/juju/nonce.txt'
212
226
test -e /proc/self/fd/9 \|\| exec 9>&2
213
 
grep -q '.juju-proxy' /home/ubuntu/.profile \|\| printf .* >> /home/ubuntu/.profile
 
227
\(\[ ! -e /home/ubuntu/\.profile \] \|\| grep -q '.juju-proxy' /home/ubuntu/.profile\) \|\| printf .* >> /home/ubuntu/.profile
214
228
mkdir -p /var/lib/juju
215
229
mkdir -p /var/log/juju
216
230
echo 'Fetching tools.*
222
236
tar zxf \$bin/tools.tar.gz -C \$bin
223
237
rm \$bin/tools\.tar\.gz && rm \$bin/juju1\.2\.3-linux-amd64\.sha256
224
238
printf %s '{"version":"1\.2\.3-linux-amd64","url":"http://foo\.com/tools/releases/juju1\.2\.3-linux-amd64\.tgz","sha256":"1234","size":10}' > \$bin/downloaded-tools\.txt
225
 
install -D -m 600 /dev/null '/etc/rsyslog\.d/25-juju\.conf'
 
239
install -D -m 644 /dev/null '/etc/rsyslog\.d/25-juju\.conf'
226
240
printf '%s\\n' '.*' > '/etc/rsyslog\.d/25-juju\.conf'
227
241
restart rsyslog
228
242
mkdir -p '/var/lib/juju/agents/machine-99'
243
257
                        AuthorizedKeys:       "sshkey1",
244
258
                        AgentEnvironment:     map[string]string{agent.ProviderType: "dummy"},
245
259
                        DataDir:              environs.DataDir,
 
260
                        LogDir:               environs.LogDir,
 
261
                        CloudInitOutputLog:   environs.CloudInitOutputLog,
 
262
                        RsyslogConfPath:      environs.RsyslogConfPath,
246
263
                        StateServer:          false,
247
264
                        Tools:                newSimpleTools("1.2.3-linux-amd64"),
248
265
                        MachineNonce:         "FAKE_NONCE",
258
275
                                Password: "bletch",
259
276
                                CACert:   []byte("CA CERT\n" + testing.CACert),
260
277
                        },
261
 
                        SyslogPort: 514,
 
278
                        SyslogPort:              514,
 
279
                        MachineAgentServiceName: "jujud-machine-2-lxc-1",
262
280
                },
263
281
                inexactMatch: true,
264
282
                expectScripts: `
276
294
        }, {
277
295
                // hostname verification disabled.
278
296
                cfg: cloudinit.MachineConfig{
279
 
                        MachineId:        "99",
280
 
                        AuthorizedKeys:   "sshkey1",
281
 
                        AgentEnvironment: map[string]string{agent.ProviderType: "dummy"},
282
 
                        DataDir:          environs.DataDir,
283
 
                        StateServer:      false,
284
 
                        Tools:            newSimpleTools("1.2.3-linux-amd64"),
285
 
                        MachineNonce:     "FAKE_NONCE",
 
297
                        MachineId:          "99",
 
298
                        AuthorizedKeys:     "sshkey1",
 
299
                        AgentEnvironment:   map[string]string{agent.ProviderType: "dummy"},
 
300
                        DataDir:            environs.DataDir,
 
301
                        LogDir:             environs.LogDir,
 
302
                        CloudInitOutputLog: environs.CloudInitOutputLog,
 
303
                        RsyslogConfPath:    environs.RsyslogConfPath,
 
304
                        StateServer:        false,
 
305
                        Tools:              newSimpleTools("1.2.3-linux-amd64"),
 
306
                        MachineNonce:       "FAKE_NONCE",
286
307
                        StateInfo: &state.Info{
287
308
                                Addrs:    []string{"state-addr.testing.invalid:12345"},
288
309
                                Tag:      "machine-99",
297
318
                        },
298
319
                        SyslogPort:                     514,
299
320
                        DisableSSLHostnameVerification: true,
 
321
                        MachineAgentServiceName:        "jujud-machine-99",
300
322
                },
301
323
                inexactMatch: true,
302
324
                expectScripts: `
325
347
                                Password: "bletch",
326
348
                                CACert:   []byte("CA CERT\n" + testing.CACert),
327
349
                        },
328
 
                        DataDir:             environs.DataDir,
329
 
                        StateInfoURL:        "some-url",
330
 
                        SystemPrivateSSHKey: "private rsa key",
 
350
                        DataDir:                 environs.DataDir,
 
351
                        LogDir:                  environs.LogDir,
 
352
                        CloudInitOutputLog:      environs.CloudInitOutputLog,
 
353
                        RsyslogConfPath:         environs.RsyslogConfPath,
 
354
                        StateInfoURL:            "some-url",
 
355
                        SystemPrivateSSHKey:     "private rsa key",
 
356
                        MachineAgentServiceName: "jujud-machine-0",
 
357
                        MongoServiceName:        "juju-db",
331
358
                },
332
359
                setEnvConfig: true,
333
360
                inexactMatch: true,
653
680
        {"missing var directory", func(cfg *cloudinit.MachineConfig) {
654
681
                cfg.DataDir = ""
655
682
        }},
 
683
        {"missing log directory", func(cfg *cloudinit.MachineConfig) {
 
684
                cfg.LogDir = ""
 
685
        }},
 
686
        {"missing cloud-init output log path", func(cfg *cloudinit.MachineConfig) {
 
687
                cfg.CloudInitOutputLog = ""
 
688
        }},
 
689
        {"missing rsyslog.d conf path", func(cfg *cloudinit.MachineConfig) {
 
690
                cfg.RsyslogConfPath = ""
 
691
        }},
656
692
        {"missing tools", func(cfg *cloudinit.MachineConfig) {
657
693
                cfg.Tools = nil
658
694
        }},
702
738
        {"missing machine nonce", func(cfg *cloudinit.MachineConfig) {
703
739
                cfg.MachineNonce = ""
704
740
        }},
 
741
        {"missing machine agent service name", func(cfg *cloudinit.MachineConfig) {
 
742
                cfg.MachineAgentServiceName = ""
 
743
        }},
 
744
        {"missing mongo service name", func(cfg *cloudinit.MachineConfig) {
 
745
                cfg.MongoServiceName = ""
 
746
        }},
705
747
}
706
748
 
707
749
// TestCloudInitVerify checks that required fields are appropriately
727
769
                        Addrs:  []string{"host:9999"},
728
770
                        CACert: []byte(testing.CACert),
729
771
                },
730
 
                Config:              minimalConfig(c),
731
 
                DataDir:             environs.DataDir,
732
 
                MachineNonce:        "FAKE_NONCE",
733
 
                SystemPrivateSSHKey: "private rsa key",
 
772
                Config:                  minimalConfig(c),
 
773
                DataDir:                 environs.DataDir,
 
774
                LogDir:                  environs.LogDir,
 
775
                CloudInitOutputLog:      environs.CloudInitOutputLog,
 
776
                RsyslogConfPath:         environs.RsyslogConfPath,
 
777
                MachineNonce:            "FAKE_NONCE",
 
778
                SystemPrivateSSHKey:     "private rsa key",
 
779
                MachineAgentServiceName: "jujud-machine-99",
 
780
                MongoServiceName:        "juju-db",
734
781
        }
735
782
        // check that the base configuration does not give an error
736
783
        ci := coreCloudinit.New()
800
847
        c.Assert(err, gc.IsNil)
801
848
 
802
849
        cmds := cloudcfg.RunCmds()
803
 
        first := `grep -q '.juju-proxy' /home/ubuntu/.profile || printf '\n# Added by juju\n[ -f "$HOME/.juju-proxy" ] && . "$HOME/.juju-proxy"\n' >> /home/ubuntu/.profile`
804
 
        second := `printf '%s\n' 'export http_proxy=http://user@10.0.0.1
805
 
export HTTP_PROXY=http://user@10.0.0.1' > /home/ubuntu/.juju-proxy && chown ubuntu:ubuntu /home/ubuntu/.juju-proxy`
 
850
        first := `([ ! -e /home/ubuntu/.profile ] || grep -q '.juju-proxy' /home/ubuntu/.profile) || printf '\n# Added by juju\n[ -f "$HOME/.juju-proxy" ] && . "$HOME/.juju-proxy"\n' >> /home/ubuntu/.profile`
 
851
        expected := []interface{}{
 
852
                `export http_proxy=http://user@10.0.0.1`,
 
853
                `export HTTP_PROXY=http://user@10.0.0.1`,
 
854
                `[ -e /home/ubuntu ] && (printf '%s\n' 'export http_proxy=http://user@10.0.0.1
 
855
export HTTP_PROXY=http://user@10.0.0.1' > /home/ubuntu/.juju-proxy && chown ubuntu:ubuntu /home/ubuntu/.juju-proxy)`,
 
856
        }
806
857
        found := false
807
858
        for i, cmd := range cmds {
808
859
                if cmd == first {
809
 
                        c.Assert(cmds[i+1], gc.Equals, second)
 
860
                        c.Assert(cmds[i+1:i+4], jc.DeepEquals, expected)
810
861
                        found = true
811
862
                        break
812
863
                }