2016-11-29 3 views
1

Я играю вокруг с карими, используя aws-облачную форму и можно развернуть кластер из двух узлов карибского дерева + отдельный mancenter.Как автоматизировать добавление лицензионного ключа в mancenter hazelcast

Вся документация на mancenter означает, что все должно выполняться вручную пользователем в браузере. Однако это не идеально, так как у нас будет много условий и у нас есть закаленные ами, которые мы каждые несколько недель должны обновить.

То, что я пытаюсь сделать, это создать роль, которая автоматически создаст первого пользователя-администратора, а затем добавит корпоративную лицензию в mancenter.

Я успешно сценарий создания пользователя (только HTTP в настоящее время, шаги ребенка)

- name: Check for first user 
    uri: 
    url: "http://{{ hazelcastmanagement_dns }}:8080/mancenter/user.do?operation=anyUser&_=1480397059541" 
    method: GET 
    return_content: no 
    register: anyuser 
    until: anyuser.json["anyUser"] is defined 
    retries: 10 
    delay: 5 

- name: Register Admin user 
    uri: 
    url: "http://{{ hazelcastmanagement_dns }}:8080/mancenter/user.do?operation=signUp&username={{ hazelcastmanagement_user }}&password={{ hazelcastmanagement_password }}&confirmpassword={{ hazelcastmanagement_password }}&email={{ hazelcastmanagement_email }}&_=1479951949840" 
    method: GET 
    return_content: no 
    register: result 
    until: result.json["success"] is defined 
    retries: 10 
    delay: 5 
    when: anyuser.json["anyUser"] == "false" 

Однако у меня возникли проблемы успешно организуя вызов лицензии обновления. В браузере определенные вызовы возвращают идентификатор JSESSION и HTTP 200. Однако, пытаясь подражать этому, невозможно получить 302, перенаправляя страницу входа.

Я вставил задачи ниже, которые я пытаюсь сделать. Эти примеры задач не содержат много заголовков, однако я попытался подражать каждому заголовку, который браузер отправляет ранее, но имел тот же результат.

- name: Call to update license unauthorized (returns set_cookie) 
    uri: 
    url: "http://{{ hazelcastmanagement_dns }}:8080/mancenter/main.do" 
    method: POST 
    return_content: yes 
    body: "operation=savelicense_getLicenceInfo&key={{ hazelcast_license }} " 
    status_code: 302 
    register: cookie 

- name: Login (302 ok because browser mirrors this result) 
    uri: 
    url: "http://{{ hazelcastmanagement_dns }}:8080/mancenter/j_spring_security_check" 
    method: POST 
    body: "j_username={{ hazelcastmanagement_user }}&j_password={{ hazelcastmanagement_password }}" 
    return_content: yes 
    status_code: 302 
    HEADER_Cookie: "{{cookie.set_cookie}}" 

- name: Call to update license authorized 
    uri: 
    url: "http://{{ hazelcastmanagement_dns }}:8080/mancenter/main.do" 
    method: POST 
    return_content: yes 
    body: "operation=savelicense_getLicenceInfo&key={{ hazelcast_license }}" 
    HEADER_Cookie: "{{cookie.set_cookie}}" 

Моих анзибли журналы задачи ниже, -vvvv Надеясь кто-то посмотрели на это ранее, не может найти какие-либо вопросы, связанные с ним в другом месте, однако. анзибль Вход Выход:

TASK [hazelcastmanagement_launch : Call to update license authorized] ********** 
task path: /app/esg/ansible/roles/hazelcastmanagement_launch/tasks/launch.yml:5 
ESTABLISH LOCAL CONNECTION FOR USER: root 
hazelcast EXEC (umask 22 && mkdir -p "$(echo /tmp/ansible-tmp-1480399947.07-7077332634698)" && echo "$(echo /tmp/ansible-tmp-1480399947.07-7077332634698)") 
hazelcast PUT /tmp/tmpBbuVj0 TO /tmp/ansible-tmp-1480399947.07-7077332634698/uri 
hazelcast EXEC chmod a+r /tmp/ansible-tmp-1480399947.07-7077332634698/uri 
hazelcast EXEC /bin/sh -c 'sudo -H -S -n -u esg /bin/sh -c '"'"'echo BECOME-SUCCESS-lemxlebthsblahblahblahcevqzkafjdo; LANG=en_US.UTF-8 HTTP_PROXY=proxy.com LC_MESSAGES=en_US.UTF-8 HTTPS_PROXY=proxy.com no_proxy=proxy.com http_proxy=proxy.com https_proxy=proxy.com NO_PROXY=proxy.com LC_ALL=en_US.UTF-8 /usr/bin/python /tmp/ansible-tmp-1480399947.07-7077332634698/uri'"'"'' 
hazelcast EXEC rm -f -r /tmp/ansible-tmp-1480399947.07-7077332634698/ > /dev/null 2>&1 
ok: [hazelcast] => {"changed": false, "content": "", "content_length": "0", "expires": "Thu, 01 Jan 1970 00:00:00 GMT", "invocation": {"module_args": {"backup": null, "body": "operation=savelicense_getLicenceInfo&key=ENTERPRISELicense12341234123412341234123412341234", "body_format": "raw", "content": null, "creates": null, "delimiter": null, "dest": null, "directory_mode": null, "follow": false, "follow_redirects": "safe", "force": null, "force_basic_auth": false, "group": null, "method": "POST", "mode": null, "owner": null, "password": null, "regexp": null, "remote_src": null, "removes": null, "return_content": true, "selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, "status_code": ["302"], "timeout": 30, "url": "http://internal-esg-aws.elb.amazonaws.com:8080/mancenter/main.do", "user": null, "validate_certs": true}, "module_name": "uri"}, "location": "http://internal-esg-aws.elb.amazonaws.com:8080/mancenter/login.jsp;jsessionid=dq0hzdvm2xm91r4h6eyef1l48", "redirected": false, "server": "Jetty(8.y.z-SNAPSHOT)", "set_cookie": "JSESSIONID=dq0hzdvm2xm91r4h6eyef1l48;Path=/mancenter;HttpOnly", "status": 302} 


TASK [hazelcastmanagement_launch : Login] ************************************** 
task path: /app/app/ansible/roles/hazelcastmanagement_launch/tasks/launch.yml:14 
ESTABLISH LOCAL CONNECTION FOR USER: root 
hazelcast EXEC (umask 22 && mkdir -p "$(echo /tmp/ansible-tmp-1480399947.23-71435275964843)" && echo "$(echo /tmp/ansible-tmp-1480399947.23-71435275964843)") 
hazelcast PUT /tmp/tmpKhOI1y TO /tmp/ansible-tmp-1480399947.23-71435275964843/uri 
hazelcast EXEC chmod a+r /tmp/ansible-tmp-1480399947.23-71435275964843/uri 
hazelcast EXEC /bin/sh -c 'sudo -H -S -n -u app /bin/sh -c '"'"'echo BECOME-SUCCESS-rfxrchqnblahblahblahhvryauidnf; LANG=en_US.UTF-8 HTTP_PROXY=proxy.com8 LC_MESSAGES=en_US.UTF-8 HTTPS_PROXY=proxy.com no_proxy=proxy.com http_proxy=proxy.com NO_PROXY=proxy.com LC_ALL=en_US.UTF-8 /usr/bin/python /tmp/ansible-tmp-1480399947.23-71435275964843/uri'"'"'' 
hazelcast EXEC rm -f -r /tmp/ansible-tmp-1480399947.23-71435275964843/ > /dev/null 2>&1 
ok: [hazelcast] => {"changed": false, "content": "", "content_length": "0", "invocation": {"module_args": {"HEADER_Cookie": "JSESSIONID=dq0hzdvm2xm91r4h6eyef1l48;Path=/mancenter;HttpOnly", "backup": null, "body": "j_username=admin&j_password=admin1", "body_format": "raw", "content": null, "creates": null, "delimiter": null, "dest": null, "directory_mode": null, "follow": false, "follow_redirects": "safe", "force": null, "force_basic_auth": false, "group": null, "method": "POST", "mode": null, "owner": null, "password": null, "regexp": null, "remote_src": null, "removes": null, "return_content": true, "selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, "status_code": ["302"], "timeout": 30, "url": "http://internal-aws.elb.amazonaws.com:8080/mancenter/j_spring_security_check", "user": null, "validate_certs": true}, "module_name": "uri"}, "location": "http://internal-aws.elb.amazonaws.com:8080/mancenter/login.jsp?login_error=true", "redirected": false, "server": "Jetty(8.y.z-SNAPSHOT)", "status": 302} 

TASK [hazelcastmanagement_launch : Call to update license authorized] ********** 
task path: /app/app/ansible/roles/hazelcastmanagement_launch/tasks/launch.yml:23 
ESTABLISH LOCAL CONNECTION FOR USER: root 
hazelcast EXEC (umask 22 && mkdir -p "$(echo /tmp/ansible-tmp-1480399947.38-137956022601151)" && echo "$(echo /tmp/ansible-tmp-1480399947.38-137956022601151)") 
hazelcast PUT /tmp/tmpAbC8uL TO /tmp/ansible-tmp-1480399947.38-137956022601151/uri 
hazelcast EXEC chmod a+r /tmp/ansible-tmp-1480399947.38-137956022601151/uri 
hazelcast EXEC /bin/sh -c 'sudo -H -S -n -u app /bin/sh -c '"'"'echo BECOME-SUCCESS-cciaazzdblahblahblahdufmpuhe; LANG=en_US.UTF-8 HTTP_PROXY=proxy.com LC_MESSAGES=en_US.UTF-8 HTTPS_PROXY=proxy.com no_proxy=proxy.com http_proxy=proxy.com https_proxy=proxy.com NO_PROXY=proxy.comLC_ALL=en_US.UTF-8 /usr/bin/python /tmp/ansible-tmp-1480399947.38-137956022601151/uri'"'"'' 
hazelcast EXEC rm -f -r /tmp/ansible-tmp-1480399947.38-137956022601151/ > /dev/null 2>&1 
fatal: [hazelcast]: FAILED! => {"changed": false, "content": "", "content_length": "0", "failed": true, "invocation": {"module_args": {"HEADER_Cookie": "JSESSIONID=dq0hzdvm2xm91r4h6eyef1l48;Path=/mancenter;HttpOnly", "backup": null, "body": "operation=savelicense_getLicenceInfo&key=ENTERPRISELicense123412341234123412341234123412341234", "body_format": "raw", "content": null, "creates": null, "delimiter": null, "dest": null, "directory_mode": null, "follow": false, "follow_redirects": "safe", "force": null, "force_basic_auth": false, "group": null, "method": "POST", "mode": null, "owner": null, "password": null, "regexp": null, "remote_src": null, "removes": null, "return_content": true, "selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, "status_code": [200], "timeout": 30, "url": "http://internal-aws.elb.amazonaws.com:8080/mancenter/main.do", "user": null, "validate_certs": true}, "module_name": "uri"}, "location": "http://internal-aws.elb.amazonaws.com:8080/mancenter/login.jsp", "msg": "Status code was not [200]", "redirected": false, "server": "Jetty(8.y.z-SNAPSHOT)", "status": 302} 

EDIT: Спасибо за это решение Эмре. Использование завитка - это путь.

Я пробовал еще несколько раз с помощью модуля uri ansible. Но кубики ... должно быть, что-то под капотом.

Поскольку ваш завиток поражает гвоздь на голове, я просто завернул его в модуль управляемых команд вместо использования модуля uri для построения вызовов. I chdir to/tmp, чтобы гарантировать, что у меня есть доступ для записи файла cookie.

- name: Login to management 
    shell: "curl -X POST http://{{ hazelcastmanagement_dns }}:8080/mancenter/j_spring_security_check -d "j_username={{ hazelcastmanagement_user}}" -d "j_password={{ hazelcastmanagement_password }}" -c cookies.file 
    args: 
    chdir: /tmp 

- name: Login to management 
    shell: "curl -H "Content-Type: application/x-www-form-urlencoded" -X POST http://{{ hazelcastmanagement_dns }}:8080/mancenter/main.do?operation=savelicense -d 'key={{ hazelcast_licence }}' -b cookies.file 
    args: 
    chdir: /tmp 

ответ

3

Я не знаю, о анзибль, но с помощью CURL вы можете войти и установить лицензионный ключ следующим образом:

curl -X POST http://localhost:8083/mancenter/j_spring_security_check -d "j_username=emre" -d "j_password=Password1" -c cookies.file 

curl -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:8083/mancenter/main.do?operation=savelicense -d 'key=aaaa' -b cookies.file 

Обратите внимание, что вам необходимо войти в систему с пользователем админ а лицензионный ключ, который вы предоставляете, должен быть правильным для сервера для возврата 200.

+0

Спасибо за это сообщение. Поэтому я попробовал еще несколько раз с модулем uri ansible. Но кубики ... должно быть, что-то под капотом. Я завернул это в незаменимый командный модуль, и он работает. Добавил мой вопрос к вопросу, поскольку он слишком длинный для комментариев. – metalisticpain

+0

Кстати, обратите внимание, что это * не * общедоступный API, который, как гарантируется, будет сохранен в будущих выпусках. – emre

+0

Полностью. Во время этой реализации Hazelcast не опубликовал API для mancenter, и их рекомендуемый подход к настройке был ручным человеком через gui (не очень хорошо, если вы вращаетесь и оторваетесь). Это может и, вероятно, изменится с будущими выпусками (надеюсь). – metalisticpain