ansible uri replace + sign with space in body or jenkins api replace it, who has issue?

Lafada asked:

I am using jenkins api to create credential by ansible.

- name: Add credential to add node
  uri:
      body: |
          json={
              "": "0",
              "credentials": {
                "scope": "GLOBAL",
                "id": "jenkins_linux_slave1_auth",
                "username": "jenkins",
                "password": "123456",
                "privateKeySource": {
                  "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey$DirectEntryPrivateKeySource",
                  "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nPRIVATE+KEY+WITH+PLUS+SIGN\n-----END RSA PRIVATE KEY-----"
                },
                "description": "Jenkins Linux Slave1 Authentication",
                "stapler-class": "com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey"
              }
            }
      force_basic_auth: yes
      method: POST
      password: "{{ jenkins_user_token }}"
      status_code: 302
      url: "{{ jenkins_url }}/credentials/store/system/domain/_/createCredentials"
      user: "{{ jenkins_user }}"
      validate_certs: no
  tags:
      - credential

This create credential in jenkins, but when I check the private key in jenkins, it replace + with (space)

Replace + with Space

My answer:


The Jenkins API accepts normal URL encoded form data, but usually with only one field, named json.

The Ansible uri module does not URL encode the body when sending normal URL encoded form data. You need to do this yourself.


View the full question and any other answers on Server Fault.

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.