TOSIT-IO / tdp-collection

Ansible collection to deploy the components of TDP
Apache License 2.0
21 stars 20 forks source link

all: refactor install, init, start, stop, and restart playbooks for tdp-lib integration #75

Open mehdibn opened 2 years ago

mehdibn commented 2 years ago

TO_VALIDATE with @leopaul36 @rpignolet @gboutry @nschung before implementation:

I propose this design for the tdp playbooks that will be used by tdp-lib:

/tdp/playbooks-v2

One level : . ├── all ├── clients ├── hbase ├── hdfs ├── hive ├── knox ├── phoenix ├── ranger ├── spark ├── yarn └── zookeeper

Two levels : . ├── all │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml ├── clients │ ├── all │ ├── hadoop-client │ ├── hbase-client │ ├── hive-client │ ├── phoenix-client │ ├── phoenix-queryserver-client │ └── spark-client ├── hbase │ ├── all │ ├── master │ ├── ranger-plugin │ ├── regionserver │ └── rest ├── hdfs │ ├── all │ ├── datanode │ ├── journalnode │ ├── namenode │ └── ranger-plugin ├── hive │ ├── all │ ├── hiveserver2 │ ├── ranger-plugin │ └── tez ├── knox │ ├── all │ ├── gateway │ └── ranger-plugin ├── phoenix │ ├── all │ ├── coprocessor │ └── queryserver-daemon ├── ranger │ ├── admin │ ├── all │ └── usersync ├── spark │ ├── all │ └── historyserver ├── yarn │ ├── all │ ├── apptimelineserver │ ├── nodemanager │ ├── ranger-plugin │ └── resourcemanager └── zookeeper ├── all └── server

Three levels: . ├── all │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml ├── clients │ ├── all │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ └── ssl-tls.yml │ ├── hadoop-client │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ └── ssl-tls.yml │ ├── hbase-client │ │ ├── config.yml │ │ ├── install.yml │ │ └── kerberos.yml │ ├── hive-client │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ └── ssl-tls.yml │ ├── phoenix-client │ │ ├── config.yml │ │ └── install.yml │ ├── phoenix-queryserver-client │ │ ├── config.yml │ │ └── install.yml │ └── spark-client │ ├── config.yml │ ├── install.yml │ └── kerberos.yml ├── hbase │ ├── all │ │ ├── config.yml │ │ ├── hdfs_init.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── master │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── ranger-plugin │ │ ├── config.yml │ │ └── install.yml │ ├── regionserver │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ └── rest │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml ├── hdfs │ ├── all │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── datanode │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── journalnode │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── namenode │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ └── ranger-plugin │ ├── config.yml │ └── install.yml ├── hive │ ├── all │ │ ├── config.yml │ │ ├── hdfs_init.yml │ │ ├── init_schema.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── hiveserver2 │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── ranger-plugin │ │ ├── config.yml │ │ └── install.yml │ └── tez │ ├── config.yml │ └── install.yml ├── knox │ ├── all │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── gateway │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ └── ranger-plugin │ ├── config.yml │ └── install.yml ├── phoenix │ ├── all │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── ranger_policy.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── coprocessor │ │ └── install.yml │ └── queryserver-daemon │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml ├── ranger │ ├── admin │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── all │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ └── usersync │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml ├── spark │ ├── all │ │ ├── config.yml │ │ ├── hdfs_init.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ └── historyserver │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml ├── yarn │ ├── all │ │ ├── config.yml │ │ ├── hdfs_init.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── apptimelineserver │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── nodemanager │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── ranger-plugin │ │ ├── config.yml │ │ └── install.yml │ └── resourcemanager │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml └── zookeeper ├── all │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml └── server ├── config.yml ├── install.yml ├── kerberos.yml ├── restart.yml ├── ssl-tls.yml ├── start.yml └── stop.yml

gboutry commented 2 years ago

Having an all folder and does not follow the convention <service>_[component_]<action>.

This convention helps for automatic lookup in case of directories split as you present.

You can split the node name on the underscore, and guess the folder structure:

Here's a couple of examples:

Without an all folder, you know that the leaf of the path is always a .yml file and present in the component/service name folder

With an all folder, you create a special rule for services that their playbooks location must not represent the name of the node, and as such, making the keyword all a special case which can complicate things.

I would rather have: ├── hdfs │ ├── datanode │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── journalnode │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── namenode │ │ ├── config.yml │ │ ├── install.yml │ │ ├── kerberos.yml │ │ ├── restart.yml │ │ ├── ssl-tls.yml │ │ ├── start.yml │ │ └── stop.yml │ ├── ranger-plugin │ │ ├── config.yml │ │ └── install.yml │ ├── config.yml │ ├── install.yml │ ├── kerberos.yml │ ├── restart.yml │ ├── ssl-tls.yml │ ├── start.yml │ └── stop.yml

P.S.: As you can see, we created the convention to be able to split the playbook folder layout, but we decided to keep a flat layout for now. It's a good thing you bring this up now, as it was an item to be rediscussed later.

gboutry commented 2 years ago

An other point is that the dependency on nodes is reversed from the playbooks. The node hdfs_init depends on hdfs_namenode_init, hdfs_journalnode_init... And we do not want in tdp-lib an hdfs_init.yml playbook that will call all those playbooks, but we want the lib to call the playbooks in the order of the graph.

nschung commented 2 years ago

In my opinion, the actual all.yml needs to be kept in order to deploy cluster without dag.

rpignolet commented 2 years ago

I think, if we put all "meta" playbooks, the playbooks not used by tdp-lib in the same directories than playbooks used by tdp-lib it will be harder to understand what playbooks the lib is using.

I propose to have a all directory with all "meta" playbooks inside with the same directories tree as the "normal" playbooks directory. If we generate the "meta" playbooks with tdp-lib we just have to remove the all directory and tdp-lib can generate it.

├── all
│   ├── config.yml # Run config for all services
│   ├── hdfs
│   │   ├── config.yml # Run config for all component for hdfs
│   │   ├── install.yml
│   │   ├── kerberos.yml
│   │   ├── restart.yml
│   │   ├── ssl-tls.yml
│   │   ├── start.yml
│   │   └── stop.yml
│   ├── install.yml # Run install for all services
│   ├── kerberos.yml
│   ├── restart.yml
│   ├── ssl-tls.yml
│   ├── start.yml
│   └── stop.yml
└── hdfs
    ├── datanode
    │   ├── config.yml # Actual playbook used by "tdp-lib" to run config for hdfs datanode
    │   ├── install.yml
    │   ├── kerberos.yml
    │   ├── restart.yml
    │   ├── ssl-tls.yml
    │   ├── start.yml
    │   └── stop.yml
    ├── journalnode
    │   ├── config.yml
    │   ├── install.yml
    │   ├── kerberos.yml
    │   ├── restart.yml
    │   ├── ssl-tls.yml
    │   ├── start.yml
    │   └── stop.yml
    ├── namenode
    │   ├── config.yml
    │   ├── install.yml
    │   ├── kerberos.yml
    │   ├── restart.yml
    │   ├── ssl-tls.yml
    │   ├── start.yml
    │   └── stop.yml
    └── ranger-plugin
        ├── config.yml
        └── install.yml
nschung commented 2 years ago

Could you explain what the "meta" playbooks do? What are the differences with the playbooks used by tdp-lib?

rpignolet commented 2 years ago

"meta" playbooks is for manual usage of tdp-collection without tdp-lib

nschung commented 2 years ago

In the case, the "meta" playbooks need only import the playbooks used by "tdb-lib". We can simplify the all directory structure.

rpignolet commented 2 years ago

The goal is to have a playbook to run config for all services and another playbook config for all component inside hdfs for example.