ansible-container icon indicating copy to clipboard operation
ansible-container copied to clipboard

Wrong templating behavior with pseudo boolean values

Open jbrinksmeier opened this issue 7 years ago • 3 comments

ISSUE TYPE
  • Bug Report
container.yml
version: "2"
settings:
  conductor_base: centos:7

services:
  test:
    from: centos:7
    command: ['/usr/bin/tail', '-f', '/dev/null']
    roles:
      - role: some-template
        file_path: '/root/my-template.conf'
        my_var: 'on'
OS / ENVIRONMENT
Ansible Container, version 0.9.1
Linux, jojo-ThinkPad-T530, 4.4.0-83-generic, #106-Ubuntu SMP Mon Jun 26 17:54:43 UTC 2017, x86_64
2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] /usr/bin/python
{
  "ContainersPaused": 0, 
  "Labels": null, 
  "CgroupDriver": "cgroupfs", 
  "ContainersRunning": 1, 
  "ContainerdCommit": {
    "Expected": "4ab9917febca54791c5f071a9d1f404867857fcc", 
    "ID": "4ab9917febca54791c5f071a9d1f404867857fcc"
  }, 
  "InitBinary": "docker-init", 
  "NGoroutines": 29, 
  "Swarm": {
    "Managers": 0, 
    "ControlAvailable": false, 
    "NodeID": "", 
    "Cluster": {
      "Spec": {
        "TaskDefaults": {}, 
        "Orchestration": {}, 
        "EncryptionConfig": {
          "AutoLockManagers": false
        }, 
        "Raft": {
          "HeartbeatTick": 0, 
          "ElectionTick": 0
        }, 
        "CAConfig": {}, 
        "Dispatcher": {}
      }, 
      "Version": {}, 
      "ID": "", 
      "CreatedAt": "0001-01-01T00:00:00Z", 
      "UpdatedAt": "0001-01-01T00:00:00Z"
    }, 
    "Nodes": 0, 
    "Error": "", 
    "RemoteManagers": null, 
    "LocalNodeState": "inactive", 
    "NodeAddr": ""
  }, 
  "LoggingDriver": "json-file", 
  "OSType": "linux", 
  "HttpProxy": "", 
  "Runtimes": {
    "runc": {
      "path": "docker-runc"
    }
  }, 
  "DriverStatus": [
    [
      "Root Dir", 
      "/var/lib/docker/aufs"
    ], 
    [
      "Backing Filesystem", 
      "extfs"
    ], 
    [
      "Dirs", 
      "226"
    ], 
    [
      "Dirperm1 Supported", 
      "true"
    ]
  ], 
  "OperatingSystem": "Ubuntu 16.04.2 LTS", 
  "Containers": 11, 
  "HttpsProxy": "", 
  "BridgeNfIp6tables": true, 
  "MemTotal": 16513073152, 
  "SecurityOptions": [
    "name=apparmor", 
    "name=seccomp,profile=default"
  ], 
  "Driver": "aufs", 
  "IndexServerAddress": "https://index.docker.io/v1/", 
  "ClusterStore": "", 
  "InitCommit": {
    "Expected": "949e6fa", 
    "ID": "949e6fa"
  }, 
  "Isolation": "", 
  "SystemStatus": null, 
  "OomKillDisable": true, 
  "ClusterAdvertise": "", 
  "SystemTime": "2017-07-25T17:17:41.126206236+02:00", 
  "Name": "jojo-ThinkPad-T530", 
  "CPUSet": true, 
  "RegistryConfig": {
    "InsecureRegistryCIDRs": [
      "127.0.0.0/8"
    ], 
    "IndexConfigs": {
      "docker.io": {
        "Official": true, 
        "Name": "docker.io", 
        "Secure": true, 
        "Mirrors": null
      }
    }, 
    "Mirrors": []
  }, 
  "DefaultRuntime": "runc", 
  "ContainersStopped": 10, 
  "NCPU": 8, 
  "NFd": 23, 
  "Architecture": "x86_64", 
  "KernelMemory": true, 
  "CpuCfsQuota": true, 
  "Debug": false, 
  "ID": "DZIR:Q5FC:P4K3:7V5P:HH3F:LFVZ:XHHS:6PFL:3KPX:WXZZ:BKNQ:NWT6", 
  "IPv4Forwarding": true, 
  "KernelVersion": "4.4.0-83-generic", 
  "BridgeNfIptables": true, 
  "NoProxy": "", 
  "LiveRestoreEnabled": false, 
  "ServerVersion": "17.03.2-ce", 
  "CpuCfsPeriod": true, 
  "ExperimentalBuild": false, 
  "MemoryLimit": true, 
  "SwapLimit": false, 
  "Plugins": {
    "Volume": [
      "local"
    ], 
    "Network": [
      "bridge", 
      "host", 
      "macvlan", 
      "null", 
      "overlay"
    ], 
    "Authorization": null
  }, 
  "Images": 233, 
  "DockerRootDir": "/var/lib/docker", 
  "NEventsListener": 0, 
  "CPUShares": true, 
  "RuncCommit": {
    "Expected": "54296cf40ad8143b62dbcaa1d90e520a2136ddfe", 
    "ID": "54296cf40ad8143b62dbcaa1d90e520a2136ddfe"
  }
}
{
  "KernelVersion": "4.4.0-83-generic", 
  "Arch": "amd64", 
  "BuildTime": "2017-06-27T03:35:14.394387481+00:00", 
  "ApiVersion": "1.27", 
  "Version": "17.03.2-ce", 
  "MinAPIVersion": "1.12", 
  "GitCommit": "f5ec1e2", 
  "Os": "linux", 
  "GoVersion": "go1.7.5"
}
SUMMARY

I want to fill values to a container's file. The values are on/off as strings and get parsed to True/False when running the template task.

STEPS TO REPRODUCE

I setup a minimum reproducible example here: https://github.com/jbrinksmeier/ac-template-bug

git clone [email protected]:jbrinksmeier/ac-template-bug.git

cd ac-template-bug

ansible-container build

ansible-container run

docker exec -it actemplatebug_test_1 cat /root/my-template.conf
EXPECTED RESULTS

Should echo on

ACTUAL RESULTS

Echos True

jbrinksmeier avatar Jul 25 '17 15:07 jbrinksmeier

@jbrinksmeier

Thanks for using Ansible Container, and for taking the time to share your feedback.

We use Templar from Ansible to apply templates, see config.py.

I believe, and I could be wrong, that the true and false string values defined in Ansible are defined here: https://github.com/ansible/ansible/blob/devel/lib/ansible/plugins/action/set_fact.py#L48 There are only 4 values: 'true', 'false', 'yes', 'no'.

If you're proposing a change, I would say that Ansible Container should adopt Ansible's behavior, and only support the same 4 values.

chouseknecht avatar Jul 25 '17 15:07 chouseknecht

actually, ansible 2.3 accepts string values, I may pass 'on' as well as 'true' and get the desired values in the resulting files. Maybe that changed in 2.4, don't know.

I think that we should at least be able to force a string value, using

my_var: !!str 'on'

for example as suggested here: https://github.com/ansible/ansible/issues/11905#issuecomment-287879064

jbrinksmeier avatar Jul 25 '17 16:07 jbrinksmeier

I hit this issue as well. Ansible 2.7. my_var: on is converted during the playbook run to true.

When updated my_var: "on" variable is working as expected.

sradco avatar Mar 19 '19 22:03 sradco