github / github/octocatalog-diff

CompilationDir filter doesn't support string parameters with multiple compilation dir appearance

Open
#188 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Ruby
Stars
252
Forks
95
PR merge metrics
No merged PRs in 30d

Description

> Description of problem

When using parameters values that are strings containing multiple references to the compilation dir (ie using `$::settings::codedir` for instance), the `CompilationDir` filter is unable to detect that the parameters are strictly equivalent.

For instance the following resource:

~~~puppet
exec { 'sign cert':
command => "openssl x509 -req -in ${user}.csr -CA ${settings::localcacert} -CAkey ${settings::cakey} -CAcreateserial -out ${user}.pem -days ${days}",
...
}
~~~

will produce the following diff:

~~~
Exec[sign cert] =>
parameters =>
command =>
- openssl x509 -req -in user.csr -CA /tmp/ocd-ipc-20180605-856-t3sswg/ocd-builddir-20180605-858-e8z4wo/var/ssl/certs/ca.pem -CAkey /tmp/ocd-ipc-20180605-856-t3sswg/ocd-builddir-20180605-858-e8z4wo/var/ssl/ca/ca_key.pem -CAcreateserial -out user.pem -days 365
+ openssl x509 -req -in user.csr -CA /tmp/ocd-ipc-20180605-856-t3sswg/ocd-builddir-20180605-861-awzqbm/var/ssl/certs/ca.pem -CAkey /tmp/ocd-ipc-20180605-856-t3sswg/ocd-builddir-20180605-861-awzqbm/var/ssl/ca/ca_key.pem -CAcreateserial -out user.pem -days 365
~~~

> Command used and debugging output

~~~
octocatalog-diff --fact-file /repo/ci/facts/ubuntu.yaml --from-fact-override "role=tower" --to-fact-override "role=tower" --bootstrap-environment "V=0,SSH_AUTH_SOCK=/ssh-agent/ssh-agent.sock" --compare-file-text --filters CompilationDir --display-detail-add --debug
~~~

> Platform and version information

- Your OS: ubuntu 16.04
- Your Ruby version: 2.3.1
- Your version of Puppet: 5.5.0
- Your version of octocatalog-diff: 1.5.3

The problem comes from the fact that the `CompilationDir` only checks for the presence of one compilation dir path in the parameter value.
I think this would be more effective to replace all from and to compilation dir in the string by a placeholder and then just do string equality comparison instead of trying to split the string around the presence of the compilation dir prefix as it is now.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.