Blame README.md

Packit Service 0535c1
# We are Nmstate!
Packit Service 0535c1
A declarative network manager API for hosts.
Packit Service 0535c1
Packit Service 0535c1
[![Test Status](https://travis-ci.com/nmstate/nmstate.png?branch=master)](https://travis-ci.com/nmstate/nmstate)
Packit Service 0535c1
[![Coverage Status](https://coveralls.io/repos/github/nmstate/nmstate/badge.svg?branch=master)](https://coveralls.io/github/nmstate/nmstate?branch=master)
Packit Service 0535c1
[![PyPI version](https://badge.fury.io/py/nmstate.svg)](https://badge.fury.io/py/nmstate)
Packit Service 0535c1
[![Fedora Rawhide version](https://img.shields.io/badge/dynamic/json.svg?label=Fedora%20Rawhide&url=https%3A%2F%2Fapps.fedoraproject.org%2Fmdapi%2Frawhide%2Fpkg%2Fnmstate&query=%24.version&colorB=blue)](https://apps.fedoraproject.org/packages/nmstate)
Packit Service 0535c1
[![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)
Packit Service 0535c1
[![Language grade: Python](https://img.shields.io/lgtm/grade/python/g/nmstate/nmstate.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/nmstate/nmstate/context:python)
Packit Service 0535c1
Packit Service 0535c1
Copr build status, all repos are built for Fedora 31+ and RHEL/CentOS/EPEL 8:
Packit Service 0535c1
Packit Service 0535c1
* Latest release: [![Latest release Copr build status](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate/package/nmstate/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate/package/nmstate/)
Packit Service 0535c1
* Git master: [![Git master Copr build status](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate-git/package/nmstate/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate-git/package/nmstate/)
Packit Service 0535c1
* Latest 0.2 release: [![Latest 0.2 release Copr build status](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate-0.2/package/nmstate/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate-0.2/package/nmstate/)
Packit Service 0535c1
* Git nmstate-0.2: [![Git nmstate-0.2 Copr build status](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate-0.2-git/package/nmstate/status_image/last_build.png)](https://copr.fedorainfracloud.org/coprs/nmstate/nmstate-0.2-git/package/nmstate/)
Packit Service 0535c1
Packit Service 0535c1
## What is it?
Packit Service 0535c1
Nmstate is a library with an accompanying command line tool that manages
Packit Service 0535c1
host networking settings in a declarative manner.
Packit Service 0535c1
The networking state is described by a pre-defined schema.
Packit Service 0535c1
Reporting of current state and changes to it (desired state) both conform to
Packit Service 0535c1
the schema.
Packit Service 0535c1
Packit Service 0535c1
Nmstate is aimed to satisfy enterprise needs to manage host networking through
Packit Service 0535c1
a northbound declarative API and multi provider support on the southbound.
Packit Service 0535c1
NetworkManager acts as the main (and currently the only) provider supported.
Packit Service 0535c1
Packit Service 0535c1
## State example:
Packit Service 0535c1
Packit Service 0535c1
Desired/Current state example (YAML):
Packit Service 0535c1
```yaml
Packit Service 0535c1
interfaces:
Packit Service 0535c1
- name: eth1
Packit Service 0535c1
  type: ethernet
Packit Service 0535c1
  state: up
Packit Service 0535c1
  ipv4:
Packit Service 0535c1
    enabled: true
Packit Service 0535c1
    address:
Packit Service 0535c1
    - ip: 192.0.2.10
Packit Service 0535c1
      prefix-length: 24
Packit Service 0535c1
    dhcp: false
Packit Service 0535c1
  ipv6:
Packit Service 0535c1
    enabled: true
Packit Service 0535c1
    address:
Packit Service 0535c1
    - ip: 2001:db8:1::a
Packit Service 0535c1
      prefix-length: 64
Packit Service 0535c1
    autoconf: false
Packit Service 0535c1
    dhcp: false
Packit Service 0535c1
dns-resolver:
Packit Service 0535c1
  config:
Packit Service 0535c1
    search:
Packit Service 0535c1
    - example.com
Packit Service 0535c1
    - example.org
Packit Service 0535c1
    server:
Packit Service 0535c1
    - 2001:4860:4860::8888
Packit Service 0535c1
    - 8.8.8.8
Packit Service 0535c1
routes:
Packit Service 0535c1
  config:
Packit Service 0535c1
  - destination: 0.0.0.0/0
Packit Service 0535c1
    next-hop-address: 192.0.2.1
Packit Service 0535c1
    next-hop-interface: eth1
Packit Service 0535c1
  - destination: ::/0
Packit Service 0535c1
    next-hop-address: 2001:db8:1::1
Packit Service 0535c1
    next-hop-interface: eth1
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
## Basic Operations
Packit Service 0535c1
Packit Service 0535c1
Show eth0 current state (python/shell):
Packit Service 0535c1
Packit Service 0535c1
```python
Packit Service 0535c1
import libnmstate
Packit Service 0535c1
Packit Service 0535c1
state = libnmstate.show()
Packit Service 0535c1
eth0_state = next(ifstate for ifstate in state['interfaces'] if ifstate['name'] == 'eth0')
Packit Service 0535c1
Packit Service 0535c1
# Here is the MAC address
Packit Service 0535c1
eth0_mac = eth0_state['mac-address']
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
```shell
Packit Service 0535c1
nmstatectl show eth0
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
Change to desired state (python/shell):
Packit Service 0535c1
Packit Service 0535c1
```python
Packit Service 0535c1
import libnmstate
Packit Service 0535c1
Packit Service 0535c1
# Specify a Linux bridge (created if it does not exist).
Packit Service 0535c1
state = {'interfaces': [{'name': 'br0', 'type': 'linux-bridge', 'state': 'up'}]}
Packit Service 0535c1
libnmstate.apply(state)
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
```shell
Packit Service 0535c1
# use yaml or json formats
Packit Service 0535c1
nmstatectl set desired-state.yml
Packit Service 0535c1
nmstatectl set desired-state.json
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
Edit the current state(python/shell):
Packit Service 0535c1
```python
Packit Service 0535c1
import libnmstate
Packit Service 0535c1
Packit Service 0535c1
state = libnmstate.show()
Packit Service 0535c1
eth0_state = next(ifstate for ifstate in state['interfaces'] if ifstate['name'] == 'eth0')
Packit Service 0535c1
Packit Service 0535c1
# take eth0 down
Packit Service 0535c1
eth0_state['state'] = 'down'
Packit Service 0535c1
libnmstate.apply(state)
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
```shell
Packit Service 0535c1
# open current state in a text editor, change and save to apply
Packit Service 0535c1
nmstatectl edit eth3
Packit Service 0535c1
```
Packit Service 0535c1
Packit Service 0535c1
## Contact
Packit Service 0535c1
Packit Service 0535c1
*Nmstate* uses the [nmstate-devel@lists.fedorahosted.org][mailing_list] for
Packit Service 0535c1
discussions. To subscribe you can send an email with 'subscribe' in the subject
Packit Service 0535c1
to <nmstate-devel-join@lists.fedorahosted.org> or visit the
Packit Service 0535c1
[mailing list page][mailing_list].
Packit Service 0535c1
Packit Service 0535c1
Development planning (sprints and progress reporting) happens in
Packit Service 0535c1
([Jira](https://nmstate.atlassian.net)). Access requires login.
Packit Service 0535c1
Packit Service 0535c1
There is also `#nmstate` on
Packit Service 0535c1
[Freenode IRC](https://freenode.net/kb/answer/chat).
Packit Service 0535c1
Packit Service 0535c1
## Contributing
Packit Service 0535c1
Packit Service 0535c1
Yay! We are happy to accept new contributors to the Nmstate project. Please follow
Packit Service 0535c1
these [instructions](CONTRIBUTING.md) to contribute.
Packit Service 0535c1
Packit Service 0535c1
## Installation
Packit Service 0535c1
Packit Service 0535c1
For Fedora 29+, `sudo dnf install nmstate`.
Packit Service 0535c1
Packit Service 0535c1
For others distribution, please see the [install](README.install.md)
Packit Service 0535c1
instructions.
Packit Service 0535c1
Packit Service 0535c1
## Documentation
Packit Service 0535c1
Packit Service 0535c1
* [libnmstate API](https://nmstate.github.io/devel/api.html)
Packit Service 0535c1
* [Code examples](https://nmstate.github.io/devel/py_example.html)
Packit Service 0535c1
* [State examples](https://nmstate.github.io/examples.html)
Packit Service 0535c1
* [nmstatectl user guide](https://nmstate.github.io/cli_guide.html)
Packit Service 0535c1
* nmstatectl man page: `man nmstatectl`
Packit Service 0535c1
Packit Service 0535c1
## Limitations
Packit Service 0535c1
Packit Service 0535c1
Please refer to [jira page][jira_limitation] for details.
Packit Service 0535c1
Packit Service 0535c1
* Maximum supported number of interfaces in a single desire state is 1000.
Packit Service 0535c1
Packit Service 0535c1
## Changelog
Packit Service 0535c1
Packit Service 0535c1
Please refer to [CHANGELOG](CHANGELOG)
Packit Service 0535c1
Packit Service 0535c1
Packit Service 0535c1
[jira_limitation]: https://nmstate.atlassian.net/issues/?filter=10003
Packit Service 0535c1
[mailing_list]: https://lists.fedorahosted.org/admin/lists/nmstate-devel.lists.fedorahosted.org