I do not think the predicate is implemented yet.
Looking into to UI (as Yusaku suggested) this is what it is issuing.
{"RequestInfo":{"context":"Start All Host
Components","operation_level":{"level":"HOST","cluster_name":"c1","host_names":"u1201.ambari.apache.org"},"query":"HostRoles/component_name.in(APP_TIMELINE_SERVER,DATANODE,HISTORYSERVER,NAMENODE,NODEMANAGER,RESOURCEMANAGER,SECONDARY_NAMENODE,ZOOKEEPER_SERVER)"},"Body":{"HostRoles":{"state":"STARTED"}}}:
As you can see all component names are explicit.
________________________________
From: Krzysztof Adamski <[email protected]>
Sent: Thursday, April 09, 2015 1:38 AM
To: [email protected]
Subject: Re: Start/stop all services programmatically
Still no luck.
The status is I can stop all components that were originally started (excluding
client components, thanks Sumit).
curl -u admin:admin -H "X-Requested-By: ambari" -i -X PUT -d
'{"RequestInfo":{"context":"Stop All Host
Components"},"Body":{"HostRoles":{"state":"INSTALLED"}}}'
"http://u1201.ambari.apache.org:8080/api/v1/clusters/c1/host_components?HostRoles/host_name=u1201.ambari.apache.org&HostRoles/state=STARTED"
However I cannot start the components as client ones are complaining. I wish
there was a third state STOPPED. Any ideas how to make a one-liner to start all
hosts components excluding client? I was only able to make GET working
curl -u admin:admin -H "X-Requested-By: ambari" -i -X GET
"http://ambari:8080/api/v1/clusters/HADOOP_LAB/components?ServiceComponentInfo/categry.in(MASTER,SLAVE)&host_components/HostRoles/host_name=host1&host_components/HostRoles/state=INSTALLED"
On Thu, Apr 9, 2015 at 9:26 AM Krzysztof Adamski
<[email protected]<mailto:[email protected]>> wrote:
Couldn't make PUT working :(
I see there is another option
https://cwiki.apache.org/confluence/display/AMBARI/Restarting+host+components+via+the+API
On Thu, Apr 9, 2015 at 8:34 AM Krzysztof Adamski
<[email protected]<mailto:[email protected]>> wrote:
almost there
Get works
curl -u admin:admin -H "X-Requested-By: ambari" -i -X GET
"http://ambari:8080/api/v1/clusters/HADOOP_LAB/components?ServiceComponentInfo/categry.in(MASTER,SLAVE)&host_components/HostRoles/host_name=host1&host_components/HostRoles/state=INSTALLED"
On Thu, Apr 9, 2015 at 7:56 AM Krzysztof Adamski
<[email protected]<mailto:[email protected]>> wrote:
That's it. A clever solution indeed.
How about starting the services then? How to quickly exclude client components?
"message" : "java.lang.IllegalArgumentException: Invalid desired state for a
client component"
There is a filter like this
ServiceComponentInfo/category.in<http://category.in>(SLAVE,MASTER)
On Thu, Apr 9, 2015 at 7:41 AM Sumit Mohanty
<[email protected]<mailto:[email protected]>> wrote:
You can try something like this ....
curl -u admin:admin -H "X-Requested-By: ambari" -i -X PUT -d
'{"RequestInfo":{"context":"Stop All Host
Components"},"Body":{"HostRoles":{"state":"INSTALLED"}}}'
"http://u1201.ambari.apache.org:8080/api/v1/clusters/c1/host_components?HostRoles/host_name=u1201.ambari.apache.org&HostRoles/state=STARTED"
Predicates such as
"HostRoles/host_name=u1201.ambari.apache.org<http://u1201.ambari.apache.org>&HostRoles/state=STARTED"
will help narrow down the choices.
________________________________
From: Krzysztof Adamski
<[email protected]<mailto:[email protected]>>
Sent: Wednesday, April 08, 2015 10:11 PM
To: [email protected]<mailto:[email protected]>
Subject: Re: Start/stop all services programmatically
Hi Yusaku,
Many thanks for pointing me to the dependancies file. It would help a lot.
The problem with the stop all command you sent is that this for all services
within the cluster and I want to do this explicitly on a host basis to perform
a rolling OS patching.
Another issue is that specifying state:INSTALL would result in installing
client components on the hosts where I do not want to have them e.g. data nodes.
Unless I did something wrong.
Regards,
Krzysztof
On Thu, Apr 9, 2015 at 2:34 AM Yusaku Sako
<[email protected]<mailto:[email protected]>> wrote:
Sorry, forgot to answer your second question regarding dependencies.
Such dependencies are specified in a file called role_command_order.json as
part of the stack defintion.
https://github.com/apache/ambari/blob/trunk/ambari-server/src/main/resources/stacks/HDP/2.0.6/role_command_order.json
If you try to start/stop all services in bulk, the command order rules will be
followed automatically by the server.
Yusaku
From: Yusaku Sako <[email protected]<mailto:[email protected]>>
Reply-To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Date: Wednesday, April 8, 2015 5:27 PM
To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Subject: Re: Start/stop all services programmatically
Hi Krzysztof,
You can do everything that the UI does with the API.
The best way to learn what API calls the UI is making is to use the browser's
developer tool and watch the network traffic.
Stop all services:
curl -i -uadmin:admin -H "X-Requested-By: ambari" -X PUT -d '
{"RequestInfo":{"context":"Stop all
services","operation_level":{"level":"CLUSTER","cluster_name":"ing_hdp"}},"Body":{"ServiceInfo":{"state":"INSTALLED"}}}
' http://ambari:8080/api/v1/clusters/ing_hdp/services
Start all services:
curl -i -uadmin:admin -H "X-Requested-By: ambari" -X PUT -d '
{"RequestInfo":{"context":"Start all
services","operation_level":{"level":"CLUSTER","cluster_name":"ing_hdp"}},"Body":{"ServiceInfo":{"state":"STARTED"}}}
' http://ambari:8080/api/v1/clusters/ing_hdp/services
I hope this helps.
Yusaku
From: Krzysztof Adamski
<[email protected]<mailto:[email protected]>>
Reply-To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Date: Tuesday, April 7, 2015 12:15 AM
To: "[email protected]<mailto:[email protected]>"
<[email protected]<mailto:[email protected]>>
Subject: Start/stop all services programmatically
Hello,
I am busy implementing a manual job to stop all hosts services via script
before rebooting the OS. The examples I found in wiki are per service or
component.
1. Is there any way to invoke the stop/start for all hosts components just like
from a web interface?
2. How ambari determines the proper order for the services to start/stop e.g.
first stop hiveserver before stopping mysql etc.
curl -s --user admin:admin -H "X-Requested-By: ambari" -X GET
"http://ambari:8080/api/v1/clusters/ing_hdp/components/?ServiceComponentInfo/category.in(SLAVE,MASTER)&host_components/HostRoles/host_name=host1&fields=host_components/HostRoles/component_name,host_components/HostRoles/state"
| jq -r '[[.items[].host_components[].HostRoles.component_name]]|tostring' |
sed -r 's/[\["]//g' | sed -r 's/[]]//g'
function stop(){
curl -u admin:admin -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo":
{"context" :"Stop ‘"$1"’ via REST"}, "Body": {"HostRoles": {"state":
"INSTALLED"}}}'
http://ambari:8080/api/v1/clusters/ing_hdp/hosts/host1/host_components/$1
}
Thanks for any guide.