Создание учетных данных с помощью Ansible Tower REST API - PullRequest
0 голосов
/ 15 ноября 2018

В моей Ansible Tower у меня есть пользовательские учетные данные под именем Token, в которых мы храним atoken, чтобы при использовании этих учетных данных нам не приходилось входить в систему и использовать эти учетные данные в различных заданиях.

Ниже обязательные поля -

Имя:

Тип учетных данных: (где мы выбираем этот пользовательский тип учетных данных)

Значение API-токена: (где токен вводится и также обозначается как дополнительная переменная my_token)

Ниже приведен файл yml, который я использую для выполнения необходимых действий -

—-

   Required info

   tasks:

      - name: Create credential

         uri:

             url: “https://ans........../api/v1/credentials/“

             method: “POST”

             kind: SecureCloud

             name: Token

             body:

                  extra_vars:

                      my_token: “{ key }”

             body_format: json

Я не совсем понимаю, как вводить значения полей «Имя» и «Типы учетных данных» в вышеприведенной книге. Нужно ли мне при этом делать какие-либо другие поля? Также правильный URL в модуле uri?

1 Ответ

0 голосов
/ 17 ноября 2018

Существует два способа создания пользовательских учетных данных (я предпочитаю второй):

Первый вариант: ваш подход - модуль URI

- name: Create Custom Credential
  uri:
    url: "https://endpoint/api/v2/credentials/"
    method: POST
    user: admin
    password: password
    headers:
      Content-Type: "application/json"
    body: '{"name":"myfirsttoken","description":"","organization":34,"credential_type":34,"inputs":{"token":"MyToken"}}'
    force_basic_auth: true
    validate_certs: false
    status_code: 200, 201
  no_log: false

Нобудьте осторожны, потому что это не идемпотент, и вы должны выполнить GET Credentials. Сначала введите method: GET, зарегистрируйте свои результаты и найдите свои учетные данные в переменной register.json.results.

Второй вариант: My PreferredПодход - tower-cli

Вы можете сделать то же самое, проще и идемпотентно с:

- name: Add Custom Credential
  command: tower-cli credential create --name="{{ item }}" --credential-type "{{ credential_type }}" --inputs "{'token':'123456'}" -h endpoint -u admin -p password --organization Default
  no_log: true
  with_items:
    - MyCustomToken

Вы получите что-то вроде:

== ============= =============== 
id name          credential_type 
== ============= =============== 
46 MyCustomToken              34
== ============= =============== 

Круто то, что вы можете полностью автоматизировать свои токены и даже автоматически сгенерировать их с помощью:

token: "{{ lookup('password', '/dev/null length=20 chars=ascii_letters,digits') }}"

А затем:

---
- name: Create Custom Credential Token
  hosts: localhost
  connection: local
  gather_facts: false

  vars:

    token: "{{ lookup('password', '/dev/null length=20 chars=ascii_letters,digits') }}"
    credential_type: MyCustom

  tasks:

    - name: Create Credential Type
      tower_credential_type:
        name: "{{ credential_type }}"
        description: Custom Credentials type
        kind: cloud
        inputs: {"fields":[{"secret":true,"type":"string","id":"token","label":"token"}],"required":["token"]}
        state: present
        tower_verify_ssl: false
        tower_host: endpoint
        tower_username: admin
        tower_password: password

    - name: Add Custom Credential
      command: tower-cli credential create --name="{{ item }}" --credential-type "{{ credential_type }}" --inputs "{'token':'{{ token }}'}" -h endpoint -u admin -p password --organization Default
      no_log: true
      with_items:
        - MyCustomToken
...