Fix nil pointer dereference and minor refactor
Signed-off-by: LWJ <lwjames1996@gmail.com>
This commit is contained in:
parent
610bb14a2b
commit
d1cfabf793
|
@ -152,7 +152,7 @@ type SigningKey struct {
|
|||
// keypair as the value. It must be in the same namespace as the
|
||||
// ImageUpdateAutomation.
|
||||
// +required
|
||||
SecretRef *meta.LocalObjectReference `json:"secretRef,omitempty"`
|
||||
SecretRef meta.LocalObjectReference `json:"secretRef,omitempty"`
|
||||
}
|
||||
|
||||
const (
|
||||
|
|
|
@ -21,7 +21,6 @@ limitations under the License.
|
|||
package v1alpha1
|
||||
|
||||
import (
|
||||
"github.com/fluxcd/pkg/apis/meta"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
@ -32,7 +31,7 @@ func (in *CommitSpec) DeepCopyInto(out *CommitSpec) {
|
|||
if in.SigningKey != nil {
|
||||
in, out := &in.SigningKey, &out.SigningKey
|
||||
*out = new(SigningKey)
|
||||
(*in).DeepCopyInto(*out)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -198,11 +197,7 @@ func (in *PushSpec) DeepCopy() *PushSpec {
|
|||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||
func (in *SigningKey) DeepCopyInto(out *SigningKey) {
|
||||
*out = *in
|
||||
if in.SecretRef != nil {
|
||||
in, out := &in.SecretRef, &out.SecretRef
|
||||
*out = new(meta.LocalObjectReference)
|
||||
**out = **in
|
||||
}
|
||||
out.SecretRef = in.SecretRef
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SigningKey.
|
||||
|
|
|
@ -72,6 +72,8 @@ const defaultMessageTemplate = `Update from image update automation`
|
|||
const repoRefKey = ".spec.gitRepository"
|
||||
const imagePolicyKey = ".spec.update.imagePolicy"
|
||||
|
||||
const signingSecretKey = "git.asc"
|
||||
|
||||
// TemplateData is the type of the value given to the commit message
|
||||
// template.
|
||||
type TemplateData struct {
|
||||
|
@ -502,7 +504,7 @@ func (r *ImageUpdateAutomationReconciler) getSigningEntity(ctx context.Context,
|
|||
}
|
||||
|
||||
// get data from secret
|
||||
data, ok := secret.Data["git.asc"]
|
||||
data, ok := secret.Data[signingSecretKey]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("signing key secret '%s' does not contain a 'git.asc' key", secretName)
|
||||
}
|
||||
|
|
|
@ -463,6 +463,27 @@ Images:
|
|||
// made by automation.
|
||||
waitForNewHead(localRepo, branch)
|
||||
|
||||
// configure OpenPGP armor encoder
|
||||
b := bytes.NewBuffer(nil)
|
||||
w, err := armor.Encode(b, openpgp.PrivateKeyType, nil)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
|
||||
// serialize private key
|
||||
err = pgpEntity.SerializePrivate(w, nil)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
err = w.Close()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
|
||||
// create the secret containing signing key
|
||||
sec := &corev1.Secret{
|
||||
Data: map[string][]byte{
|
||||
"git.asc": b.Bytes(),
|
||||
},
|
||||
}
|
||||
sec.Name = "signing-key-secret-" + randStringRunes(5)
|
||||
sec.Namespace = namespace.Name
|
||||
Expect(k8sClient.Create(context.Background(), sec)).To(Succeed())
|
||||
|
||||
// now create the automation object, and let it (one
|
||||
// hopes!) make a commit itself.
|
||||
updateKey := types.NamespacedName{
|
||||
|
@ -486,33 +507,13 @@ Images:
|
|||
Strategy: imagev1.UpdateStrategySetters,
|
||||
},
|
||||
Commit: imagev1.CommitSpec{
|
||||
SigningKey: &imagev1.SigningKey{},
|
||||
SigningKey: &imagev1.SigningKey{
|
||||
SecretRef: meta.LocalObjectReference{Name: sec.Name},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
// configure OpenPGP armor encoder
|
||||
b := bytes.NewBuffer(nil)
|
||||
w, err := armor.Encode(b, openpgp.PrivateKeyType, nil)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
|
||||
// serialize private key
|
||||
err = pgpEntity.SerializePrivate(w, nil)
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
err = w.Close()
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
|
||||
// create the secret containing signing key
|
||||
sec := &corev1.Secret{
|
||||
Data: map[string][]byte{
|
||||
"git.asc": b.Bytes(),
|
||||
},
|
||||
}
|
||||
sec.Name = "signing-key-secret-" + randStringRunes(5)
|
||||
sec.Namespace = namespace.Name
|
||||
Expect(k8sClient.Create(context.Background(), sec)).To(Succeed())
|
||||
updateBySetters.Spec.Commit.SigningKey.SecretRef = &meta.LocalObjectReference{Name: sec.Name}
|
||||
|
||||
Expect(k8sClient.Create(context.Background(), updateBySetters)).To(Succeed())
|
||||
// wait for a new commit to be made by the controller
|
||||
waitForNewHead(localRepo, branch)
|
||||
|
|
Loading…
Reference in New Issue