0

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

Nilesh
  • 255
  • 1
  • 6
  • 17

1 Answers1

3

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.

Michael Hampton
  • 237,123
  • 42
  • 477
  • 940