Skip to content

Commit

Permalink
WIP: add hasChange to fields. Fixes broken NPE for bower in 6.9+
Browse files Browse the repository at this point in the history
  • Loading branch information
Dillon Giacoppo committed May 20, 2019
1 parent 9095048 commit 02ba9d6
Show file tree
Hide file tree
Showing 9 changed files with 105 additions and 104 deletions.
12 changes: 6 additions & 6 deletions pkg/artifactory/resource_artifactory_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@ func unmarshalGroup(s *schema.ResourceData) (*v1.Group, error) {

group := new(v1.Group)

group.Name = d.getStringRef("name")
group.Description = d.getStringRef("description")
group.AutoJoin = d.getBoolRef("auto_join")
group.AdminPrivileges = d.getBoolRef("admin_privileges")
group.Realm = d.getStringRef("realm")
group.RealmAttributes = d.getStringRef("realm_attributes")
group.Name = d.getStringRef("name", false)
group.Description = d.getStringRef("description", false)
group.AutoJoin = d.getBoolRef("auto_join", false)
group.AdminPrivileges = d.getBoolRef("admin_privileges", false)
group.Realm = d.getStringRef("realm", false)
group.RealmAttributes = d.getStringRef("realm_attributes", false)

// Validator
if group.AdminPrivileges != nil && group.AutoJoin != nil && *group.AdminPrivileges && *group.AutoJoin {
Expand Down
44 changes: 22 additions & 22 deletions pkg/artifactory/resource_artifactory_local_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,29 +144,29 @@ func unmarshalLocalRepository(s *schema.ResourceData) *v1.LocalRepository {

repo.RClass = artifactory.String("local")

repo.Key = d.getStringRef("key")
repo.PackageType = d.getStringRef("package_type")
repo.Description = d.getStringRef("description")
repo.Notes = d.getStringRef("notes")
repo.DebianTrivialLayout = d.getBoolRef("debian_trivial_layout")
repo.IncludesPattern = d.getStringRef("includes_pattern")
repo.ExcludesPattern = d.getStringRef("excludes_pattern")
repo.RepoLayoutRef = d.getStringRef("repo_layout_ref")
repo.MaxUniqueTags = d.getIntRef("max_unique_tags")
repo.BlackedOut = d.getBoolRef("blacked_out")
repo.CalculateYumMetadata = d.getBoolRef("calculate_yum_metadata")
repo.YumRootDepth = d.getIntRef("yum_root_depth")
repo.ArchiveBrowsingEnabled = d.getBoolRef("archive_browsing_enabled")
repo.DockerApiVersion = d.getStringRef("docker_api_verision")
repo.EnableFileListsIndexing = d.getBoolRef("enable_file_lists_indexing")
repo.Key = d.getStringRef("key", false)
repo.PackageType = d.getStringRef("package_type", false)
repo.Description = d.getStringRef("description", false)
repo.Notes = d.getStringRef("notes", false)
repo.DebianTrivialLayout = d.getBoolRef("debian_trivial_layout", false)
repo.IncludesPattern = d.getStringRef("includes_pattern", false)
repo.ExcludesPattern = d.getStringRef("excludes_pattern", false)
repo.RepoLayoutRef = d.getStringRef("repo_layout_ref", false)
repo.MaxUniqueTags = d.getIntRef("max_unique_tags", false)
repo.BlackedOut = d.getBoolRef("blacked_out", false)
repo.CalculateYumMetadata = d.getBoolRef("calculate_yum_metadata", false)
repo.YumRootDepth = d.getIntRef("yum_root_depth", false)
repo.ArchiveBrowsingEnabled = d.getBoolRef("archive_browsing_enabled", false)
repo.DockerApiVersion = d.getStringRef("docker_api_verision", false)
repo.EnableFileListsIndexing = d.getBoolRef("enable_file_lists_indexing", false)
repo.PropertySets = d.getSetRef("property_sets")
repo.HandleReleases = d.getBoolRef("handle_releases")
repo.HandleSnapshots = d.getBoolRef("handle_snapshots")
repo.ChecksumPolicyType = d.getStringRef("checksum_policy_type")
repo.MaxUniqueSnapshots = d.getIntRef("max_unique_snapshots")
repo.SnapshotVersionBehavior = d.getStringRef("snapshot_version_behavior")
repo.SuppressPomConsistencyChecks = d.getBoolRef("suppress_pom_consistency_checks")
repo.XrayIndex = d.getBoolRef("xray_index")
repo.HandleReleases = d.getBoolRef("handle_releases", false)
repo.HandleSnapshots = d.getBoolRef("handle_snapshots", false)
repo.ChecksumPolicyType = d.getStringRef("checksum_policy_type", false)
repo.MaxUniqueSnapshots = d.getIntRef("max_unique_snapshots", false)
repo.SnapshotVersionBehavior = d.getStringRef("snapshot_version_behavior", false)
repo.SuppressPomConsistencyChecks = d.getBoolRef("suppress_pom_consistency_checks", false)
repo.XrayIndex = d.getBoolRef("xray_index", false)

return repo
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/artifactory/resource_artifactory_permission_target.go
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ func unpackPermissionTarget(s *schema.ResourceData) *v2.PermissionTarget {

pTarget := new(v2.PermissionTarget)

pTarget.Name = d.getStringRef("name")
pTarget.Name = d.getStringRef("name", false)

if v, ok := d.GetOk("repo"); ok {
pTarget.Repo = unpackPermission(v)
Expand Down
6 changes: 3 additions & 3 deletions pkg/artifactory/resource_artifactory_permission_targets_v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ func unpackPermissionTargetV1(s *schema.ResourceData) *v1.PermissionTargets {

pt := new(v1.PermissionTargets)

pt.Name = d.getStringRef("name")
pt.IncludesPattern = d.getStringRef("includes_pattern")
pt.ExcludesPattern = d.getStringRef("excludes_pattern")
pt.Name = d.getStringRef("name", false)
pt.IncludesPattern = d.getStringRef("includes_pattern", false)
pt.ExcludesPattern = d.getStringRef("excludes_pattern", false)
pt.Repositories = d.getSetRef("repositories")

if v, ok := d.GetOkExists("users"); ok {
Expand Down
91 changes: 46 additions & 45 deletions pkg/artifactory/resource_artifactory_remote_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,52 +285,53 @@ func unpackRemoteRepo(s *schema.ResourceData) *v1.RemoteRepository {
d := &ResourceData{s}
repo := new(v1.RemoteRepository)

repo.RemoteRepoChecksumPolicyType = d.getStringRef("remote_repo_checksum_policy_type")
repo.AllowAnyHostAuth = d.getBoolRef("allow_any_host_auth")
repo.BlackedOut = d.getBoolRef("blacked_out")
repo.BlockMismatchingMimeTypes = d.getBoolRef("block_mismatching_mime_types")
repo.BowerRegistryURL = d.getStringRef("bower_registry_url")
repo.BypassHeadRequests = d.getBoolRef("bypass_head_requests")
repo.ClientTLSCertificate = d.getStringRef("client_tls_certificate")
repo.Description = d.getStringRef("description")
repo.EnableCookieManagement = d.getBoolRef("enable_cookie_management")
repo.EnableTokenAuthentication = d.getBoolRef("enable_token_authentication")
repo.ExcludesPattern = d.getStringRef("excludes_pattern")
repo.FetchJarsEagerly = d.getBoolRef("fetch_jars_eagerly")
repo.FetchSourcesEagerly = d.getBoolRef("fetch_sources_eagerly")
repo.HandleReleases = d.getBoolRef("handle_releases")
repo.HandleSnapshots = d.getBoolRef("handle_snapshots")
repo.HardFail = d.getBoolRef("hard_fail")
repo.IncludesPattern = d.getStringRef("includes_pattern")
repo.Key = d.getStringRef("key")
repo.LocalAddress = d.getStringRef("local_address")
repo.MaxUniqueSnapshots = d.getIntRef("max_unique_snapshots")
repo.MissedRetrievalCachePeriodSecs = d.getIntRef("missed_cache_period_seconds")
repo.Notes = d.getStringRef("notes")
repo.Offline = d.getBoolRef("offline")
repo.PackageType = d.getStringRef("package_type")
repo.Password = d.getStringRef("password")
repo.PropertySets = d.getSetRef("property_sets")
repo.Proxy = d.getStringRef("proxy")
repo.PyPiRegistryUrl = d.getStringRef("pypi_registry_url")
repo.Key = d.getStringRef("key", false)
repo.RClass = artifactory.String("remote")
repo.RepoLayoutRef = d.getStringRef("repo_layout_ref")
repo.RetrievalCachePeriodSecs = d.getIntRef("retrieval_cache_period_seconds")
repo.ShareConfiguration = d.getBoolRef("share_configuration")
repo.SocketTimeoutMillis = d.getIntRef("socket_timeout_millis")
repo.StoreArtifactsLocally = d.getBoolRef("store_artifacts_locally")
repo.SuppressPomConsistencyChecks = d.getBoolRef("suppress_pom_consistency_checks")
repo.SynchronizeProperties = d.getBoolRef("synchronize_properties")
repo.UnusedArtifactsCleanupPeriodHours = d.getIntRef("unused_artifacts_cleanup_period_hours")
repo.Url = d.getStringRef("url")
repo.Username = d.getStringRef("username")
repo.VcsGitDownloadUrl = d.getStringRef("vcs_git_download_url")
repo.VcsGitProvider = d.getStringRef("vcs_git_provider")
repo.VcsType = d.getStringRef("vcs_type")
repo.XrayIndex = d.getBoolRef("xray_index")
repo.FeedContextPath = d.getStringRef("feed_context_path")
repo.DownloadContextPath = d.getStringRef("download_context_path")
repo.V3FeedUrl = d.getStringRef("v3_feed_url")

repo.RemoteRepoChecksumPolicyType = d.getStringRef("remote_repo_checksum_policy_type", true)
repo.AllowAnyHostAuth = d.getBoolRef("allow_any_host_auth", true)
repo.BlackedOut = d.getBoolRef("blacked_out", true)
repo.BlockMismatchingMimeTypes = d.getBoolRef("block_mismatching_mime_types", true)
repo.BowerRegistryURL = d.getStringRef("bower_registry_url", true)
repo.BypassHeadRequests = d.getBoolRef("bypass_head_requests", true)
repo.ClientTLSCertificate = d.getStringRef("client_tls_certificate", true)
repo.Description = d.getStringRef("description", true)
repo.EnableCookieManagement = d.getBoolRef("enable_cookie_management", true)
repo.EnableTokenAuthentication = d.getBoolRef("enable_token_authentication", true)
repo.ExcludesPattern = d.getStringRef("excludes_pattern", true)
repo.FetchJarsEagerly = d.getBoolRef("fetch_jars_eagerly", true)
repo.FetchSourcesEagerly = d.getBoolRef("fetch_sources_eagerly", true)
repo.HandleReleases = d.getBoolRef("handle_releases", true)
repo.HandleSnapshots = d.getBoolRef("handle_snapshots", true)
repo.HardFail = d.getBoolRef("hard_fail", true)
repo.IncludesPattern = d.getStringRef("includes_pattern", true)
repo.LocalAddress = d.getStringRef("local_address", true)
repo.MaxUniqueSnapshots = d.getIntRef("max_unique_snapshots", true)
repo.MissedRetrievalCachePeriodSecs = d.getIntRef("missed_cache_period_seconds", true)
repo.Notes = d.getStringRef("notes", true)
repo.Offline = d.getBoolRef("offline", true)
repo.PackageType = d.getStringRef("package_type", true)
repo.Password = d.getStringRef("password", true)
repo.PropertySets = d.getSetRef("property_sets")
repo.Proxy = d.getStringRef("proxy", true)
repo.PyPiRegistryUrl = d.getStringRef("pypi_registry_url", true)
repo.RepoLayoutRef = d.getStringRef("repo_layout_ref", true)
repo.RetrievalCachePeriodSecs = d.getIntRef("retrieval_cache_period_seconds", true)
repo.ShareConfiguration = d.getBoolRef("share_configuration", true)
repo.SocketTimeoutMillis = d.getIntRef("socket_timeout_millis", true)
repo.StoreArtifactsLocally = d.getBoolRef("store_artifacts_locally", true)
repo.SuppressPomConsistencyChecks = d.getBoolRef("suppress_pom_consistency_checks", true)
repo.SynchronizeProperties = d.getBoolRef("synchronize_properties", true)
repo.UnusedArtifactsCleanupPeriodHours = d.getIntRef("unused_artifacts_cleanup_period_hours", true)
repo.Url = d.getStringRef("url", true)
repo.Username = d.getStringRef("username", true)
repo.VcsGitDownloadUrl = d.getStringRef("vcs_git_download_url", true)
repo.VcsGitProvider = d.getStringRef("vcs_git_provider", true)
repo.VcsType = d.getStringRef("vcs_type", true)
repo.XrayIndex = d.getBoolRef("xray_index", true)
repo.FeedContextPath = d.getStringRef("feed_context_path", true)
repo.DownloadContextPath = d.getStringRef("download_context_path", true)
repo.V3FeedUrl = d.getStringRef("v3_feed_url", true)
if v, ok := d.GetOk("nuget"); ok {
nugetConfig := v.([]interface{})[0].(map[string]interface{})
feedContextPath := nugetConfig["feed_context_path"].(string)
Expand Down
6 changes: 3 additions & 3 deletions pkg/artifactory/resource_artifactory_replication_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ func unpackReplicationConfig(s *schema.ResourceData) *v1.ReplicationConfig {
d := &ResourceData{s}
replicationConfig := new(v1.ReplicationConfig)

repo := d.getStringRef("repo_key")
repo := d.getStringRef("repo_key", false)

if v, ok := d.GetOkExists("replications"); ok {
arr := v.([]interface{})
Expand All @@ -107,8 +107,8 @@ func unpackReplicationConfig(s *schema.ResourceData) *v1.ReplicationConfig {
for i, o := range arr {
if i == 0 {
replicationConfig.RepoKey = repo
replicationConfig.CronExp = d.getStringRef("cron_exp")
replicationConfig.EnableEventReplication = d.getBoolRef("enable_event_replication")
replicationConfig.CronExp = d.getStringRef("cron_exp", false)
replicationConfig.EnableEventReplication = d.getBoolRef("enable_event_replication", false)
}

m := o.(map[string]interface{})
Expand Down
12 changes: 6 additions & 6 deletions pkg/artifactory/resource_artifactory_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,12 @@ func unpackUser(s *schema.ResourceData) *v1.User {
d := &ResourceData{s}
user := new(v1.User)

user.Name = d.getStringRef("name")
user.Email = d.getStringRef("email")
user.Admin = d.getBoolRef("admin")
user.ProfileUpdatable = d.getBoolRef("profile_updatable")
user.DisableUIAccess = d.getBoolRef("disable_ui_access")
user.InternalPasswordDisabled = d.getBoolRef("internal_password_disabled")
user.Name = d.getStringRef("name", false)
user.Email = d.getStringRef("email", false)
user.Admin = d.getBoolRef("admin", false)
user.ProfileUpdatable = d.getBoolRef("profile_updatable", false)
user.DisableUIAccess = d.getBoolRef("disable_ui_access", false)
user.InternalPasswordDisabled = d.getBoolRef("internal_password_disabled", false)
user.Groups = d.getSetRef("groups")

return user
Expand Down
24 changes: 12 additions & 12 deletions pkg/artifactory/resource_artifactory_virtual_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,20 +88,20 @@ func unpackVirtualRepository(s *schema.ResourceData) *v1.VirtualRepository {
d := &ResourceData{s}
repo := new(v1.VirtualRepository)

repo.Key = d.getStringRef("key")
repo.Key = d.getStringRef("key", false)
repo.RClass = artifactory.String("virtual")
repo.PackageType = d.getStringRef("package_type")
repo.IncludesPattern = d.getStringRef("includes_pattern")
repo.ExcludesPattern = d.getStringRef("excludes_pattern")
repo.RepoLayoutRef = d.getStringRef("repo_layout_ref")
repo.DebianTrivialLayout = d.getBoolRef("debian_trivial_layout")
repo.ArtifactoryRequestsCanRetrieveRemoteArtifacts = d.getBoolRef("artifactory_requests_can_retrieve_remote_artifacts")
repo.PackageType = d.getStringRef("package_type", false)
repo.IncludesPattern = d.getStringRef("includes_pattern", false)
repo.ExcludesPattern = d.getStringRef("excludes_pattern", false)
repo.RepoLayoutRef = d.getStringRef("repo_layout_ref", false)
repo.DebianTrivialLayout = d.getBoolRef("debian_trivial_layout", false)
repo.ArtifactoryRequestsCanRetrieveRemoteArtifacts = d.getBoolRef("artifactory_requests_can_retrieve_remote_artifacts", false)
repo.Repositories = d.getListRef("repositories")
repo.Description = d.getStringRef("description")
repo.Notes = d.getStringRef("notes")
repo.KeyPair = d.getStringRef("key_pair")
repo.PomRepositoryReferencesCleanupPolicy = d.getStringRef("pom_repository_references_cleanup_policy")
repo.DefaultDeploymentRepo = d.getStringRef("default_deployment_repo")
repo.Description = d.getStringRef("description", false)
repo.Notes = d.getStringRef("notes", false)
repo.KeyPair = d.getStringRef("key_pair", false)
repo.PomRepositoryReferencesCleanupPolicy = d.getStringRef("pom_repository_references_cleanup_policy", false)
repo.DefaultDeploymentRepo = d.getStringRef("default_deployment_repo", false)

return repo
}
Expand Down
12 changes: 6 additions & 6 deletions pkg/artifactory/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,22 @@ import (

type ResourceData struct{ *schema.ResourceData }

func (d *ResourceData) getStringRef(key string) *string {
if v, ok := d.GetOkExists(key); ok {
func (d *ResourceData) getStringRef(key string, onlyIfChanged bool) *string {
if v, ok := d.GetOkExists(key); ok && (!onlyIfChanged || d.HasChange(key)) {
return artifactory.String(v.(string))
}
return nil
}

func (d *ResourceData) getBoolRef(key string) *bool {
if v, ok := d.GetOkExists(key); ok {
func (d *ResourceData) getBoolRef(key string, onlyIfChanged bool) *bool {
if v, ok := d.GetOkExists(key); ok && (!onlyIfChanged || d.HasChange(key)) {
return artifactory.Bool(v.(bool))
}
return nil
}

func (d *ResourceData) getIntRef(key string) *int {
if v, ok := d.GetOkExists(key); ok {
func (d *ResourceData) getIntRef(key string, onlyIfChanged bool) *int {
if v, ok := d.GetOkExists(key); ok && (!onlyIfChanged || d.HasChange(key)) {
return artifactory.Int(v.(int))
}
return nil
Expand Down

0 comments on commit 02ba9d6

Please sign in to comment.