2017-01-16 4 views
2

Я пытаюсь использовать REST API by Barracuda ADC and/or WAF и, в то время как она работает, когда я использую Curl (из документации):Использование API Barracuda REST с анзибль - маркер аутентификации не работает

Запрос:

$ curl 
-X POST \ 
-H "Content-Type:application/json" \ 
-d '{"username": "admin", "password": "admin"}' \ http://10.11.19.104:8000/restapi/v2/login 

Ответ:

{ "маркер": "eyJldCI6IjEzODAyMzE3NTciLCJwYXNzd29yZCI6ImY3NzY2ZTFmNTgwMzgyNmE1YTAzZWZlMzcy \ nYzgzOTMyIiwidXNlciI6ImFkbWluIn0 = \ п"}

Тогда мы должны использовать этот маркер для выполнения команд на API, что-то вроде:

$ curl 
-X GET \ 
-H "Content-Type:application/json" \ 
-u 'eyJldCI6IjEzODAyMzE3NTciLCJwYXNzd29yZCI6ImY3NzY2ZTFmNTgwMzgyNmE1YTAzZWZlMzcy\nYzgzOTMyIiwidXNlciI6ImFkbWluIn0=\n': \ 
http://10.11.19.104:8000/restapi/v2/virtual_service_groups 

И это даст мне ответ листинг (в данном случае) мои виртуальные группы услуг, и это работает с cURL.

Теперь, когда я пытаюсь использовать ansible для выполнения одних и тех же вещей, первый этап аутентификации проходит успешно (я могу даже использовать сгенерированный токен с cURL, и он его принимает), но второй шаг для запуска команд с сгенерированный маркер всегда дает мне 401 ошибку (Недействительные учетные данные):

- name: login into the load balancer 
    uri: 
    url: "{{ barracuda_url }}/login" 
    method: POST 
    body_format: json 
    body: 
     username: "{{ barracuda_user }}" 
     password: "{{ barracuda_pass }}" 
    headers: 
     Content-Type: application/json 
    return_content: yes 
    force_basic_auth: yes 
    register: login 
    tags: login, debug 

- debug: msg="{{ login.json.token }}" 
    tags: debug 

- name: get 
    uri: 
    url: "{{ barracuda_url }}/virtual_service_groups" 
    method: GET 
    body_format: json 
    user: "{{ login.json.token }}:" 
    headers: 
     Content-Type: application/json 
    return_content: yes 
    force_basic_auth: yes 
    register: response 

Вывод мой сборник пьес:

TASK [loadbalancer : login into the load balancer] ***************************** 
ok: [localhost] 

TASK [loadbalancer : debug] **************************************************** 
ok: [localhost] => { 
    "msg": "eyJldCI9IjE0ODQ2MDcxNTAiXCJwYXNzd29yZCI6IjRmM2TlYWMwN2ExNmUxYWFhNGEwNTU5NTMw\nZGQ3ZmM3IiwiaXNlciI6IndpYSJ9\n" 
} 

TASK [loadbalancer : get] ****************************************************** 
fatal: [localhost]: FAILED! => {"changed": false, "connection": "close", "content": "{\"error\":{\"msg\":\"Please log in to get valid token\",\"status\":401,\"type\":\"Invalid Credentials\"}}", "content_type": "application/json; charset=utf8", "date": "Mon, 16 Jan 2017 22:32:30 GMT", "failed": true, "json": {"error": {"msg": "Please log in to get valid token", "status": 401, "type": "Invalid Credentials"}}, "msg": "Status code was not [200]: HTTP Error 401: ", "redirected": false, "server": "BarracudaHTTP 4.0", "status": 401, "transfer_encoding": "chunked", "url": "http://10.11.19.104:8000/restapi/v2/virtual_service_groups"} 

ответ

0

Удалить двоеточие из "{{ login.json.token }}:" в user аргумента. Использование:

user: "{{ login.json.token }}" 

кишка не является частью имени пользователя, но curl синтаксис (используется в вашем примере, чтобы избежать интерактивного запроса пароля):

-u, --user <user:password> 
    [ ] 
    If you simply specify the user name, curl will prompt for a password. 
+0

Почти! С небольшим количеством тестов и ошибок (плюс wirehark) я обнаружил, что мне нужно удалить двоеточие и добавить параметр пустого пароля: '' 'user:" {{login.json.token}} " пароль:" " '' ' – EvenMe

+0

[Эта строка] (https://github.com/ansible/ansible/blob/devel/lib/ansible/module_utils/urls.py#L980) гарантирует, что независимо от того, укажите ли вы пустой пароль или не указываете это вообще, результирующее значение, переданное серверу, будет таким же. Я не совсем понимаю, почему вам нужно добавить его. – techraf

+0

Без этой строки ничего не прошло (я проверил на wirehark, было только имя пользователя/токена, без пустого поля для пароля). – EvenMe

Смежные вопросы